golang 入门教程与注意事项
Posted Lejeune
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 入门教程与注意事项相关的知识,希望对你有一定的参考价值。
golang 入门教程与注意事项
个人认为golang作为未来的语言趋向,估计未来会占有一定份额,所以先学习一下。
过于简单的go语言安装和goland安装就不说了。主要说一些和其他语言不太一样的地方,初学者难以马上掌握的地方。
版本go 1.15。
以下是笔者个人理解,可能存在着错误。欢迎指正。
1. go module(推荐)
首先go module和gopath 不同的是。
gopath模式 为每一个gopath都新建一个环境依赖,引用的包被放在每一个gopath目录下,虽然起到了隔离环境的作用,但是却存在着,重复包占用大量空间的问题(其实anaconda也是那么做的,每一个虚拟环境都会重新引入第三方包,所以anaconda的env占用很大,但是又拿他没办法)。
go module模式,在gopath目录下统一下载,每个项目的依赖由那个项目的go.mod来解决,相当于go.mod只是说我要什么包,然后去gopath里面调用,这样省去了大量磁盘空间的重复占用。
在go module模式下,第三方库都被安装在gopath目录下,默认是c盘,根据个人需求,可以修改gopath目录。
- 若无系统变量GOPATH,则可以
go env -w GOPATH=你的gopath目录
- 在系统变量中新建/修改GOPATH,这种情况下,上一种方法讲无法修改
换源
go的包大量在github上维护,众所周知,github血慢无比,加上我国的wall注定了我们很难快速下载,所以我们要换源。即为修改goproxy.下面给一些goproxy地址
阿里云 https://mirrors.aliyun.com/goproxy/
腾讯云 https://mirrors.cloud.tencent.com/go/
七牛云 https://goproxy.cn/
开源版 https://goproxy.io/
nexus社区 https://gonexus.dev/
命令行
如果在命令行状态下,
go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
可以完成换源
键入以下命令完成对项目test的初始化,会发现在当前目录下,多了一个go.mod,里面记录了引入的库,go版本等相关信息。
go mod init test
go.mod更新的情况
- 项目中 import,go build 就会自动下载并添加。
- go get 下载安装后,会自动写入 go.mod 。
其中命令go mod download
可以下载go.mod中所写的依赖,下载到,go mod vendor
可以会将刚才下载至 GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下。
以安装gin为例,键入go get github.com/gin-gonic/gin
,如果换源正确,那么几秒钟就会完成下载。
完成下载后,在目录下新建测试文件main.go,注意编码utf-8
package main
import "github.com/gin-gonic/gin"
func main()
r := gin.Default()
r.GET("/ping", func(context *gin.Context)
context.JSON(200,gin.H
"data":"success",
)
)
r.Run()
随后命令行运行go run main.go
如果正常,访问http://localhost:8080/ping即可看到结果。
goland
显然通过命令行管理项目是很麻烦的,goland作为一款ide,可以让我们把重点放在编程,而不是环境配置和项目。
新建project,选择左边的go modules,然后选择一下goroot(go安装路径),配置一下env(主要就是图中的goproxy),
创建好之后,新建之前的文件,会发现一片飘红。这个时候,因为之前在goland设置了goproxy,所以我们在goland内置的命令行中,会覆盖本地的外部设置。这样有个好处是,可以避免外部命令行式的修改,goland的相关配置都是图形界面的。
这样就可以在goland命令行中go get
了,如果还是飘红,可以把鼠标放在飘红的代码上方,有个SYNC选项,选上之后稍等一会即可。
完成后,右键run,即可运行。
2.gopath(不推荐)
作为早期的go项目管理的方式,现在针对于简单的脚本,还有一些用处。gopath即为你的项目依赖路径,这里面一般包括src、bin、pkg三个目录,其中bin和pkg能自动生成。
src:存放go源码文件
pkg:存放编译后的包文件
bin:存放编译后的可执行文件。
本来这样是想针对于不同的项目,就不会有依赖混乱的情况。
可以对比python,python本身只存在一个pip来进行库的安装,项目之间无法很好的进行依赖区分,所以anaconda、pycharm、pyenv等带有虚拟环境的软件应运而生。
可以说google的这个想法非常的好,运用编程语言自带虚拟环境,但是事实上,因为gopath模式的问题,没有记录库的版本等一系列数据,导致依赖出现问题,比如你的项目依赖于github上的一个库,你go get下载到本地的版本是1,结果过了几天她更新了api出现了变化,版本变为了2,那么我们在开发时是正常的,但是同样的代码,到其他人电脑就不行,因为此时版本变为了2。
所以开源社区上出现了很多新的项目管理库,百家齐放,最后google自己在1.1之后内置了go module进行管理。
现在一般也提倡抛弃gopath,不过作为快速开发,图个省力,写个脚本,这样倒也不错,还是推荐使用go mod。但是也需要了解一下
换源
令人诟病的地方是gopath模式的安装非常的麻烦,不如上面的换源,没有仔细研究,有兴趣的可以看看。
命令行
go env -w GO111MODULE=off
go env -w GOPATH=目录
随后重启命令行,查看env是否变化。
已经变化,则已经改变成功,然后输入
go get github.com/gin-gonic/gin
下载奇慢无比。
如果完成,安装的包就会出现在当前目录下,随后重复上面的测试过程go run main.go。
goland
创建完成后,也是打开goland的命令行,进行go get,也是非常的慢,所以一般来说不推荐。
以上是关于golang 入门教程与注意事项的主要内容,如果未能解决你的问题,请参考以下文章