Я начинаю программировать с 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 и избежать большего количества строк в моем коде. Большое спасибо