这是我参与「第五届青训营 」伴学笔记创作活动的第 1天
安装go语言
中文官方下载地址:studygolang.com/dl 傻瓜式安装(路径不含有中文)
环境配置
由于go语言在诞生之时,没有提供随之的包管理工具,而是使用go get来下载依赖包,并放在$ GOPATH / src下,并且没有使用版本控制,意味着每次都会拉取master分支的代码,软件包的代码放在src/github.com/xx/xx下面。
而Go 1.11之后的版本引入了Go模块(Go Modules),Go Modules使用go.mod中标记的软件包的版本,软件包的代码放在pkg/mod下面,所以初次配置需要在设置环境变量(用户变量)新增一个GOPATA,路径设置为你想要的路径(默认在C盘的用户下,可以通过go env查看)以便防止C盘的臃肿(Go可以直接从git上面拉取代码,十分方便)。
重要!!!命令行窗口,输入go mod init (模块名) 来生成一个go.mod(本人一开始在这边卡了好久,对于刚刚入门以为安装Go和VScode后就能直接上手的我来说,摸了好半天)
基础语法
Go的变量声明:
= 是赋值(var a int), := 是声明变量并赋值(b := float32(e))。前者和JAVA与C++不同的是类型是在变量名之后
切片(可变数组)
补充:make(Type, len, cap)函数,默认有三个参数。
Type:数据类型,必要参数,Type 的值只能是 slice(切片)、 map、 channel(Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯) 这三种数据类型。
len:数据类型实际占用的内存空间长度,map、 channel 是可选参数,slice 是必要参数。
cap:为数据类型提前预留的内存空间长度,可选参数。所谓的提前预留是当前为数据类型申请内存空间的时候,提前申请好额外的内存空间,这样可以避免二次分配内存带来的开销,大大提高程序的性能。
利用make()函数创建(s := make([]string,3)) append(原数组,追加内容)进行追加,会返回一个新的切片
Go中可以像python那样进行区间索引(没有负数)
map
利用make(map[string]int),分别代表KV
循环
Go只有一种循环
for initialization; condition; post {
// zero or more statements
}
range(遍历)
for _, arg := range os.Args[1:] {
s += sep + arg
sep = " "
}
range 会返回两个值,前者为索引,后者为该索引下的元素值
函数
func 函数名(参数...) (返回值...)
指针
Go 在函数传递上可以使用像C/C++那样进行地址传递,这样可以直接修改该地址下的值
结构体
定义和C/C++类似 type 结构体名 struct {
}
字符串操作
func Replace(s,old,new string,n int)
返回s中前n个不重叠old字串都替换为new的新字符串,如果n<0会替换所有old子串
%v:打印任意类型的变量
%+v:更详细的结果
%#v:进一步详细
JSON处理
JSON处理(json:"age" 解析当前字段时的名字)
MarshalIndent 类似于 Marshal,但应用缩进来格式化输出。根据缩进嵌套,输出中的每个 JSON 元素都将在以前缀开头的新行开始,后跟一个或多个缩进副本