Я реализовал rest api
, используя golang
, gin
и gorp
Employee structure:
type Employee struct {
Id int64 `db:"id" json:"id"`
Firstname string `db:"firstname" json:"firstname"`
Lastname string `db:"lastname" json:"lastname"`
Dob time.Time `db:"dob" json:"dob"`
Skills []string `db:skills json:"skills"`
}
В POST
отправка запроса как:
func PostEmployee(c *gin.Context) {
var emp Employee
c.Bind(&emp)
skills, _ := json.Marshal(emp.Skills)
if emp.Firstname != "" && emp.Lastname != "" {
if insert, _ := dbmap.Exec(`INSERT INTO employee (firstname, lastname, dob, skills) VALUES (?, ?, ?, ?)`, emp.Firstname, emp.Lastname, emp.Dob, skills); insert != nil {
emp_id, err := insert.LastInsertId()
.....
}
......
}
Это сохранение данных в базу данных mysql
работает отлично.
Для получения данных из БД реализован GET
запрос
func GetEmployees(c *gin.Context) {
var emps []Employee
_, err := dbmap.Select(&emps, "SELECT * FROM employee")
log.Println(err)
if err == nil {
c.JSON(200, emps)
} else {
c.JSON(404, gin.H{"error": "no employee(s) into the table"})
}
GET
запрос не дает никаких данных из базы данных, а log.Println(err)
журнал говорит:
Scan error on column index 4: unsupported Scan, storing driver.Value type []uint8 into type *[]string
Любые идеи?
Skills
есть типvarchar(255)
. @Отметка - person Prashant4224   schedule 30.12.2016Skills
является повторяемым полем, поэтому выбрана []string(slice).Мой образец JSON дляPOST
равенcurl -i -X POST -H "Content-Type: application/json" -d "{ \"firstname\": \"Thea\", \"lastname\": \"Queen\", \"dob\": \"2014-10-19T23:08:24Z\", \"skills\": [\"Go\", \"C\",\"Ruby\"] }" http://localhost:9090/api/v1/emps
- person Prashant4224   schedule 30.12.2016