1

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

但我在sqlx.Connect. 最初我以为是因为我没有定义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)
}

谢谢!

4

1 回答 1

2

这是非常基本的围棋。你应该做巡回演出。特别是看看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)
  }

但是,除了此语法错误之外,我还可以看到更多问题。

于 2019-10-02T04:40:20.900 回答