go语言现在已经发展的相对成熟了。网上有很多资料,本文不重复介绍安装、配置、运行、语法相关知识了,因为这些没有比官网更清楚方便的了。
这里只单拎一下go语言与其他语言不太一样的地方,帮助大家快速避坑和转换思维。
- 入门参考文档:
- 基础配置
- 环境变量
- source ~/.bash.profile 配置环境变量
- go env 查看环境变量
- 环境变量
- 安装配置
- GOROOT
- GOPATH
- 包
- 同一个包中的函数不可重名
- 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多;
- web框架:
- 需要了解的语法约定
- 首字母大小写区分可见性:大写字母开头的函数、变量等默认是public,否则是private
- iota 枚举类型
- defer 来释放资源,提高代码可读性
- goroutine 天然支持并发编程
- 数据库开发示例
package dao import ( "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)) }
- gin web开发示例
package main import ( "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 }
有疑问加站长微信联系(非本文作者)