Типы данных между PostgreSQL и Golang

#postgresql #go #pq

#postgresql #Вперед #pq

Вопрос:

 type User struct {
    Email     string `json:"email"`
    Password  string `json:"password"`
}

db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("email: ", reflect.TypeOf(usr.Email)) //string
    fmt.Println("salt: ", reflect.TypeOf(salt))       //[]uint8
    fmt.Println("hash: ", reflect.TypeOf(hash))       //string

    sql := `INSERT INTO public."Users" (email, password, salt) VALUES ($1, $2, $3)`

    _, err = db.Exec(sql, usr.Email, hash, salt)

  

выдает ошибку: «pq: недопустимая последовательность байтов для кодирования «UTF8″: 0x97»
моя таблица: тип «email»: ТЕКСТ, тип «password»: ТЕКСТ, тип «salt»: smallint[] (думаю, это может быть причиной ошибки, но я не уверен, что использовать вместо этого)

Комментарии:

1. Может быть, salt столбец — это строка? Попробуйте string(salt)

2. столбец salt — это smallint[], я не могу преобразовать весь массив, иначе это будет дорого стоить, когда придет время преобразовать и использовать [] uint8 для входа в систему.

Ответ №1:

PostgreSQL bytea = []unit8 Golang

изменен тип, и проблема решена!