安装
下载解压,设置环境变量(GOROOT)即可完成安装。
1 |
|
设置go工作目录(GOPATH),也可以不用设置,默认工作目录为~/go
1 |
|
工作目录结构
1 |
|
src存放源代码,目录即为包(跟Java类似),pkg存放go编译生成的文件,bin存放安装后的可执行文件
代理
1 |
|
快速开始
新建hello项目,项目结构如下:
1 |
|
main.go
1 |
|
运行
1 |
|
安装
1 |
|
跨平台编译
1 |
|
注意里面两个重要的环境变量GOOS
和GOARCH
,其中GOOS
指的是目标操作系统,它的可用值为:
- darwin
- freebsd
- linux
- windows
- android
- dragonfly
- netbsd
- openbsd
- plan9
- solaris
一共支持10中操作系统。GOARCH
指的是目标处理器的架构,目前支持的有:
- arm
- arm64
- 386
- amd64
- ppc64
- ppc64le
- mips64
- mips64le
- s390x
1 |
|
安装远程包
go提供了一个获取远程包的工具go get
,他需要一个完整的包名作为参数,只要这个完成的包名是可访问的,就可以被获取到,go get的本质是使用源代码控制工具下载这些库的源代码,比如git,hg等。比如:
1 |
|
更新远程包
1 |
|
备用方案
go get
其实执行了git clone
和go install
命令,当无法执行go get
时(比如:golang.org访问不了)可以手动处理。
git clone
1 |
|
go install
1 |
|
获取Gitlab私有包
设置私服地址http到git转换
1 |
|
1 |
|
基础
变量
1 |
|
类型
bool:true或false
数字类型
int和uint是整型的统称,根据操作系统的位数决定是32位还是64位
-
int8, int16, int32, int64, int
-
uint8, uint16, uint32, uint64, uint
-
float32, float64(默认)
-
complex64, complex128
1
2c1 := complex(5, 7) c2 := 8 + 27i
-
byte
an alias for uint8
-
rune
an alias for int32, Unicode code points
1
2
3
4
5
6
7
8
9s:="abc" runes := []rune(s) for i:= 0; i < len(runes); i++ { fmt.Printf("%c ",runes[i]) } // Constructing a string from slice of runes runeSlice := []rune{0x0053, 0x0065, 0x00f1, 0x006f, 0x0072} str := string(runeSlice)
string
byte slice
1 |
|
类型转换
go对于变量的类型有严格的限制,不同类型之间的变量不能进行赋值、表达式等操作,必须要要转换成同一类型才可以。把 v 转换为 T 类型的语法是 T(v)
常量
1 |
|
无类型的常量有一个与它们相关联的默认类型,并且当且仅当一行代码需要时才提供它。常量可以赋值给 “合适的” 类型,而不需要类型转换。
包
1 |
|
- 以包为单位组织模块
- 一个目录(不包含子目录)代表一个包
- 一个目录(不包含子目录)下的文件的包名必须相同
- 包名一般取目录名,也可以跟目录名不同
- 引用时取全路径目录名
- main是一个特殊的包名,它表示当前是一个可执行程序,而不是一个库
1 |
|
引用包但是不使用包会报错,可以使用空白标识符
,会执行包的初始化
1 |
|
或
1 |
|
函数
1 |
|
init函数
包可以包含一个init函数,不包含参数和返回值,用于包的初始化,只会被初始化一次,不能显示调用
1 |
|
main函数
1 |
|
可变参数函数
1 |
|
大小写标记访问权限
大些字母开头的变量或者函数等是public的,可以被其他包访问;小些的则是private的,不能被其他包访问到
数组
value type
1 |
|
切面(Slice)
reference type
1 |
|
Map
reference type
1 |
|
循环
for range loop
1 |
|
指针
declaring pointers
1 |
|
zero value
1 |
|
new
function
1 |
|
Dereferencing a pointer
1 |
|
struct
value type
declaring a structure
1 |
|
1 |
|
creating a structure
1 |
|
1 |
|
zero value
accessing fields
1 |
|
pointers to structure
1 |
|
anonymous fields
1 |
|
Nested structs
promoted fields
方法
方法其实就是一个函数,在 func
这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。必须与Type定义在同一个包。
1 |
|
接口
empty interface
type assertion
1 |
|
type switch
1 |
|
并发(concurrency)
通道(channels)
1 |
|
1 |
|
1 |
|
1 |
|
依赖管理
dep,govendor,glide,godep
vgo