首页 > 其他分享 >Golang中make和new的区别

Golang中make和new的区别

时间:2024-02-02 21:02:48浏览次数:36  
标签:int make Golang 分配内存 Printf new fmt

1. 相同点

  • 都是内建函数,都是在堆上分配内存,都需要传递类型参数

2. 不同点

  • 传递的参数不一样,new函数只接收一个参数,make函数可以接收一个以上的参数
package main

import "fmt"

func main() {
	// int类型0值的指针,返回的值是以0x开头的16进制整数,参数个数为1
	intZeroValuePoint := new(int)
	fmt.Printf("%v\n", intZeroValuePoint)

	// 为slice分配内存, 创建初始值问 [0 0 0 0 0] 的切片,参数个数为3,第三个参数是可选的
	intHasInitLenSlice := make([]int, 5, 10)
	fmt.Printf("%v\n", intHasInitLenSlice)
}

  • 返回的参数类型不一样,new函数返回对应输入参数类型的指针类型,make函数返回输入参数类型
package main

import "fmt"

func main() {
	// int类型0值的指针,返回的值是以0x开头的16进制整数
	intZeroValuePoint := new(int)
	fmt.Printf("%T\n", intZeroValuePoint)		// 输出 *int

	// 为slice分配内存, 创建初始值问 [0 0 0 0 0] 的切片
	intHasInitLenSlice := make([]int, 5, 10)
	fmt.Printf("%T\n", intHasInitLenSlice)		// 输出 []int
}
  • 使用场景不一样,new函数为类型分配类型对应零值内存并返回指针,make是为特定引用类型slice map chan 分配内存
package main

import "fmt"

func main() {
	// int类型0值的指针,返回的值是以0x开头的16进制整数
	intZeroValuePoint := new(int)
	fmt.Printf("%T\n", intZeroValuePoint) // 输出 *int

	// 为slice零值分配内存,返回的值是以0x开头的16进制整数
	sliceZeroValuePoint := new([]int)
	fmt.Printf("%T: %v\n", sliceZeroValuePoint, sliceZeroValuePoint) // 输出 *[]int &[]

	// 为slice分配内存, 创建初始值问 [0 0 0 0 0] 的切片
	intHasInitLenSlice := make([]int, 5, 10)
	fmt.Printf("%T\n", intHasInitLenSlice) // 输出 []int

	// 为map分配内存
	mapValue := make(map[string]string, 10)
	fmt.Printf("%T\n", mapValue) // 输出 map[string]string

	// 为chan类型分配内存
	chanValue := make(chan int, 10)
	fmt.Printf("%T\n", chanValue)
}

标签:int,make,Golang,分配内存,Printf,new,fmt
From: https://www.cnblogs.com/2bjiujiu/p/18003981

相关文章

  • CF620E New Year Tree
    CF620ENewYearTree题意:给出一棵n个节点的树,根节点为1。每个节点上有一种颜色ci​。m次操作。操作有两种:1uc:将以u为根的子树上的所有节点的颜色改为c。2u:询问以u为根的子树上的所有节点的颜色数量。1<=c<=60。由于c的范围,可以用一个整数来表示每棵子......
  • CF620E New Year Tree 题解
    题目链接:CF或者洛谷这题很简单,看到颜色数,HH的项链?树,树上的HH的项链?带修,树上的镜中的昆虫?\(c_i\le60\),噢,easy了。考虑一类信息,表示有和无,对于某种颜色来讲,\(0/1\)表示无或者有,而或运算让我们从小区间的有无情况反映到大区间的有无情况。一种暴力的想法,为每种颜色建立一棵有......
  • [转帖]Open JDK 8.0_152-b16 崩溃 : [libzip.so+0x12522] newEntry+0x62
    一.问题描述在执行spark任务的时候,JVM崩溃.崩溃dump日志:##AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment:##SIGBUS(0x7)atpc=0x00007f9adacb9522,pid=107874,tid=0x00007f9add417700##JREversion:Java(TM)SERuntimeEnvironme......
  • golang 正则过滤sql注入的方法
    该方法返回的是一个bool值packagemainimport"regexp"import"fmt"//正则过滤sql注入的方法//参数:要匹配的语句funcFilteredSQLInject(to_match_strstring)bool{//过滤‘//ORACLE注解--/**///关键字过滤update,delete//正则的字符......
  • golang中 UTF-8 和GBK格式的转换
    funcmain(){ str:="测试" utf8By:=[]byte(str) gbkBy,_:=Utf8ToGbk(utf8By) //直接打印用string转类型的gkb字节数组,会乱码 fmt.Println("打印GBK",string(gbkBy)) fmt.Println("UTF8字节长度:",len(utf8By),"GBK字节长度:",len(gbkBy)) ......
  • golang 使用hex包,转换文件的16进制字符、16进制字节数组
    某些特殊情况下需要根据文件的16进制转换成字符在linux系统用vim保存一个文件,写入两行内容这是测试A这是测试B用linux的xxd命令输出文件的16进制字节数组xxd-g1-it.txtunsignedchart_txt[]={0xe8,0xbf,0x99,0xe6,0x98,0xaf,0xe6,0xb5,0x8b,0x......
  • makefile学习--------1
    为什么要使用makefile:这是在linux下编译一个c语言文件时需要的指令,如果需要编译的文件不在同一个路径时,还需要将路径写上,十分麻烦,而且要是修改之后想重新编译,就需要再一次输入这些繁琐的指令。为了避免这种情况,采用了makefile,makefile里可以放这些执行指令,只需要使用的时候mak......
  • golang gin框架搭建restapi
    初学golang,尝试用gin框架搭建restapi一)源码准备创建go.mod文件,相当于nodejs中的package.jsongomodinitexamples/web-service-gin新建文件main.go,加入以下代码packagemainimport( "net/http" "github.com/gin-gonic/gin")//albumrepresentsdataaboutarecor......
  • CMake 笔记
    cmake笔记目录cmake笔记CMake命令行选项常用CMake语法特殊变量变量常用基本测试安装其它其它基本使用FetchContentvcpkgwindowslinux及wslwindows配环境还能不能再恶心点......
  • Golang学习(三)基本语法[变量、常量、类型、类型转换]
    变量声明Go语言中有四类标记:标识符(identifiers)、关键字(keywords)、运算符(operators)标点符号(punctuation)以及字面量(literals)。Go语言变量标识符由字母、数字、下画线组成,其中首字符不能为数字,同一字母的大小写在Go语言中代表不同标识。在Go语言中,命名标识符时,通常选择英文的52个大......