go

作者: M_unicorn | 来源:发表于2018-12-17 17:04 被阅读0次

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 给类型起别名,还是同一类型

相关文章

网友评论

      本文标题:go

      本文链接:https://www.haomeiwen.com/subject/zvfwxqtx.html