Go 语言入门指南:基础语法和常用特性解析

34 阅读4分钟

数组的定义:var arrayName [size]dataType // arrayName := [5]dataType{1, 2, 3, 4, 5}

指针的定义:var var_name *var-type

切片的定义:var identifier []type 例:var slice1 []type = make([]type, len) 也可以简写为 slice1 := make([]type, len) 也可以指定容量,其中 capacity 为可选参数。 make([]T, length, capacity) len() 和 cap() 函数 切片是可索引的,并且可以由 len() 方法获取长度。 切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。 append(name , 内容) //添加内容 copy() 函数//拷贝内容 如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。

for key, value := range oldMap { newMap[key] = value } //对切片进行遍历,key 和 value 是可以省略,顺序是固定的,若想省略则写”_“;

定义结构体 结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下: type struct_variable_type struct { member definition member definition ... member definition }

映射(Map):可以用len获取长度 例子:map1 := make(map[int]float32) //创建一个空的 map,key 是 int 类型,value 是 float32 类型 遍历方式与切片一样

m := make(map[string]int, 10) // 创建一个初始容量为 10 的 Map

// 删除键值对 delete(map1, "banana") delete() 函数 delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。 //map它的遍历顺序是偏随机的,是无序遍历的

通道(Channel): range 遍历从通道接收的值,直到通道关闭。 例子: ch := make(chan int, 2)//2指的是容量大小,必须要设置//有容量则是缓冲通道没有则是无缓冲 ch <- 1 ch <- 2 close(ch)//一定要关闭通道 //通道内容不能超过容量限制 遍历: for value := range oldMap {

}//只有value一个值

数值类型转换 将整型转换为浮点型: 例子:var a int = 10 var b float64 = float64(a) 字符串类型转换 将一个字符串转换成另一个类型,可以使用以下语法: var str string = "10" var num int num, _ = strconv.Atoi(str)//将字符串变量 str 转换为整型变量 num !!!注意,strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,我们可以使用空白标识符 _ 来忽略这个错误 strconv.Itoa(num)//将字符串转换为整数 strconv.ParseFloat(str, 64)//将字符串转换为浮点数 strconv.FormatFloat(num, 'f', 2, 64)//将浮点数转换为字符串

错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 error 类型是一个接口类型,这是它的定义 type error interface { Error() string }

此函数会在包被导入时执行,例如在main函数中导入包,包中存在init()函数那么这个函数中的代码会在main()函数执行前执行,用于初始化包所需要的特定资料

例如: package userPackage import "fmt" func init(){ fmt.printfln("tool init") }//则会先输出init函数

  1. init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量
  2. 可以拥有多个init函数
  3. 不能有返回参数
  4. 同一个包中多个init函数的执行顺序go语言没有明确的定义 对于同一个go文件的init()函数调用顺序是从上到下的 对同一个package中的不同文件,将文件名按字符串进行“从小到大”排序,之后顺序调用个文件中的init()函数。
  5. 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序,例如导入顺序是main->A->B->C,则初始化顺序与之相反。main包总是被最后一个初始化,因为它总是依赖别的包
  6. init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

go程序加载过程

全局变量

init函数

main函数