import
不能先写,未引用会被自动删除
. 全部导入,不建议,容易冲突
_ 只导入init
可以起别名,直接写在包名前
fmt
print 不自动换行
println 自动换行
printf 格式化(format) %s %T(变量类型)
switch case default
类似于if/else
mysql 的 case when
切片
s := make ( [] string, 3)
切片由指向数组的指针,段的长度及其容量(段的最大长度)组成
可以对切片进行切片,就像对列表进行切片一样
切片不会复制切片的数据,他创建一个指向原始数组的新切片
要将一个切片附加到另一个切片 a = append(a,b ...)
range
列表会返回索引和数据
字典返回键和值,可以只接受键
:=
新变量声明,非新变量赋值用=
...
传参拆包
指针
&i 语法获取了 i 变量的存储器地址(指针),
函数有一个*int 参数,就意味着他需要一个int指针,
函数体中的* i 代码将指针从存储器地址解引用到该地址处的当前值,将值分配给取消引用的指针会更改引用地址处的值
结构体
struct
type person struct {
name string
}
&person {name = ""} 创建一个新的结构体,可以命名字段,也可以忽略,忽略为空或0,&符号为前缀将产生一个指向struct的指针
使用 . 来获取结构体中的数据
还可以使用点来访问指针字段 - 指针将被自动取消引用
结构体是可变的
string
字符串的内容可以通过标准索引法来获取,从0开始,只对纯ASCII码的字符串有效,含有中文字符无效,每个中文的索引值相差三
字符串拼接
+ 会产生无用的字符串,浪费内存
%s 内部逻辑比较复杂
.join 需要一个数组
bytes.Buffer 可以当做可变字符使用
strings.Builder 也可当做可变字符使用,内部通过切片实现,非线程安全
数组
数组长度是数组类型的一部分,[5]int和[10]int是不同类型
切片
append操作如果导致分配新的切片来保证已有切片元素和新增元素的存储,
那么新的slice已经和原来slice没有任何关系,即使修改了数据也不会同步。
append操作后,有没有生成新的slice需要看原有slice的容量是否足够
字典
map1 := make(map[string]string,5)
map2 := make(map[string]string)
map3 := map[string]string{}
在”range”语句中生成的数据的值是真实集合元素的拷贝。
它们不是原有元素的引用。直接更新值不会更新源数据,通过索引操作更新数据
Type
可以定义自己的类型
type iz int 定义了新类型,新类型不会拥有原类型所附带的方法
var a iz = 5
type iz = int 给类型起别名,还是同一类型
网友评论