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)
}

Golang中make和new的区别的更多相关文章

  1. 【GoLang】GoLang 中 make 与 new的区别

    make.new操作 make用于内建类型(map.slice 和channel)的内存分配.new用于各种类型的内存分配. 内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零 ...

  2. golang中数组与切片的区别

    初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 数组: a := [...],,} a := [],,} 切片: a:= [],,} a := make([]) a := m ...

  3. golang 中Pointers Vs References

    原文: https://spf13.com/post/go-pointers-vs-references/ Pointers Vs References Some languages includin ...

  4. golang中new和make区别

    golang 中有两个内存分配机制 :new和make,二者有明显区别. new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型 make:返回一个初始化的实例,返 ...

  5. golang中sync.RWMutex和sync.Mutex区别

    golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex     f ...

  6. golang中,new和make的区别

    在golang中,make和new都是分配内存的,但是它们之间还是有些区别的,只有理解了它们之间的不同,才能在合适的场合使用. 简单来说,new只是分配内存,不初始化内存: 而make即分配又初始化内 ...

  7. golang中数组指针与指针数组的区别实现

      指针数组和数组的指针,指的是两个不同的东西. 指针数组是有指针组成的数组,数组的指针是一个数组的指针. package main import "fmt" const MAX ...

  8. 【GoLang】golang 中 defer 参数的蹊跷

    参考资料: http://studygolang.com/articles/7994--Defer函数调用参数的求值 golang的闭包和普通函数调用区别:http://studygolang.com ...

  9. 说说不知道的Golang中参数传递

    本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为.在golang中存在着m ...

  10. Go实战--golang中使用JWT(JSON Web Token)

    http://blog.csdn.net/wangshubo1989/article/details/74529333 之前写过关于golang中如何使用cookie的博客: 实战–go中使用cook ...

随机推荐

  1. 数字孪生 3D 风电场,智慧风电之海上风电

    前言 截止 2021 年,全球已有 127 个国家做出了"碳中和"的承诺,能源低碳转型和实现碳中和已经成为全球共同的战略目标.根据权威机构预测,到 2050 年,可再生能源发电将占 ...

  2. 云工作流 CloudFlow 重磅发布,流程式开发让云上应用构建更简单

    为了让企业和开发者更快速.便捷地进行云上开发,阿里云重磅发布云工作流(CloudFlow),它是一款强大的面向开发者的流程编排开发工具,全托管.高并发.高可用,帮助用户简化和自动化复杂的云上业务流程和 ...

  3. vue tabBar导航栏设计实现1-初步设计

    系列导航 一.vue tabBar导航栏设计实现1-初步设计 二.vue tabBar导航栏设计实现2-抽取tab-bar 三.vue tabBar导航栏设计实现3-进一步抽取tab-item 四.v ...

  4. uni-app app定位当前地理位置

    https://blog.csdn.net/HXH_csdn/article/details/112258398?utm_medium=distribute.pc_relevant.none-task ...

  5. JavaWeb+JDBC+Servlet+SqlServer实现登录功能

    首先创建javaweb项目,可以参照以下: https://blog.csdn.net/u012532559/article/details/51013400 附上项目结构: 1.重写登录页面inde ...

  6. shell 脚本之 disk_monitor

    编写脚本实现监测指定文件夹的磁盘空间.   =========================================================== ## 脚本逻辑介绍 用户通过 --p ...

  7. 使用Amber计算单点能三步走

    技术背景 Amber是一个在分子动力学中非常常用的一个软件,可以用于进行分子动力学模拟计算,可以与一些软件配合进行增强采样.这里我们简单介绍一下如何使用Amber去计算一个分子构象的单点势能值,及其对 ...

  8. Oracle数据库统计信息_执行计划_sharedpool等的知识梳理

    Oracle数据库统计信息_执行计划_sharedpool等的知识梳理 背景 最近有项目出现了年底业务量增加时卡顿的情况. 同事多次发现执行SQL缓慢. 但是重新执行统计信息更新后问题就优化的现象. ...

  9. [转帖]Lightning 实操指南

    2.2.2 Lightning 实操指南 这一节将介绍如何使用 Lightning 导入数据的实操 2.2.2.1 TiDB Lightning 快速开始 注意 TiDB Lightning 运行后, ...

  10. [转帖]「Linux性能调优」磁盘I/O队列调度策略

    https://zhuanlan.zhihu.com/p/450329513 傻瓜化说明 简单地说,对于磁盘I/O,Linux提供了cfq, deadline和noop三种调度策略 cfq: 这个名字 ...