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. SpringCloud学习 系列十、服务熔断与降级(1-简介)

    系列导航 SpringCloud学习 系列一. 前言-为什么要学习微服务 SpringCloud学习 系列二. 简介 SpringCloud学习 系列三. 创建一个没有使用springCloud的服务 ...

  2. <vue 组件 1、组件化基本使用>

    代码结构 组件就是将复杂的功能拆分成简单的块,拆分后的块可以被多处使用. 组件的使用分成三个步骤: 1.创建组件构造器     Vue.extend() 2.注册组件               Vu ...

  3. uni-app打包到安卓步骤

    1.打包到安卓 https://www.bilibili.com/video/BV1BJ411W7pX?p=56 2.打包到IOS https://www.jianshu.com/p/ef6e6e01 ...

  4. linux 开机默认进入命令行模式

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  5. Angular系列教程之管道

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. Shell-全局变量-export

  7. Git-基本命令-init-add-commit-status

  8. [转帖]Nginx 安全优化

    目录 前言 1.使用 SSL/TLS 证书 2.使用安全密钥交换机制 3.禁用旧的 SSL/TLS 协议 4.禁用 SSL/TLS 弱密码套件 5.禁用不需要的 HTTP 方法 6.防止缓冲区溢出攻击 ...

  9. [转帖]【VIM】多行缩进空格与删除

    向前或向后缩进一个TAB 按ctrl + v组合键进入Visual Line模式,可使用方向键选择多行: 按<或>,进行向前或向后缩进tab. 缩进n个TAB,按n+<或> 多 ...

  10. [转帖]etcd网络模块解析

    https://www.cnblogs.com/luohaixian/p/17509742.html 1. RaftHttp模块介绍 在etcd里raft模块和网络模块是分开的,raft模块主要负责实 ...