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目录。

  1. 若无系统变量GOPATH,则可以go env -w GOPATH=你的gopath目录
  2. 在系统变量中新建/修改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更新的情况

  1. 项目中 import,go build 就会自动下载并添加。
  2. 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 入门教程与注意事项的主要内容,如果未能解决你的问题,请参考以下文章

解决go get golang.org上的包被墙的问题

新手入门golang开发的注意事项

新手入门golang开发的注意事项

新手入门golang开发的注意事项

新手入门golang开发的注意事项

新手入门golang开发的注意事项