go語言現在已經發展的相對成熟了。網上有很多資料,本文不重複介紹安裝、配置、運行、文法相關知識了,因為這些沒有比官網更清楚方便的了。
這裡只單拎一下go語言與其他語言不太一樣的地方,協助大家快速避坑和轉換思維。
- 入門參考文檔:
- https://github.com/Unknwon/go-web-foundation
- https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/preface.md
- https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md
- 基礎配置
- 環境變數
- source ~/.bash.profile 配置環境變數
- go env 查看環境變數
- 安裝配置
- 包
- 同一個包中的函數不可重名
- package包名可以和檔案夾不同名,import時用檔案夾名,引用時用包名
- go get -u github.com/xxx/xxx 擷取外部參考
- 依賴管理
- godep 最早
- dep 官方項目,剛起步
- glide 新,功能全 https://segmentfault.com/a/1190000013016957
- 亂碼: 先在cmd裡面執行chcp 65001
- glide在windows上的許可權bug: https://studygolang.com/topics/4905
- govendor 新,功能全
- govendor init
- govendor fetch github.com/xxx
- sync
- web開發
- web架構:
- gin 效率高;
- beego 國內項目、star多,太龐大
- orm架構:
- xorm 國內項目、文檔全、響應快;
- gorm 文檔少、star多;
- 需要瞭解的文法約定
- 首字母大小寫區分可見度:大寫字母開頭的函數、變數等預設是public,否則是private
- iota 枚舉類型
- defer 來釋放資源,提高代碼可讀性
- goroutine 天然支援並發編程
package daoimport ( "github.com/go-xorm/xorm" "fmt")type UserInfo struct { UserId string `xorm:"userId varchar(60)"` Username string `xorm:"username varchar(60)"`}func GetWeixinConfig() { var engine *xorm.Engine var err error engine, err = xorm.NewEngine("mysql", "username:password@tcp(host:port)/user_db") if err != nil { fmt.Println(err) } err1 := engine.Ping() if err1 != nil { fmt.Println(err1) } engine.ShowSQL(true) var users []UserInfo err2 := engine.Table("user_db").Select("userId, username"). Find(&users) if err2 != nil { fmt.Println(err) } fmt.Println(len(users))}
package mainimport ( "github.com/gin-gonic/gin" "awesome-go/src/dao" "os" "io")func main() { //輸出日誌到檔案 gin.DisableConsoleColor() logFile, _ := os.Create("log") gin.DefaultWriter = io.MultiWriter(logFile) router := gin.Default() router.GET("/get", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "OK", }) }) router.Run() // listen and serve on 0.0.0.0:8080}