在Golang中无法返回值。

huangapple go评论115阅读模式
英文:

Can't return value in Golang

问题

我是你的中文翻译助手,以下是翻译好的内容:

我对golang还不熟悉,不明白为什么不能返回一个值。我觉得这可能是一个小错误。我只是想返回我从数据库中选择的一个字符串。

  1. func myFunction() string {
  2. rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
  3. if err != nil {
  4. logger.Fatal(err)
  5. }
  6. defer rows.Close()
  7. for rows.Next() {
  8. var my_string string
  9. if err := rows.Scan(&my_string); err != nil {
  10. logger.Fatal(err)
  11. }
  12. logger.Info("Result : ", my_string)
  13. }
  14. if err := rows.Err(); err != nil {
  15. logger.Fatal(err)
  16. }
  17. return my_string
  18. }

有什么想法吗?我犯了什么错误?

英文:

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.

  1. func myFunction() string {
  2. rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
  3. if err != nil {
  4. logger.Fatal(err)
  5. }
  6. defer rows.Close()
  7. for rows.Next() {
  8. var my_string string
  9. if err := rows.Scan(&my_string); err != nil {
  10. logger.Fatal(err)
  11. }
  12. logger.Info("Result : ", my_string)
  13. }
  14. if err := rows.Err(); err != nil {
  15. logger.Fatal(err)
  16. }
  17. return my_string
  18. }

Any idea ? What is my mistake ?

答案1

得分: 1

只需将my_string移动到外部循环即可。

  1. func myFunction() string {
  2. rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
  3. if err != nil {
  4. logger.Fatal(err)
  5. }
  6. defer rows.Close()
  7. var my_string string
  8. for rows.Next() {
  9. if err := rows.Scan(&my_string); err != nil {
  10. logger.Fatal(err)
  11. }
  12. logger.Info("Result : ", my_string)
  13. // 在此处使用my_string
  14. }
  15. if err := rows.Err(); err != nil {
  16. logger.Fatal(err)
  17. }
  18. return my_string
  19. }
英文:

Just move my_string to outer loop

  1. func myFunction() string {
  2. rows, err := db.Query("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
  3. if err != nil {
  4. logger.Fatal(err)
  5. }
  6. defer rows.Close()
  7. var my_string string
  8. for rows.Next() {
  9. if err := rows.Scan(&my_string); err != nil {
  10. logger.Fatal(err)
  11. }
  12. logger.Info("Result : ", my_string)
  13. }
  14. if err := rows.Err(); err != nil {
  15. logger.Fatal(err)
  16. }
  17. return my_string
  18. }

答案2

得分: 1

当你选择单行时(使用LIMIT 1),你应该使用QueryRow方法或者较新的QueryRowContext方法,而不是使用Query方法。

  1. func myFunction() string {
  2. var my_string string
  3. row := db.QueryRow("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
  4. if err := row.Scan(&my_string); err != nil {
  5. logger.Fatal(err)
  6. }
  7. return my_string
  8. }
英文:

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.

  1. func myFunction() string {
  2. var my_string string
  3. row := db.QueryRow("SELECT my_string ORDER BY agents_count ASC LIMIT 1;")
  4. if err := row.Scan(&my_string); err != nil {
  5. logger.Fatal(err)
  6. }
  7. return my_string
  8. }

huangapple
  • 本文由 发表于 2021年9月1日 16:01:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/69009932.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定