Go中make和new

package main

import "fmt"

//make和new都可以用来初始化,两者却有完全不同的作用

//make关键字的主要作用是初始化内置的数据结构,也就是数组,切片和Channel
//new,当我们想要获取指向某个类型的指针时可以使用new关键字
func main()  {
	//make在Go中只能用来初始化基本类型


	/*
	func make(t Type, size ...IntegerType) Type
	            类型   长度(Integer类型)   返回值:类型
	// The new built-in function allocates memory. The first argument is a type,
	新的内置函数分配内存。第一个参数是类型,
	// not a value, and the value returned is a pointer to a newly
	不是值,返回的值是指向新指针的指针
	// allocated zero value of that type.
	分配该类型的零值。
	 */


	//slice是一个包含data,cap和len的结构体
	slice:=make([]int,0,100)
	//hash是一个指向hmap结构体的指针
	hash:=make(map[int]bool,10)
	//ch是一个指向hchan结构体的指针
	ch:=make(chan int ,5)
	fmt.Println(slice,hash,ch)   //[] map[] 0xc000082000



	//new:接收一个类型作为参数然后返回一个指向这个类型的指针
	
	/*
	func new(Type) *Type
			类型    返回值:指向这个新分配的零值的指针
	// The complex built-in function constructs a complex value from two
	复杂的内置函数从两个构造一个复杂的值
	// floating-point values. The real and imaginary parts must be of the same
	浮点值。实部和虚部必须相同
	// size, either float32 or float64 (or assignable to them), and the return
	大小,可以是float32或float64(或可分配给它们),并返回
	// value will be the corresponding complex type (complex64 for float32,
	值将是对应的复杂类型(对于float32,为complex64,
	// complex128 for float64).
	用于float64的complex128)
	 */

	i:=new(int)
	var v  int
	i1:=&v
	fmt.Println(i,i1)//0xc00001a088 0xc00001a0a0


	//这两种不同初始化方法其实是等价的,它们都会创建一个指向 int 零值的指针。

	//总结:make 用于创建切片、哈希表和管道等内置数据结构,new 用于分配并创建一个指向对应类型的指针。



	//实现原理

	//make关键字就是根据参数类型的不同转化成三种不同类型的节点,这些节点最终也会调用不同的运行时函数来初始化数据结构


	//new
	//如果请求创建的类型大小是0,那么就会返回一个表示空指针的变量,在遇到其他情况时会将关键字转换成newobject





}

/*

总结:

最后,简单总结一下Go语言中 make 和 new 关键字的实现原理,make 关键字的主要作用是创建切片、哈希表和 Channel 等内置的数据结构,
而 new 的主要作用是为类型申请一片内存空间,并返回指向这片内存的指针。

 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值