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再实现一个方法.
    image_picker的使用Java线程池源码分析
    Loading...