golang new和make却别
golang 中有两个内存分配机制 :new和make,二者有明显区别.
new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型
make:返回一个初始化的实例,返回的是一个实例,而不是指针,其只能用来初始化:slice,map和channel三种类型
package main
import (
“fmt”
)
func main() {
a := new([]int)
fmt.Println(a) //输出&[],a本身是一个地址
b := make([]int, 1)
fmt.Println(b) //输出[0],b本身是一个slice对象,其内容默认为0
}
通过这个例子可以看出,当对slice,map以及channel进行初始化时,使用make比new方式要好,而其他形式的则利用new进行初始化.
初始化:
使用new进行初始化时只能是默认初始化,无法赋值.很多时候,默认初始化并不是一个好主意,例如一个结构体,默认值的结构体初始化并没有多大用处,所以面对结构体初始化我们一般适用如下方式:
type Rect struct {x, y float64width, height float64}
所以我们通过在结构体前面添加取地址符号&对该结构体进行初始化:
rect3 := &Rect{0, 0, 100, 200}
rect4 := &Rect{width: 100, height: 200}
这种初始化方式在golang中初始化结构体是十分常见的.
转载地址:https://studygolang.com/articles/3363
golang new和make却别相关推荐
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 基于Golang的简单web服务程序开发——CloudGo
基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...
- CentOS Docker安装配置部署Golang web helloworld
目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...
- 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发
基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...
- 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...
- 基于Golang的对象序列化的程序包开发——myJsonMarshal
基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...
- 【golang程序包推荐分享】go-ini、viper、godoc
[golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...
- 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1
基于Golang的监听&读取配置文件的程序包开发--simpleConfig_v1 [阅读时间:约10分钟] 一.配置文件概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 ...
- 基于Golang的CLI 命令行程序开发
基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...
- centos使用镜像源轻松配置golang+vscode的方法
Title:centos使用镜像源轻松配置golang+vscode的方法 (阅读时间:约5分钟) 零.序言 最近笔者在上一门名为服务计算的课程,在老师的作业博客中提到,安装golang+vscode ...
最新文章
- 2020-11-13size_t和int
- PHP CI框架目录结构及运行机制
- 不明白JVM虚拟机还怎么面试
- 启明云端分享| sigmstar SSD201/SSD202D/SSD210/SSD212开机动画启动到底能做到多少
- 【Python】利用graphviz和pycallgraph库自动生成Python函数调用关系图
- 动态ip如何做域名解析?
- SAP License:值得一看的ERP问题
- 前端如何实现网络速度测试功能_如何通过fiddler的断点功能,来实现不同场景的测试...
- LeetCode 198. 打家劫舍(动态规划)
- 鸽主姓名查询成绩_SQL学习之旅-Select简单查询
- 新媒体活动策划方案要点
- Latex入门简明教程
- Java实战之管家婆记账系统(1)——项目简述
- Office server webs app 集成(JAVA)
- MediaPipe基础(5)Pose(姿势)
- sudo: /etc/sudoers is owned by uid xxx, should be 0
- UNIX环境高级编程笔记(14)- 函数sigsuspend 实现父进程子进程同步
- Win10设置虚拟机桥接连接
- Java导出多个excel并且打包成zip压缩文件
- 小程序ios页面数据空白问题