第二章(类型)

  • 我们声明的变量是一个易于阅读的名字,用来表示这段内存。实际上,编译后的机器码不使用变量名,而是直接通过内存地址来访问目标数据。

  • 函数外声明变量,不能使用简短模式(go a:=10 )。

  • 简短模式并不总是重新定义变量,也可能部分退化成赋值操作,前提是最少有一个新变量被定义,且必须是同一作用域。在处理函数返回值时,退化赋值允许我们重复使用err变量

  • go有个名"_"的特殊成员,通常作为忽略占位符使用

  • 定义常量时,在常量组如不指定类型和初始值,则与上一行非空常量右值(表达式文本)相同

func main() {
	const (
		x uint16 = 120
		y
		s = "abc"
		z
	)
	fmt.Printf("%T,%v\n", y, y)//uint16,120
	fmt.Printf("%T,%v\n", z, z)//sting,abc
}
  • go没有明确意义上的eumn定义,可借助iota标识实现一组自增常量值来实现枚举类型
        const (
      		x = iota //0
      		y        //1
      		z        //2
      	)
	const (
		_  = iota             //0
		KB = 1 << (10 * iota) // 1 << (10 * 1)
		MB                    // 1 << (10 * 2)
		GB                    // 1 << (10 * 3)
	)
	println(x, y, z, KB, MB, GB)
  • 常量通常会被编译器在预处理阶段直接展开,最为指令数据使用,所以不能取常量的内存地址(会报错:cannot take the address of 变量)

-基本类型

  • 别名
    byte alias for uint8
    rune alias for int32

  • 引用类型

    • 引用类型特指slice/map/channel
  • new和make却别
    new 为指针分配空间,并且返回值为指针类型(分配0值空间)
    make为chan/slice/map 这三种类型分配空间并初始化值

    Go语言中的 new 和 make 主要区别如下:
    make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据;
    new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type;
    new 分配的空间被清零。make 分配空间后,会进行初始化;

posted @ 2023-01-03 22:56  巴达克  阅读(7)  评论(0编辑  收藏  举报