1.在models/model.go增加atuoMigrate

 db.AutoMigrate(Datasets{})

完整:

package models
import (
    "fmt"
    "log"
    "time"
nbsp;   "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
    "github.com/your_github_name/dongtaipaifang_2_backend/pkg/setting"
)
var db *gorm.DB
type Model struct {
    CreatedAt time.Time `json:"created_at"`
    UpdatedAt time.Time `json:"updated_at"`
}
func init() {
    var (
        err                                                     error
        dbType, dbName, user, password, host, port, tablePrefix string
    )
nbsp;   sec, err := setting.Cfg.GetSection("database")
    if err != nil {
        log.Fatal(2, "Fail to get section 'database': %v", err)
    }
nbsp;   dbType = sec.Key("TYPE").String()
    dbName = sec.Key("NAME").String()
    user = sec.Key("USER").String()
    password = sec.Key("PASSWORD").String()
    host = sec.Key("HOST").String()
    port = sec.Key("PORT").String()
    tablePrefix = sec.Key("TABLE_PREFIX").String()
nbsp;   db, err = gorm.Open(dbType, fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable",
        user,
        password,
        host,
        port,
        dbName))
nbsp;   if err != nil {
        log.Println(err)
    }
nbsp;   gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
        return tablePrefix + defaultTableName
    }
nbsp;   db.SingularTable(true)
    db.LogMode(true)
    db.DB().SetMaxIdleConns(10)
    db.DB().SetMaxOpenConns(100)
nbsp;   // migrate(写所有的表)
    db.AutoMigrate(HistoryLoginLogs{})
    db.AutoMigrate(Materials{})
    db.AutoMigrate(Datasets{})
    db.AutoMigrate(Users{})
    db.AutoMigrate(VerificationCodes{})
}
func CloseDB() {
defer db.Close()
}

2.增加models/datasets.go,写增删改查的方法。类似于:

package models
type Datasets struct {
    ID                       int                  `gorm:"primary_key" json:"id"`
    UserId                   int                  `json:"user_id"`
    Name                     string               `json:"name"`
    PercentageData           string               `gorm:"type:text" json:"percentage_data"`
    DataSheet                string               `gorm:"type:text" json:"data_sheet"`
    DataSheetProcessed       string               `gorm:"type:text" json:"data_sheet_processed"`
    PercentageDataProcessed  string               `gorm:"type:text" json:"percentage_data_processed"`
    Model
}
func GetDatasets(pageNum int, pageSize int, maps interface{}) (datasets []Datasets) {
    db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&datasets)
    return
}
func GetDatasetTotalCount() (count int) {
    db.Model(&Datasets{}).Count(&count)
nbsp;   return
}
func GetDatasetTotal(maps interface{}) (count int) {
    db.Model(&Datasets{}).Where(maps).Count(&count)
nbsp;   return
}
func GetDatasetDetail(id int) (dataSheet Datasets) {
    db.Where("id = ?", id).First(&dataSheet)
nbsp;   return
}
func AddDataset(name string, UserId int, percentageData [][]string, dataSheet [][]string, dataSheetProcessed [][]string, percentageDataProcessed [][]string) *Datasets {
    plan := &Datasets{
        Name:                     name,
        PercentageData:           convertToString(percentageData),
        PercentageDataProcessed:  convertToString(percentageDataProcessed),
        DataSheet:                convertToString(dataSheet),
        DataSheetProcessed:       convertToString(dataSheetProcessed),
        UserId:                   UserId,
    }
    db.Create(plan)
nbsp;   return plan
}
func UpdateDataset(id int, data interface{}, UserId int) bool {
    db.Model(&Datasets{}).Where("id = ?", id).Updates(data).Update("UserId", UserId)
nbsp;   return true
}
func DeleteDataset(id int) bool {
    db.Where("id = ?", id).Delete(&Datasets{})
nbsp;   return true
}

3.注意我在models/dataset.go使用了convertToString的方法,但是没有声明,是因为在其他model已经写了,在Dataset中可以直接调用,不需要重复声明:

func convertToString(data [][]string) string {
  var result string
  for _, row := range data {
    result += strings.Join(row, ",") + "\n"
  }
  return result
}