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却别相关推荐

  1. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  2. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  3. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

  4. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  5. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  6. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

  7. 【golang程序包推荐分享】go-ini、viper、godoc

    [golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...

  8. 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1

    基于Golang的监听&读取配置文件的程序包开发--simpleConfig_v1 [阅读时间:约10分钟] 一.配置文件概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 ...

  9. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  10. centos使用镜像源轻松配置golang+vscode的方法

    Title:centos使用镜像源轻松配置golang+vscode的方法 (阅读时间:约5分钟) 零.序言 最近笔者在上一门名为服务计算的课程,在老师的作业博客中提到,安装golang+vscode ...

最新文章

  1. 2020-11-13size_t和int
  2. PHP CI框架目录结构及运行机制
  3. 不明白JVM虚拟机还怎么面试
  4. 启明云端分享| sigmstar SSD201/SSD202D/SSD210/SSD212开机动画启动到底能做到多少
  5. 【Python】利用graphviz和pycallgraph库自动生成Python函数调用关系图
  6. 动态ip如何做域名解析?
  7. SAP License:值得一看的ERP问题
  8. 前端如何实现网络速度测试功能_如何通过fiddler的断点功能,来实现不同场景的测试...
  9. LeetCode 198. 打家劫舍(动态规划)
  10. 鸽主姓名查询成绩_SQL学习之旅-Select简单查询
  11. 新媒体活动策划方案要点
  12. Latex入门简明教程
  13. Java实战之管家婆记账系统(1)——项目简述
  14. Office server webs app 集成(JAVA)
  15. MediaPipe基础(5)Pose(姿势)
  16. sudo: /etc/sudoers is owned by uid xxx, should be 0
  17. UNIX环境高级编程笔记(14)- 函数sigsuspend 实现父进程子进程同步
  18. Win10设置虚拟机桥接连接
  19. Java导出多个excel并且打包成zip压缩文件
  20. 小程序ios页面数据空白问题

热门文章

  1. 关于python的垃圾回收机制_Python的垃圾回收机制
  2. HBase数据模型深入剖析-OLAP商业环境实战
  3. Java定时器Timer学习之一
  4. SSM-springMvc配置文件
  5. Mac OS X上安装配置apache服务器
  6. ASP.NET中Url重写后,打不开真正的Html页面
  7. [android] 请求码和结果码的作用
  8. ZOJ-2342 Roads 二分图最小权值覆盖
  9. node.js调用ejs模板,在浏览器上打印出ejs模板内代码的解决方案
  10. 为CheckBoxList每个项目添加一张图片