Install Mercurial

sudo apt-get install mercurial meld

Install mysql-server and golang-mysql driver

sudo apt-get install mysql-server
go get github.com/go-sql-driver/mysql
go get github.com/coopernurse/gorp

Create mysql data for testing

CREATE DATABASE go_test
CREATE TABLE tt (name char(10));

Execute go run main.go

Note

struct 對應 Table field :

type Tt struct {
    Name string `db:"name"`  // 後面與 db 欄位的對應註釋建議加上
}
  • Name 會對應到 tt table 的 name 欄位
  • struct 裡的 Name 或 NAME 都可以, 不分大小寫
  • struct 裡的欄位首位字母一定要大寫, 而 table 的欄位名稱都可以小寫沒有關係

Select

_, err := dbmap.Select(&existent_video, "select * from videos where source_website = :source_website and file_name = :file_name", map[string]interface{}{"source_website": video.Source_website, "file_name": video.File_name})

SelectOne

var existent_video Video
err = dbmap.SelectOne(&existent_video, "select * from videos where source_website = :source_website and file_name = :file_name", map[string]interface{}{"source_website": video.Source_website, "file_name": video.File_name})
// 結果 : existent_video = {1 "text"}

Get

qq, _ := dbmap.Get(Video{}, 1)
// 結果 : qq = &{1 "text"}

Update

先從 SelectOne 或 Get 拿到 struct (注意 Select 與 Get 結果是不一樣的, 差了 & 在前面)

update_video := &existent_video             // 這邊加上 `&`
update_video.Image_url = video.Image_url
update_video.Video_url = video.Video_url
update_video.Source_viewer = video.Source_viewer
update_video.Updated_at = time.Now().Format("2006-01-02 15:04:05")
update_video.File_name = video.File_name
_, err := dbmap.Update(update_video)
if err != nil {
    return err
}