Неопределенная ошибка в SQLX при инициализации подключения к базе данных - PullRequest
1 голос
/ 02 октября 2019

Я новичок в Go lang и пытаюсь подключиться к серверу и создать базу данных после вызова API.

Но я получаю "undefined: err" в 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)
}

Спасибо!

1 Ответ

2 голосов
/ 02 октября 2019

Это очень простой Go. Вы должны сделать тур. В частности, обратите внимание на https://tour.golang.org/basics/10. Не то чтобы в Го вы должны были наблюдать тонкую разницу между = и :=.

Но вкратце вы используете 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)
  }

Однако, помимо этой синтаксической ошибки, я вижу дополнительные проблемы.

...