这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
知识点
golang中的变量类型
按照定义来说可以分类:
基本数据类型
整数类型(int、int16)、浮点类型(float32、float64)、字符型(byte)、布尔型(bool)、字符串(string)、rune(int32)
派生数据类型
指针(Pointer)、数组、结构体(struct)、管道(Channel)、函数(func)、切片(slice)、接口(interface)、map
其次在使用时候也可以这样划分:
- 引用类型:引用类型的变量,我们不光要声明它,还要为它分配内容空间
- 值类型:变量的默认值是他们的零值
值类型与引用类型在当作参数进行传递时,值类型参数在函数方法中改变是不会改变上层方法的变量值的,而引用类型的参数是会变化的上层方法中变量的值的
new和make的区别
- new 只分配内存,只接收参数是一个“类型”的指向该类型点内存地址指针
- make 只能用于 slice、map 和 channel 的初始化,返回的类型就是这三个类型本身(引用类型)
new
func new(Type) *Type
例如:
var num *int //定义
num = new(num) //分配空间
*num = 99 //赋值
fmt.Println(*num)
type student struct{
Name string
Age uint
}
var xiaohong *student //定义
xiaohong = new(student) //分配空间
xiaohong.Name = "xiaohong" //赋值
xiaohong.Age = 18 //赋值
fmt.Println(xiaohong)
它返回的永远是类型的指针,指针指向分配类型的内存地址。
new在实际中不常用,反正小白的我确实如此,make倒是常用。
make
func make(t Type, size ...IntegerType) Type
例如:
data := make(map[string]interface{}, 0)
Go语言中的 new 和 make 主要区别如下:
- make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据;
- new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type;
- new 分配的空间被清零。make 分配空间后,会进行初始化;
何时使用
- 切片、映射和通道,使用make
- 数组、结构体和所有的值类型,使用new