Golang笔记之值类型和引用类型

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

  • 值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址
  • 引用类型:复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。
  • 局部变量被声明后必须在相同的代码块中使用它,否则会得到编译错误,全局变量允许声明但不使用
  • 如果要交换两个变量(已声明且赋值)的值,可以简单地使用a,b = b,a,这被称为并行或同时赋值; _实际上是一个只写变量,我们无法得到它的值,这样做是因为Go语言中必须使用所有被声明的局部变量,但有时我们并不需要使用从一个函数中得到的所有返回值;并行赋值也被用于当一个函数返回多个返回值时,比如这里的val和错误err是通过调用func1函数同时得到:val,err = func1()
  • iota:特殊常量,可以认为是一个可以被编译器修改的常量。在每一个const关键字出现时,被重置为0,然后在下一个const出现之前,每出现一次iota,值自动加1.
    iota可以被用作枚举值
    package main
    const (
      a = iota
      b = iota
      c = iota
    )
    func main() {
      println(a, b, c)//0 1 2
    }
    第一个iota等于0,每当iota在新的一行被使用时,它的值都会自动加1;所以a=0,b=1,c=2可以简写为下列形式(?不太懂):
    const (
      a = iota
      b
      c
    )
    结果与之前一样。
    iota用法:
    package main
    import "fmt"
    func main() {
      const (
              a = iota   //0
              b          //1
              c          //2
              d = "ha"   //独立值,iota += 1
              e          //"ha"   iota += 1
              f = 100    //iota +=1
              g          //100  iota +=1
              h = iota   //7,恢复计数
              i          //8
      )
      fmt.Println(a,b,c,d,e,f,g,h,i) // 0 1 2 ha ha 100 100 7 8
    }
    <<:左移运算符,用来将一个数的各二进制位全部左移若干位
    iota实例:
    package main
    import "fmt"
    const (
      i=1<<iota
      j=3<<iota
      k
      l
    )
    func main() {
      fmt.Println("i=",i)
      fmt.Println("j=",j)
      fmt.Println("k=",k)
      fmt.Println("l=",l)
    }
    以上实例运行结果为:
    i= 1
    j= 6
    k= 12
    l= 24
    iota表示从0开始自动加1,所以i=1<<0,j=3<<1(<<表示左移的意思),即:i=1,j=6,这没问题,关键在k和l,从输出结果看,k=3<<2,l=3<<3。

记得很乱,自己看看就行


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

本文来自:简书

感谢作者:弧度里的微笑

查看原文:Golang笔记之值类型和引用类型

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

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