golang实战笔记

yongfutian · · 659 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang实战笔记

一、集合类型

  • 1.值指针和引用类型
    a、go语言变量持有相应的值,列外:通道、函数、方法、映射以及切片的引用变量持有的都是引用,以即保存指针的变量。
    b、函数或者方法的参数是值传递,即传递的值会被复制一次,因此:
       对于布尔变量和数值类型的参数来说,很廉价,每个变量占1~8个字节;
       按字符串传也廉价,64位机器16字节,32位机器8字节;
       数组代价很大,使用切片替代;
    注意:通过使用指针,我们可以让参数的传递成本最低,并且可修改;指针亦可以指向引用类型,但只对切片有用

  • 2. new(Type) === &Type{}
    两种语法都分配了一个Type类型的值,同时返回一个指向该值的指针;使用大括号的有点,可以为其指定初始值

  • 3. 数组和切片
    a、数组:是一个定长的序列,其中元素类型相同,使用 [] 声明,创建语法如下:
    [length]Type    只声明 eg: var buffer [20]byte
    [N]Type{value1,value2,...,valueN}  声明并初始化
    [...]Type{value1,value2,...,valueN}  自动推断其长度

      var buffer [20]byte //只声明
      names := [5]string{"sampson", "jiny"} //声明并赋初始值
      cities := [...]string{"guiyang", "hangzohu", "shanghai"}
    

    b、切片,可以调整长度,是基于素组创建的(即创建切片时会创建一个隐式的素组,在基于隐式素组操作创建切片),创建语法如下:
    使用make关键字创建:
      make([]Type, length, capacity)
      make([]Type, length)
    正常创建:
      []Type{}
      []Type{value1,value2,...,valueN}
      
      注意:[]type{} 和 make([]Type, 0)等价
    切片的常用操作【s为字符串或数组】:

      s[n] //切片s中索引位置为n的项
      s[n:m] //从切片s的索引位置n到m-1处所获得的切片
      s[n:] //从切片s的索引位置n到len(s)-1处所获得的切片
      s[:m] //从切片s的索引位置0到m-1处所获得的切片
      s[:] //从切片s的索引位置0到len(s)-1处所获得的切片,即复制一个切片
      cap(s) //切片s的容量:总是>=len(s)
      len(s) //切片s中所包含项的个数:总是<= cap(s)
      s[:cap(s)] //增加切片s的长度到其容量,如果两者不同的话
    

遍历切片: for range
修改切片:

    s: = []string{"a","b","c","d", "e"}
    t: = []string{ "k","l"}
    u := []string{"m", "n"}
    s  :=  append(s, "h", "i", "j") //添加单一的值
    s := append(s, t...)   //添加切片中的所有值
    s := append(s, u[1:]...) //添加子切片
    
    letter := 'SYZ'
    b := []byte{"a", "b"}
    b = append(b, letter...) //将一个字符串字节添加进一个字节切片
    
    copy(a, b)函数 ,a、b必须是同一类型的切片

切片的排序和搜索:sort包

  • 4.映射
    映射是一种内置的数据结构,保存键-值对的无序集合,它的内容只受内存的限制
    a、创建

      //使用make创建
      make(map[keyType]valueType, inititalCapacity)
      make(map[keyType]valueType)
      
      //正常创建
      map[keyType]valueType{}
      map[keyType]valueType{key1: value1, key2: value2, ... , keyN: valueN}
    

b、操作

m[k] = v //映射赋值
Delete(m, k) //删除映射某个键值对
v := m[k]
v, found := m[k] //检查某个映射值是否存在,found为bool值,存在为true和不存在为false
len(m) //映射m中的项数目

d、遍历

order := map[string]string{"goodsName" : "yundognxxie", "description": "这鞋很不错"}
for k,v := range order {}
  • **5.案例 **

      //todo
    

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:yongfutian

查看原文:golang实战笔记

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

659 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传