英文:
Can't return value in Golang
问题
我是你的中文翻译助手,以下是翻译好的内容:
我对golang还不熟悉,不明白为什么不能返回一个值。我觉得这可能是一个小错误。我只是想返回我从数据库中选择的一个字符串。
func myFunction() string {
rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
if err != nil {
logger.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var my_string string
if err := rows.Scan(&my_string); err != nil {
logger.Fatal(err)
}
logger.Info("Result : ", my_string)
}
if err := rows.Err(); err != nil {
logger.Fatal(err)
}
return my_string
}
有什么想法吗?我犯了什么错误?
英文:
I'm new to golang and I dont get why I can't return a value. I think it's a small mistake. I just want to return a string I picked in a DB.
func myFunction() string {
rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
if err != nil {
logger.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var my_string string
if err := rows.Scan(&my_string); err != nil {
logger.Fatal(err)
}
logger.Info("Result : ", my_string)
}
if err := rows.Err(); err != nil {
logger.Fatal(err)
}
return my_string
}
Any idea ? What is my mistake ?
答案1
得分: 1
只需将my_string移动到外部循环即可。
func myFunction() string {
rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
if err != nil {
logger.Fatal(err)
}
defer rows.Close()
var my_string string
for rows.Next() {
if err := rows.Scan(&my_string); err != nil {
logger.Fatal(err)
}
logger.Info("Result : ", my_string)
// 在此处使用my_string
}
if err := rows.Err(); err != nil {
logger.Fatal(err)
}
return my_string
}
英文:
Just move my_string to outer loop
func myFunction() string {
rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
if err != nil {
logger.Fatal(err)
}
defer rows.Close()
var my_string string
for rows.Next() {
if err := rows.Scan(&my_string); err != nil {
logger.Fatal(err)
}
logger.Info("Result : ", my_string)
}
if err := rows.Err(); err != nil {
logger.Fatal(err)
}
return my_string
}
答案2
得分: 1
当你选择单行时(使用LIMIT 1
),你应该使用QueryRow
方法或者较新的QueryRowContext
方法,而不是使用Query
方法。
func myFunction() string {
var my_string string
row := db.QueryRow("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
if err := row.Scan(&my_string); err != nil {
logger.Fatal(err)
}
return my_string
}
英文:
When selecting a single row as you are doing (using LIMIT 1
), instead of Query
you should use the QueryRow
method or, the newer, QueryRowContext
method.
func myFunction() string {
var my_string string
row := db.QueryRow("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
if err := row.Scan(&my_string); err != nil {
logger.Fatal(err)
}
return my_string
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论