type
status
date
slug
summary
tags
category
icon
password
if/else 变体
switch
switch 下的每个case不必带break,匹配到了某个case之后会自动跳出.
可以使用
fallthrough
强制执行后面的case的代码.如果switch没有条件表达式,它会默认匹配true
也可以判断变量的type:
for
可以使用
for.. range
进行迭代:for中的三个条件都可以忽略.
iota
自增+1,多用于枚举
数组
golang中的数组是值类型,修改副本中的元素不会影响原来的数据.
输出结果:
数组的大小是类型的一部分。因此[3]int和[2]int是不同的类型。
切片
Golang中切片是数组的抽象,Go中数组长度不可变,但是切片可以.切片本身没有任何数据,它只是对现有数组的引用.
因此,。对切片所做的任何修改都将反映在底层数组中.
可以使用make方法创建切片:
len()
是切片中元素的数量cap()
是底层数组中元素的数量append()
可以用来给切片追加元素,也会改变底层数组的内容,但是在切片cap不大于len的情况下,会扩容导致分配新的数组空间,这种情况下引用该数组的其他切片不被影响.copy()
不会在两个切片之间建立联系.map
同样可以使用
make
创建,也可以直接初始化:如果不初始化,则是一个nil map.
delete(map, key)
用来删除元素map[key]
获取不存在的key值时,会返回默认值,string返回空字符串,可以使用:ok是布尔类型.
函数
可变参数:
函数也是Go中的一种数据类型,可以作为另一个函数的参数.
defer
:当一个函数执行到最后,会逆序执行defer语句,然后return.指针
声明指针:
获取指针的值:
*ptr
使用指针传递参数:
结构嵌套
- 结构体嵌套
- 匿名字段/提升字段
可以像这样初始化:
字段可以直接访问.
如果想导出结构体和它的字段,则首字母必须大写.
结构体是值类型,如果两个结构体中的字段都相等(前提是字段类型可以比较),则认为两个结构体是相等的.
make与new
make
用于内建类型(map, slice,channel)的内存分配.new
用于各种类型的内存分配,返回的是指针.函数与方法
方法指的是带接收者(即对象)的函数.
方法是可以继承的,如果匿名字段实现了一个方法,包含这个匿名字段的struct也能调用这个方法:
方法还可以重写,即在包含匿名字段的struct再实现一个方法.
- 作者:姜康
- 链接:https://jiangkang.tech/article/2102d070-d4aa-4d4e-8100-688ee8571840
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。