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