2016-12-21 2 views
1

EDITED Я хочу переопределить поле значения Id в GORM, так как я использую json также для маршала и unmarshall. пакет статьиКак добавить автоинкремент в Go struct с json

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:"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"` 
} 

Я использую Горм здесь [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] 

Это, как я создаю DB он работает нормально, просто хочу автоматическое приращение по статье структуры

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) 
    } 
} 

ответ

1

первой. Согласно Бюро Директиве gorm:"default:'galeone'" вашему поле значения по умолчанию

См: gormDefaultValue , когда вы не даете значение. , поэтому ваше поле идентификатора должно быть изменено. потому что ваше значение по умолчанию строка но поле INT

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

и Func InitDb. вы переопределяете переменную db. Возникнет ошибка при компиляции или запуске программы. Вам нужно изменить две строки 1. уаг дб gorm.DB -> уаг дб * gorm.DB 2. FUNC InitDb

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") 
} 

}

Смежные вопросы