1.new 返回的是指针类型,所以一般用于给非引用类型(int,string,array等)
package main
//定义一个struct
type Person struct {
Name string
Age int
}
func main() {
p1 := Person{
Name: fmt.Sprintf("你好呀:%v", "张三"),
Age: 18,
}
fmt.Printf("type:%T,value:%v
", p1, p1)
// 取出变量的内存地址,也就是指针,是通过&变量名
// 也就是 &p1
fmt.Printf("type:%T,value:%v
", &p1, p1)
// new 返回的是指针类型
p2 := new(Person)
// 指针类型访问这个类型的属性和方法
// 可以通过 (*p2).Name
// 也可以通过 p2.Name ,这种方式其实是Go的语法糖,本质上还是通过 (*p2).Name
p2.Name = fmt.Sprintf("你好呀:%v", "李四")
(*p2).Name = fmt.Sprintf("你好呀:%v", "王五")
p2.Age = 20
fmt.Printf("type:%T,value:%v
", p2, p2)
// 通过指针找到变量,是通过*变量名
// 也就是 *p2
fmt.Printf("type:%T,value:%v
", *p2, p2)
}
2. make 用于引用类型(map,slice,channel),一般多用于初始化
// map的初始化 maps := make(map[string]string, 10) // channel的初始化 channel := make(chan string, 10)