文档章节

Go基础知识学习(5) 指针,new, make

michaelpan
 michaelpan
发布于 2014/08/08 17:45
字数 388
阅读 94
收藏 0

##指针,new , make的使用场景 Golang的指针是没有++和--操作的,*运算和&运算和C一致 Golang的new创建是返回的是指针,var返回的0值变量 Golang结构体的初始化,结构体变量的复合初始化,结构体指针的成员初始化 Golang make仅仅可以创建slice map channel 而且返回的不是指针

内存分配: Go有两个内存分配原语 new 和 make,他们应用于不同的类型。内建函数new本质上和其他语言的new一样, new(T)分配了零值填充的T类型的内存空间,返回一个指针,即T类型的值。 而make不同,它使用make内建函数而且目前仅能创建slice、map、channel,它返回的是类型T,不是T.

##代码

package main

import (
	"fmt"
)

type City struct {
	name string
	code int
}

func main() {
	// pointer
	i := 10
	p := &i
	fmt.Println(i)
	fmt.Println(p)
	fmt.Println(*p)
	*p = 20
	fmt.Println(i)
	fmt.Println(p)
	fmt.Println(*p)

	//new var is diff
	var c1 City
	c2 := new(City)
	fmt.Println(c1) //it is city
	fmt.Println(c2) //it is address of city

	//init
	c3 := City{name: "hangzhou", code: 310000}
	c4 := new(City)
	c4.name = "shanghai"
	c4.code = 330000
	fmt.Println(c3) //it is city
	fmt.Println(c4) //it is pointer of city

	//make only create slice 、map 、channel
	//there are not pointer
	s := make([]int, 10, 20)
	fmt.Println(s, len(s), cap(s))
	m := make(map[int]string)
	m[10] = "Google"
	m[19] = "Microsoft"
	fmt.Println(m)
}

##output

10
0xc084000038
10
20
0xc084000038
20
{ 0}
&{ 0}
{hangzhou 310000}
&{shanghai 330000}
[0 0 0 0 0 0 0 0 0 0] 10 20
map[10:Google 19:Microsoft]

##获取代码: https://github.com/panyingyun/gostudy/blob/master/exp7.go

© 著作权归作者所有

共有 人打赏支持
michaelpan
粉丝 4
博文 33
码字总数 9970
作品 0
杭州
高级程序员
私信 提问
【原创翻译】深度剖析Go数据结构

当向一个新程序员解释Go语言时,我发现如果解释Go的数据是如何在内存中表示的,将有助于建立编写高效程序的良好直觉。 基础类型 让我们从一些简单的例子开始: 变量i是int类型,在内存中占用...

zingscript
2014/01/21
592
3
『Go 语言学习专栏』-- 第十二期

大家好,我叫谢伟,是一名程序员。 如何你想要寻找一份和编程相关的职位,经验不太够的话,面试官会考察你什么? 基础,比如你对某编程语言的理解程度 学习能力,即如何展现你的学习能力 本节...

谢小路
2018/06/03
0
0
史上最全面的C语言的学习路线及方法

UNIX下C语言的学习路线。 工具篇 “公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工...

stone15165
2018/04/18
0
0
c++基础知识

1 在c++中是不允许数组作为函数的返回值的 int [] someFunction( ); //ILLEGAL 要想实现函数返回一个数组,那返回对应数组里面类型的指针 you must return a pointer to the array base type...

一叶舟troy
2015/09/12
145
0
iOS狂暴之路(开始篇)---学习路线总结

一、学习路线规划 现如今移动端的两大平台Android和iOS是风光无限,但是又有谁能够保证这两个平台能够昌盛一辈子呢?谁也不敢保证其中一个在未来几年之后就会成为第二个诺基亚,所以我们现在...

jiangwei0910410003
2016/09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

维信小程序button样式重写

一、小程序button默认按钮样式重写 以primary按钮为例: /**重写默认按钮样式**/button[type='primary'] {background: red;padding: 5px 0px;line-height: 30px;font-size: 14px;......

tianma3798
34分钟前
1
0
使用async和await封装vue中的http请求

实际需求中经常会碰到想异步请求代码写的像同步一样简洁,解决回调地狱,这是最近封装的一个。 // import qs from 'qs';import axios from 'axios'import utils from './util'import { To......

chinahufei
42分钟前
1
1
python中类方法和静态方法区别

面相对象程序设计中,类方法和静态方法是经常用到的两个术语。 逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用。 在C++中,静态方法与类方法逻辑上是等价的,只有一...

Linux就该这么学
47分钟前
2
0
5G是现实的狂欢还是骨感?

“4G改变生活,5G改变社会。” 这一句充满无限遐想的口号,因2019年世界移动大会(MWC2019)召开带来的产业最前沿动态,让观察者、消费者产生梦想照进现实的感觉。OPPO、小米、华为、三星、LG、...

linuxCool
50分钟前
2
0
Codis的dashboard异常退出后,重新启动报异常的处理方法

dashboard是codis的核心组建,所有集群相关的操作都是通过dashboard进行的。如果dashboard出现宕机、服务被杀掉等极端情况,则会导致codis集群无法使用。 1)codis集群维护时,需要关闭dashb...

linxyz
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部