Как мне написать общий метод в golang для вставки записи в любую из таблиц mysql - PullRequest
0 голосов
/ 30 января 2019

Я создаю API отдыха в golang и делаю запрос POST в таблицу.

Для этого я создал структуру.По сути, переменные в структуре совпадают со столбцами в таблице с именем users.

и написали функцию для выполнения запроса POST.И код работает нормально, параметры при создании запроса POST успешно вставляются в таблицу.

type User struct {
    ID      int
    Name    string
    Lname   string
    Country string
}


func insertUser(response http.ResponseWriter, request *http.Request)  
{
    var userDetails User
    decoder := json.NewDecoder(request.Body)
    err := decoder.Decode(&userDetails)
    defer request.Body.Close()
    if err != nil {
        returnErrorResponse(response,request, httpError)
    } else {
        httpError.Code = http.StatusBadRequest
        if userDetails.Name == "" {
             httpError.Message = "first name can't be empty"
             returnErrorResponse(response, request, httpError)
        } else if userDetails.Lname == "" {
             httpError.Message = "Last name can't be empty"
             returnErrorResponse(response, request, httpError)
        } else {
             isInserted := insertUserInDB(userDetails)
             if isInserted {
                  getAllUsers(response, request)
             } else {
                  returnErrorResponse(response, request, httpError)
             }
        }
    }
}

Вот insertUserInDB(userDetails) определение

func insertUserInDB(userDetails User) bool {
  stmt, err := db.Prepare("insert into users set Name=?, Lname=?, 
Country=?")
  if err != nil {
      fmt.Print("helper_methods.go : 118")
    fmt.Println(err)
    return false
  }

  _, queryError := stmt.Exec(tableName, userDetails.Name, 
userDetails.Lname, userDetails.Country)
  if queryError != nil {
      fmt.Print("helper_methods.go : 125")
    fmt.Println(queryError)
    return false
  }
  return true
}

Есть ли способнаписать общую функцию для вставки записи в любую таблицу в БД?

Можем ли мы создать структуру динамически или любым другим способом?

Пожалуйста, помогите мне здесь.

1 Ответ

0 голосов
/ 30 января 2019

Как и на других языках, вы можете использовать библиотеку ORM , чтобы выполнить перевод БД для вас, например GORM , или вы можете сделать перевод самостоятельно.Поскольку вы уже реализовали сохранение данных вручную, см. Эту статью , чтобы узнать, как извлекать данные вручную.

Если вы просто хотите написать универсальный метод, который генерирует / выполняет запросы SQL, сопоставляя поле structимена вы можете использовать отражать пакет го.Вам нужно будет идентифицировать поля Structs с помощью reflect.TypeOf(), чтобы получить тип передаваемой переменной, а затем выполнить итерацию по StructField, который вы можете получить с помощью метода Field() для типа.StructField покажет Name, а ValueOf() позволит вам получить доступ к значению.Имя и значение могут затем использоваться для построения запроса.Для лучшего понимания я рекомендую вам прочитать некоторые статьи о рефлексии.Как это и это .

...