这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。 在这里记录一下自己记录的Go的一些常用的语法。Go跟之前学过的C,C++,Java差别有点大。不太习惯。
包
每个Go程序都是由包构成的。程序从main包开始运行。按照约定,包名与导入路径的最后一个元素一致。一个包的名字和包的导入路径的最后一个字段相同,例如gopl.io/ch2/tempconv包的名字一般是tempconv。使用包直接使用tempconv加上一个.然后就可以选择包里的方法了。
导入
导入包有两种方法:
- 分组形式导入:
import(
"fmt"
"math"
)
- 编写多个导入语句:
import "fmt"
import "math"
推荐使用第一种。
导出名
在Go中规定,如果一个名字以大写字母开头,那么它就是已导出的。如:Pi导出自math包。
函数
Go中的函数可以没有参数或者接受多个参数,还可以返回多个值。 需要注意的是,Go语言中是变量在前,类型在后。
当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其他都可以省略。
如:
x int y int 可写成 x,y int
命名返回值
Go函数中的返回值可以被命名,它们被看为定义在函数顶部的变量。 看代码:
//这里是对返回值进行命名,这样返回值就和参数一样拥有参数变量名和类型。
//括号里的就是返回值类型,因为这里返回两个数,所以使用两个string
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
这个代码中如果return后面没跟参数,则默认返回string和bool类型的两个参数。
变量
Go中变量声明有两种方法:
var语句声明。var语句可以出现在包或函数级别(后面介绍那个则只能在函数中)。例,var x int。Go语言中还有类型推导,你可以写成var x = 6,它根据你写给的参数自动命名(类型推导)。- 短变量声明。使用符号
:=可在类型明确的地方代替var声明,它不能在函数外使用。 例如:g := 99这里也是自动判断是什么类型的。
跟其他语言一样,如果声明却没有赋值,则根据这几种情况默认赋值:
- 数值类型为0
- 布尔类型为
false - 字符串为
""需要注意的是,Go语言中不允许声明而不使用的变量。 所以根据这个特性Go中定义了空标识符_,这个东西可以怎么用呢?看下面这段代码
sum := 0
for _, value := range array{
sum += value
}
这里呢就是相当于我们在C语言这样写(意思差不多就行了):
int sum = 0;
for (int i = 0; i < 2; i++){
sum++;
}
就是只是为了索引而已。
常量
常量的声明与变量类似,只是多了一个const关键字。
常量不能用:=语法声明。
const x = 9
range
range语言范围。
用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
nums := []int{1, 2, 3}
sum := 0
for _, value := range nums{
sum += value
}
sum的值为6。
Map
Map 是一种无序的键值对的集合。 Map的定义有两种:
- 使用
make关键字 - 使用
map关键字
//使用make定义
//也可以使用map关键字定义
//var map_variable map[key_data_type]value_data_type
//key是string类型,值是int类型
m := make(map[string]int)
m2 := map[string]int{"one": 1, "two": 2}
总结
Go语言与之前学的几种都不太相同,比如它if和for都不用加括号,代码行尾不用加分号,变量在前类型在后等等。不过要是有一些语言的基础,理解这些基础语法并不难。