go-切片

作者: 5号船长 | 来源:发表于2018-11-15 23:04 被阅读5次
    切片

    slice(切片)

    arr := [...]int{0,1,2,3,4,5,6,7}
    s := arr[2:6]  s就是一个切片,s的值为[2 3 4 5],包括2,但是不包括6
    s := arr[:6] = [0 1 2 3 4 5]
    s := arr[2:] = [2 3 4 5 6 7]
    s := arr[:] = [0 1 2 3 4 5 6 7]
    
    arr := [...]int{0,1,2,3,4,5,6,7}
    s := arr[2:6]
    s[0] = 10
    arr 的值变为 [0 1 10 3 4 5 6 7],所以slice本身没有数据,是对底层array对一个view
    

    slice可以向后扩展,不可以向前扩展
    s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)

    向slice添加元素:
    arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
    s1 := arr[2:6]
    s2 := s1[3:5]
    s3 := append(s2, 10)
    s4 := append(s3, 11)
    s5 := append(s4, 12)
    

    添加元素时如果超越cap,系统会重新分配更大对底层数组
    由于值传递对关系,必须接收append对返回值。
    s = append()

    map
    m := map[string]string {
      "name" : "ccmouse",
      "course" : "golang",
      "site" : "imooc",
      "quality" : "notbad"
    }
    

    **定义map: **

    map[K]V      复合形式的:map[K1]map[K2]V
    

    map的操作:
    创建:make(map[string]int)
    获取元素:m[key]
    key不存在时,获得value类型的初始值
    用value,ok := m[key] 来判断是否存在key
    用delete删除一个key

    map的遍历:
    使用range遍历key,或者遍历key,value对
    不保证遍历顺序,如需顺序,需要手动对key排序
    使用len获得元素个数

    map的key:
    map使用哈希表,必须可以比较相等
    除了slice,map,function的内建类型都可以作为key
    struct类型不包含上述字段,也可以作为key

    字符串:
    rune相当于go的char
    使用range遍历pos,rune对
    使用utf8.RuneCountInString获得字符数量
    使用len获得字节长度
    使用[]byte获得字节

    其他字符串操作:
    fields, split, join
    contains, index
    tolower, toupper
    trim, trimright, trimleft

    面向对象:

    go语言仅支持封装,不支持继承和多态
    go语言没有class,只有struct
    结构的定义:

    type TreeNode struct {
      left, right *treeNode
      value  int
    }
    

    不论地址还是结构本身,一律使用 . 来访问成员。

    只有使用指针才可以改变结构内容
    nil指针也可以调用方法

    值接收者 VS 指针接收者:
    要改变内容必须使用指针接收者
    结构过大也考虑使用指针接收者
    一致性:如有指针接收者,最好都是指针接收者

    值接收者是 go 语言特有

    值/指针接收者均可接收值/指针

    封装:
    名字一般使用CamelCase
    首字母大写:代表public
    首字母小写:代表private

    包:

    每个目录一个包
    main包包含可执行入口
    为结构定义的方法必须放在同一个包内
    可以是 不同的文件

    如何扩充系统类型或者别人的类型:
    定义别名
    使用组合

    官方推荐:所有项目和第三方库都放在同一个GOPATH下
    也可以将每个项目放在不同的GOPATH

    相关文章

      网友评论

          本文标题:go-切片

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