Golang
安装
Go安装,为什么会在/root和/home/ghy目录下同时存在go文件夹,我猜测哪个用户使用了go,那么就会在对应用户目录包含go文件夹,印证方式是当以root用户安装gopls时,在/root/go下出现了bin文件夹
命令行运行
export PATH=$PATH:/usr/local/go/bin
只能在当前终端生效,永久修改需要在/etc/profile最后添加这句话
不使用go mod包管理工具,则目前版本默认的GOPATH是 GOPATH="/home/ghy/go",形成的src,bin,pkg都在这个路径下
启用go mod,在/etc/profile中添加如下内容
export PATH=$PATH:/usr/local/go/bin
export GOPROXY=https://goproxy.cn,direct
export GO111MODULE=on
go get
和 go install
区别
In earlier versions of Go, 'go get' was used to build and install packages.
Now, 'go get' is dedicated to adjusting dependencies in go.mod. 'go install'
may be used to build and install commands instead. When a version is specified,
'go install' runs in module-aware mode and ignores the go.mod file in the
current directory.
大小写的访问权限
无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用
关于引用其他go文件中声明的变量,即使是在同一个包中,也有可能有多个文件中包含相同名称的变量,为了区分,在引用变量时必须使用包名进行引用,这并不难理解,包就相当于c++中的命名空间,必需指定是哪一命名空间中的变量
Go 的包概念
go get 应当是把别人发布的包下载到$GOPATH/go下面专门存放包的位置了,例如在执行完go get gopkg.in/ini.v1
后,下面的路径中就出现了gopkg.in包,然后在写代码时就可以直接import "gopkg.in/ini.v1"
声明语法
import导包特殊形式
- 下划线:仅调用包中的
init()
函数,此时无法通过包名来调用包中的导出函数 - 点:导入之后在调用这个包的函数时,可以省略前缀的包名
- 别名:
import f "fmt"
,调用语句为f.Println()
常见错误
- map赋值前要先初始化,否则会报错 assignment to entry in nil map