初始化连接到数据库时在 SQLX 中未定义 'err'

Undefined 'err' in SQLX when initializing connecting to a database

我是 Go 语言的新手,正在尝试连接到服务器并在 API 调用时创建数据库。

但我在 sqlx.Connect 收到 "undefined:err"。起初我以为是因为我没有定义db *sqlx.DB。但它仍然在 db, err = sqlx.Connect("mysql", connection).

处出错

是否需要定义一个var err

func (setupController *SetupController) Setup(w http.ResponseWriter, r *http.Request) {
    var db *sqlx.DB
    var connection string

    response := new(Response)
    response.Host = r.FormValue("host")
    response.Port = r.FormValue("port")
    response.Dbuser = r.FormValue("dbuser")
    response.Dbpassword = r.FormValue("dbpassword")
    response.Dbname = r.FormValue("dbname")
    response.Username = r.FormValue("username")
    response.Password = r.FormValue("password")

    connection = response.Dbuser + ":" + response.Dbpassword + "@tcp(" + response.Host + ":" + response.Port + ")/" + response.Dbname
    db, err = sqlx.Connect("mysql", connection)
    userJson, err := json.Marshal(response)
    if err != nil {
        panic(err)
    }

    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    w.Write(userJson)
}

谢谢!

这是非常基础的 Go。你应该去参观。特别要看看 https://tour.golang.org/basics/10。并不是说在 Go 中你必须注意 =:=.

之间的细微差别

但简而言之,您在声明之前使用 err。您可以先声明它:

  var err error

或使用简短声明

  db, err := sqlx.Connect("mysql", connection)

也许最简单的方法是将下面这行(确实做了简短的声明)移到它之前,否则当它被声明两次时你会得到另一个错误。你可能还应该检查错误。

  userJson, err := json.Marshal(response)
  if err != nil {
    panic(err)
  }
  db, err = sqlx.Connect("mysql", connection)
  if err != nil {
    panic(err)
  }

但是,除了这个语法错误之外,我还发现了其他问题。