Только ввод функции один раз для инициализации - PullRequest
0 голосов
/ 13 марта 2019

Я начинаю программировать с Go и пытаюсь создать программу, которая выполняет запросы к БД и возвращает данные. Я достиг этого, но у меня возникли некоторые проблемы и вопросы во время этого.

Во-первых, я попытался создать for с условием, чтобы сообщить программе, когда я хочу прекратить делать запросы, но оператор Init для запросов for, который оценивается только один раз, - и меня никогда больше не просят ввести ввод через терминал- (я читал здесь, потому что его значение удерживается, а затем оно не выполняет функцию снова: Оператор переключения Golang вызывает функцию только один раз ):

Отредактированный

func main() {
    var query string
    for query = ReadQuery(); query != "exit\n"; {
        rows, err := db.Query(query)
        //Printing results and other operations
    }
    fmt.Println("Exiting")
}

func ReadQuery() string {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter query in a single line, with no newline. 'exit' to terminate execution: \n")
    query, _ :=reader.ReadString('\n')
    reader.Reset(os.Stdin)
    return query
}

... поэтому я сделал это исправление, которое выглядит мне немного грязным:

func main() {
    var query string
    for {
        query = ReadQuery()
        if query == "exit\n" {
            fmt.Println("Exiting")
            break
        }
        //Printing results and other operations
    }
}

func ReadQuery() string {
   reader := bufio.NewReader(os.Stdin)
   fmt.Print("Enter query in a single line, with no newline. 'exit' to terminate execution: \n")
   query, _ :=reader.ReadString('\n')
   reader.Reset(os.Stdin)
   return query
}

Таким образом, вопрос в том, есть ли другой способ сделать это, используя операторы for и избежать большего количества строк в моем коде. Большое спасибо

1 Ответ

0 голосов
/ 13 марта 2019

Вам необходимо добавить оператор post в ваш цикл, который будет вызываться на каждой итерации.

var query string
for query = ReadQuery(); query != "exit\n"; query = ReadQuery() {
    // loop body
}

Go Tour имеет хорошее объяснение этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...