Mysql Can';无法使用GORM获取数据

Mysql Can';无法使用GORM获取数据,mysql,go,go-gorm,Mysql,Go,Go Gorm,我正在尝试从mysql数据库获取数据 但不要退回任何东西。 这是我第一次和Gorm在一起,我对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,

我正在尝试从mysql数据库获取数据 但不要退回任何东西。 这是我第一次和Gorm在一起,我对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()
}

使用以下代码段:

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
package看不到这些字段

在Go中,如果名称以大写字母开头,则导出名称。无法从软件包外部访问任何“未报告”的名称。


围棋之旅的更多信息:

我得到了答案。我的问题是: 我包括了默认的Gorm模型,但这不等于数据库,当它被输出时,工作正常


真的很抱歉我的英语不好

请将结构成员字段名大写,例如
Stock
而不是
Stock
。它们现在未导出,因此无法使用反射进行设置。像这样?“”类型productos struct{gorm.Model Id\u producto int
gorm:“类型:int,主键”
Stock int
gorm:“类型:int”
Codigo string
gorm:“类型:varchar(45)”
Rubro string
gorm:“类型:varchar(100)”
描述字符串
gorm:“类型:varchar(140)”
Proveedores string
gorm:“type:varchar(250)”
Moneda string
gorm:“type:varchar(10)”
Costo float32
gorm:“type:decimal”
Iva float32
gorm:“type:tinyint”
''这是连接到列名称为小写的现有数据库。对不起,我是个笨蛋go@SebastianAlbertoBordi将表迁移到数据库中时,字段将变为小写。你试过我建议的解决方案了吗?如果您仍在了解gorm,我强烈建议您使用它:)