Не могу получить данные с GORM - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь получить данные из базы mysql, но ничего не возвращаю. Я впервые с Гормом и у меня плохой опыт с Go.

package main

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
    "fmt"
)

type productos struct {
    gorm.Model

    id_producto int         `gorm:"type:int, primary_key"`
    stock       int         `gorm:"type:int"`
    codigo      string      `gorm:"type:varchar(45)"`
    rubro       string      `gorm:"type:varchar(100)" `
    descripcion string      `gorm:"type:varchar(140)" `
    proveedores string      `gorm:"type:varchar(250)" `
    moneda      string      `gorm:"type:varchar(10)" `
    costo       float32     `gorm:"type:decimal" `
    iva         float32     `gorm:"type:decimal" `
    pedir       bool        `gorm:"type:tinyint" `
}

func main() {
    db, err := gorm.Open("mysql", "root:1281@/electronica?charset=utf8&parseTime=True&loc=Local")

    if(err != nil){
        panic(err)
    }else{
        fmt.Println("Conexión obtenida")
    }

    prod := &productos{}

    db.First(&prod)

    fmt.Println(prod.codigo)

    db.Close()
}

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Используйте следующий фрагмент кода:

type Productos struct {
    gorm.Model
    // Remove the ProductoID field if you want to use the default gorm Model
    // ProductoID int     `gorm:"type:int, primary_key"`
    Stock       int     `gorm:"type:int"`
    Codigo      string  `gorm:"type:varchar(45)"`
    Rubro       string  `gorm:"type:varchar(100)" `
    Descripcion string  `gorm:"type:varchar(140)" `
    Proveedores string  `gorm:"type:varchar(250)" `
    Moneda      string  `gorm:"type:varchar(10)" `
    Costo       float32 `gorm:"type:decimal" `
    Iva         float32 `gorm:"type:decimal" `
    Pedir       bool    `gorm:"type:tinyint" `
}

func main() {
    db, err := gorm.Open("mysql", "root:admin123@/test?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    if !db.HasTable(&Productos{}) {
        if err := db.AutoMigrate(&Productos{}).Error; err != nil {
        }
        db.Create(&Productos{
            Stock:       2,
            Codigo:      "a",
            Rubro:       "b",
            Descripcion: "c",
            Proveedores: "d",
            Moneda:      "e",
            Costo:       0,
            Iva:         0,
        })
    }

    producto := &Productos{}
    db.First(producto)

    fmt.Printf("%+v\n", producto)
}

Как указывает @Burak Serdar, ваши поля не экспортируются (не пишутся с большой буквы), поэтому в вашем случае они невидимы для gorm пакета

In Go, a name is exported if it begins with a capital letter. Any "unexported" names are not accessible from outside the package.

Дополнительная информация из тура Go: Экспортированные имена

0 голосов
/ 05 февраля 2020

Я получил ответ. Моя проблема заключалась в том, что я включил модель Gorm по умолчанию, и она не совпадает с базой данных, и когда ее выпускают, она отлично работает

Очень жаль, что мой бедный английский sh

...