Go语言中的指针

与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。

Go语言中的指针

但是和C语言不同的是:Go语言中不存在指针的操作,所以只需要记住两个符号:

  1. &:取地址符
  2. *:根据地址取值
package main

import "fmt"

func main() {
	a := 18
	pointerA := &a
	fmt.Println("a's address is", pointerA)
	fmt.Println("a =", *pointerA)
}

指针的类型

指正(pointer)也是有类型的,当指针指向的数据类型是int时,该指针的类型就是*int。同理,当指针指向的数据类型为string时,该指针的类型为*string

func main() {
	a := 18
	pointerA := &a
	b := "abc"
	pointerB := &b
	fmt.Printf("a(%T),b(%T)\n", pointerA, pointerB)
}

指针的初始化

初始化一个指针可是使用new()方法,但是不能直接创建一个*int类型的变量,他的值将会是nil,见下方代码:

	var a *int
	var b = new(int)
	fmt.Printf("a=%v, b=%v\n", a, b)

使用new()方法新建的指针会出创建一块内存空间,并且吧地址赋值给变量

make()和new()的区别

  1. make()new()都是用来申请内存的
  2. new()方法很少用,一般都是用来给基本数据类型申请内存,stringint,...返回的都是对应数据类型的指针(*string*int)
  3. make()是用来给slicemapchan申请内存用的,make()函数返回的是对应这三个类型本身的引用
posted @ 2021-01-29 11:51  FarajMujey  阅读(103)  评论(1)    收藏  举报