golang之new和make使用的注意事项

1.主要是分配内存差异

package main
import "fmt"


type Person struct {
	Name string
	Age  uint32
	Ptr  *uint32
}

func main(){
	// var a *int
	// *a = 1 // 发生panic,invalid memory address or nil pointer dereference

	// array
	array := new([5]int)
	array[0] = 1 

	// slice
	// slice := new([]int)
	// (*slice)[0] = 1 // 发生panic,因为未能分配内存,runtime error: index out of range [0] with length 0
	// fmt.Println(slice)

	// map
	// mm := new(map[string]interface{}) // 仅仅是初始化了类型,里面成员尚未初始化
	// mm["1"] = 1
	mm := make(map[string]interface{}) // 使用make进行初始化
	mm["1"] = 1
	fmt.Println(mm)

	// channel
	// ch := new(chan string)
	// ch <- "hell0" // invalid operation: cannot send to non-channel ch (variable of type *chan string)

	st := new(Person)
	// new 仅仅是初始化了类型,里面成员尚未初始化
	// *st.Ptr = 12 // panic: runtime error: invalid memory address or nil pointer dereference
	st.Name = "lx"
	st.Age = 11
	fmt.Println("st = ",st)

	ss := &Person{
		Ptr:new(uint32), // 初始化为其分配内存
	}
	*ss.Ptr = 10
	fmt.Println(ss)

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值