Ответы пользователя по тегу Go
  • Как вызывать и работать с exe файлом с помощью golang в windows?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    В дополнение к ответу Александра, если требуется не только прочитать какие-то данные из сторонней программы, но еще и что-то ввести в ее стандартный поток ввода (как я понял, основная задача именно в этом), можно поступить так:

    package main
    
    import (
    	"fmt"
    	"log"
    	"os/exec"
    )
    
    func main() {
    	cmd := exec.Command("cmd", "/C", "C:/gopath/src/script/for.exe")
    
    	// Чтобы вводить что-то в стандартный поток ввода другой программы, нужно получить ее pipe.
    	pipe, err := cmd.StdinPipe()
    	if err != nil {
    		log.Fatal(err)
    	}
    	// Куда впоследствии можно что-то писать.
    	pipe.Write([]byte("piggybank"))
    	// После ввода всех данных нужно обязательно его закрыть.
    	pipe.Close()
    
    	// Самый простой способ получить вывод другой программы, использовать:
    	output, err := cmd.Output()
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Print(string(output))
    }
    Ответ написан
    1 комментарий
  • Как в go получить результат sql запроса по частям?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    Позволяет по дефолту, но не по тысяче строк, а в виде курсора, который двигается при каждом вызове rows.Next(), о чем подробнее можно прочитать в документации database/sql:
    https://golang.org/pkg/database/sql/#Rows

    Там же есть пример, который это иллюстрирует:
    rows, err := db.Query("SELECT ...")
    ...
    defer rows.Close()
    for rows.Next() {
        var id int
        var name string
        err = rows.Scan(&id, &name)
        ...
    }
    err = rows.Err() // get any error encountered during iteration
    ...


    Только в Go для конкретных баз данных написаны разные драйверы: https://github.com/golang/go/wiki/SQLDrivers
    И хорошо бы заранее проверить в исходниках, что драйвер, который вы используете, действительно использует курсор внутри, а не считывает, например, сразу все в слайс и выдает элементы из него по одному.
    Ответ написан
    Комментировать