GO语言基础 | 青训营笔记

70 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 元素都将在以前缀开头的新行开始,后跟一个或多个缩进副本