go中make和new的用法,以及nil用法

看如下代码

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	//make和new函数
	//new函数用法
	//a := 10
	//默认值 int rune byte float bool string这些类型都有默认值
	//指针,切片,map,接口这些默认值是nil类型
	var a int
	a = 10
	fmt.Println(a)
	//var p *int //声明一个变量,但是变量没有初始值,所以这样是不行的,只有一个占位符,而没有实际分配内存
	//*p = 10

	//对于指针来说,或者其他默认是nil的情况来说,如何一开始就分配内存
	var p *int = new(int) //go的编译器就知道先申请一个内存空间,这里的内存空间的值全部设置为0
	*p = 20
	fmt.Println(*p)

	//除了new函数可以申请内存以外,还有一个函数是make函数,更加常用的是make,make函数一般用于切片,map
	var info map[string]string = make(map[string]string)
	info["c"] = "wwj"
	fmt.Println(info)

	//new函数返回的是这个值的地址,指针make函数返回的是自定类型的实例
	//nil的一些细节
	//和python的none不完全相等
	var info2 map[string]string
	if info2 == nil {
		fmt.Println("map的默认值是nil")
	}

	var slice []string
	if slice == nil {
		fmt.Println("slice的默认值是nil")
	}

	var err error
	if err == nil {
		fmt.Println("error是nil")
	}

	//python中的NONE和go语言的nil类型是不一样的,NONE是全局唯一的
	//go语言中nil是唯一可以用来表示部分类型的零值标识符,他可以代表许多不同内存布局的值
	fmt.Println(unsafe.Sizeof(slice))
	fmt.Println(unsafe.Sizeof(info2))
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值