go语言中new和make的区别

我们以一个new一个map和make一个map为例来讲解下:

make map:

Go 复制代码
package main

import (
	"fmt"
)

func main() {

	umap := make(map[string]string)
	fmt.Println(umap)

}

找到map源码,找到makemap方法

可以看到,执行make map的时候,底层会调用makemap方法(slice和chan也有各自的make方法)

也就是说,make是用来初始化go中map、slice、chan的特有方法,它既会给对象分配内存,也会初始化对象。但是new不会,new只会单纯给对象分配内存。

再举个例子:

Go 复制代码
package main

import "fmt"

type MyMap struct {
	SingleMap map[string]string
	Uname     string
	Uage      int
}

func main() {
	m := *new(MyMap)
	fmt.Println("uname:", m.Uage)
	m.SingleMap["uname"] = "lyl"
	fmt.Println(m)
}

我自定义了一个MyMap,通过new初始化后,往这个map的SingleMap里添加元素的时候报错了,因为SingleMap还没有初始化。

相关推荐
运维行者_几秒前
使用Applications Manager监控的关键MongoDB指标
服务器·开发语言·网络·数据库·mongodb·机器学习·云计算
明月_清风9 分钟前
Base64:用 33% 的体积膨胀,买一张在文本世界通行的门票
后端
解决问题no解决代码问题10 分钟前
设计模式分类介绍
java·开发语言·设计模式
得物技术12 分钟前
HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术
大数据·后端·kafka
sugar__salt12 分钟前
从Python列表切片到LLM接口实战:零基础AI编程落地教程
开发语言·python·ai·prompt·transformer·ai编程
码不停蹄的玄黓15 分钟前
SpringBoot 自动装配原理
java·spring boot·后端
z落落17 分钟前
C# 数组属性和方法(Clear / Copy / IndexOf / LastIndexOf)
开发语言·javascript·c#
XovH17 分钟前
Docker 从 0 到 1 再到 Kubernetes 实战:深入理解 Docker 镜像和分层结构
后端
白露与泡影19 分钟前
Java虚拟线程实战:从线程池痛点到性能优化全流程
java·开发语言·性能优化
IT空门:门主23 分钟前
Java 单例模式详解:7 种实现方式 + volatile 原理 + 反射与序列化问题
java·开发语言·单例模式