要求:寫一個商品結構體,實現添加商品的到數據庫的方法,且寫一個單元測試測試該方法mysql
原文件:goods.gogit
package goods import ( _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) // 數據庫對象 var Db *sqlx.DB // 初始化連接數據庫 func init() { database, err := sqlx.Open("mysql", "root:@tcp(127.0.0.1:3306)/shop") if err != nil { return } Db = database } // 商品結構體 type Goods struct { Id int `db:"id"` Name string `db:"name"` CreatedAt string `db:"created_at"` UpdatedAt string `db:"updated_at"` Cover string `db:"cover"` StockCount int `db:"stock_count"` } // 新增商品 func (p *Goods) Create() (*Goods, error) { goods := &Goods{ Name: p.Name, CreatedAt: p.CreatedAt, UpdatedAt: p.UpdatedAt, Cover: p.Cover, StockCount: p.StockCount, } // 將商品添加到數據庫 r, err := Db.Exec("insert into goods(name, created_at, updated_at,cover,stock_count)values(?, ?, ?,?,?)", goods.Name, goods.CreatedAt, p.UpdatedAt, p.Cover, p.StockCount) if err != nil { return nil, err } id, err := r.LastInsertId() if err != nil { return nil, err } // 給商品添加商品ID goods.Id = int(id) // 添加成功 return goods, nil } // 獲取商品詳情 func GetGoodsDetail(goodsId int) (*Goods, error) { var goods []Goods err := Db.Select(&goods, "select * from goods where id=?", goodsId) if err != nil { return nil, err } return &goods[0], nil }
單元測試文件:goods_test.gogithub
package goods import ( "testing" "time" ) // 測試商品Create方法 func TestCreate(t *testing.T) { goods := &Goods{ Name: "點滴GO語言教程", CreatedAt: time.Now().Format("2006-01-02 15:04:05"), UpdatedAt: time.Now().Format("2006-01-02 15:04:05"), Cover: "goods/cover/20191230/diandi.png", StockCount: 100, } // 添加商品 res, err := goods.Create() if err != nil { t.Fatalf("添加商品信息測試失敗,失敗緣由:%v", err) } // 獲取新添加的商品信息 newGoods, err := GetGoodsDetail(res.Id) if err != nil { t.Fatalf("獲取商品信息測試失敗,失敗緣由:%v", err) } // 對比添加和返回的信息是否一致 if res.Id != newGoods.Id || res.StockCount != newGoods.StockCount || res.Cover != newGoods.Cover { t.Fatal("添加商品單元測試失敗,寫入信息和返回信息不符合預期!") } }
目錄結構以下:sql
CMD命令行切換到demo1目錄下執行:go test數據庫
再次打開數據,發現數據已經成功入庫!tcp