【问题标题】:How to add auto increment to Go struct with json如何使用 json 向 Go 结构添加自动增量
【发布时间】:2016-12-21 07:41:38
【问题描述】:

我想覆盖 GORM 中的 Id 值字段,因为我也使用 json 来进行 marhal 和 unmarshall。

package article

import "github.com/jinzhu/gorm"

type Article struct {
    gorm.Model
    Id          int    `json:"id"`
    Title       string `json:"title"`
    Description string `json:"description"`
    Content     string `json:"content"`
}

我希望添加这样的 gorm 属性

`gorm:"default:'galeone'"`

但它没有编译

package article

import "github.com/jinzhu/gorm"

type Article struct {
    gorm.Model
    Id          uint    `json:"id" sql:"AUTO_INCREMENT" gorm:"primary_key"`
    Title       string `json:"title"`
    Description string `json:"description"`
    Content     string `json:"content"`
}

我从这里使用 Gorm [https://github.com/jinzhu/gorm][1]

我得到了

2016/12/21 15:17:48 DB Initialized successfully

(duplicate column name: id) 
[2016-12-21 15:17:48]  

(no such table: articles) 
[2016-12-21 15:17:48]  

这就是我创建数据库的方式,它工作正常只是想在文章结构上自动递增

package dbprovider

import (
    "github.com/jinzhu/gorm"
    _"github.com/jinzhu/gorm/dialects/sqlite"
    "rest/article"
    "log"
)

var db gorm.DB

var isInitialized bool

func InitDb() {
    isInitialized = false
    db, err := gorm.Open("sqlite3", "../../articles.db")

    if (db != nil && err == nil) {
        log.Print("Db Initialized")
        isInitialized = true
    } else {
        isInitialized = false
        defer db.Close()
        log.Panic("DB not initialized")
    }
}

func AddArticle(article *article.Article) {
    if (isInitialized) {
        db.Create(&article)
    }
}

【问题讨论】:

    标签: json go go-gorm


    【解决方案1】:

    首先。根据办公室指南 gorm:"default:'galeone'" 是您的字段默认值

    参考:gormDefaultValue 当你不给价值。 所以您的 ID 字段需要更改。因为你的默认值是字符串 但该字段是int

    Id    int    `json:"id" gorm:"default:1"`
    

    在 func InitDb 上。你重新定义了一个变量db。编译或运行go程序时会出现错误。你需要改变两行 1. var db gorm.DB -> var db *gorm.DB 2. 函数初始化数据库

    func InitDb() {
    isInitialized = false
    //Change below code 
    var err interface{}
    db, err = gorm.Open("sqlite3", "../../articles.db")
    
    if (db != nil && err == nil) {
        log.Print("Db Initialized")
        isInitialized = true
    } else {
        isInitialized = false
        defer db.Close()
        log.Panic("DB not initialized")
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2010-12-16
      • 1970-01-01
      • 2020-03-19
      • 2020-10-02
      相关资源
      最近更新 更多