我是一名做了近十年的dotnet程序员,当然其中还使用过PHP、Javascript(NODEJS)去做过后端开发,从donnet Framework到现在的dotnet Core,一直以来的发展都是深有体会,很多的语言或者框架逐渐向“云”的方向适配和迁移。接触Golang是因为一开始听说Golang有着卓越的性能,如何如何厉害,其实真正要说开始接触,应该是Docker、K8s开始大行其道的时候,也算我接触的比较晚了,云方面的服务逐渐的都在使用Golang作为第一语言进行开发。这个系列我将从一个dotnet程序员的视角去认识golang。
在Golang学习的开始你就会遇到很多问题,比如安装、开发工具和墙!Golang是开源的,它的生态也是基于很多的开源的社区比如Github,当我们在按照官方网站进行编码学习的时候,你就会遇到go get等无法获取的问题,这里,我强烈建议有条件的同学去弄个V**!从阅读Golang网站的角度golang.org貌似是被墙的,可以使用https://golang.google.cn进行文档阅读和下载
目前网站上最新的安装包是go1.12.9,我将以这个版本持续后面的演示。
GO安装目录
以上两个路径其实是安装包安装Go语言的安装路径,同时还会产生另外一个路径,这个路径用来cache了一些第三方包,这个路径称为GOPATH
GOPATH目录
Go is a tool for managing Go source code.
Usage:
go <command> [arguments]
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
Use "go help <command>" for more information about a command.
Additional help topics:
buildmode build modes
c calling between Go and C
cache build and test caching
environment environment variables
filetype file types
go.mod the go.mod file
gopath GOPATH environment variable
gopath-get legacy GOPATH go get
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
module-get module-aware go get
packages package lists and patterns
testflag testing flags
testfunc testing functions
Use "go help <topic>" for more information about that topic.
这块没有什么特别好说的,就跟dotnet命令行一样,有管理包的,有编译、调试、测试的。
但需要特别说一下几个会经常用到的
env 打印GO的环境变量
get 下载和安装包和依赖
build 编译
install 安装包和依赖
list 列出包和组件
mod 组件维护
run 编译并运行程序
test 测试包
go get就像.net里面的nuget,都是包管理工具,golang里面如果要安装一个包直接使用,比如说你要用一个api的框架gin,可以这样
go get github.com/gin-gonic/gin
但当你执行完之后,发现你并没有看见它,但是你可以用它了,那是因为它已经缓存到你的GOPATH目录下的pkg里面去了
我们习惯使用nuget,在nuget的时候我们的包都是在我们的项目里面的,都是可以看见的,这样方便这些包跟着项目走,也方便在没有网络的时候去编译。go在Go1.11里面引入了go mod来解决此事,你可以使用
go help mod 查看mod的命令
go help modules 可以查看mod的整个文档
在go mod init之后会生成go.mod和go.sum文件,go.mod是具体的依赖项,go.sum是相关依赖包的checksum集合,在安装的时候会逐个验证这个checksum,这样可以防止类似之前npm依赖包的引入木马问题。总结一下,go mod的使用很简单,需要用什么就go get什么,go get的结果会记录在go mod里面,当换环境编译的时候,可以使用
go mod vendor 将依赖包放入vendor
go build -mod=vendor 使用vendor的依赖包来编译
创建一个demo.go的文件
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run()
}
在当前这个目录使用go mod
go mod init github.com/josonyang/demo
然后引用一个gin的开发包
go get github.com/gin-gonic/gin
这样就会生成这些内容,包的默认缓存地址就是之前提到过的GOPATH,但是如果需要放到当前目录,可以使用go mod vendor放到当前目录的vendor目录下
go mod init之后产生的文件
然后运行的时候直接执行
go run demo.go
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。