Go 指针和接口 - Go语言中文社区

Go 指针和接口


指针

指针是存储变量内存地址的变量,表达了这个变量在内存存储的位置。

我们常说:指针指向了变量。

Go中指针变量类型为*T,指向一个T类型的变量。

通过&操作符用于获取一个变量的地址。

b := 255 //声明变量
var a *int = &b // 通过&b获取变量地址,指针变量a指向了b,a值是b的地址

获取指针指向变量的值

  • &b是获取变量b的地址。
  • a = &b,将a指针指向b。
  • 通过*a获取指针指向变量的值,我们叫反解引用

函数使用传递指针参数

我们经常有类似的需求:

func change(val *int){
	*val = 55
}

看个复杂的例子:

a := 58 //变量a赋值 a=58
b := &a // b指向a,b存储了变量a的地址
change(b) //方法接受一个指针变量,在方法中进行反解,并赋值为55
// a此时被修改为55

我们可以把一个数组通过指针传递传入一个方法,但是理解起来比较复杂,不是Go推荐的写法,这种情况通常采用切片来处理。

func modify(sis []int){
	sls[0] = 90
}

func main(){
	a := [3]int{89,90,91}
	modify(a[:])
	// 输出90,90,91
}

所以这种场景还是传递切片吧。

接口

接口常用的目的是:定义一个对象的行为。

Go中,当一个类型定义了接口中的所有方法,此类型就实现了该接口。

type SalaryCalculator interface{
	CalculateSalary() int
}

type Permanent struct{
	empId int
	basicpay int
	pf int
}

type Contract struct{
	empId int
	basic pay int
}

func (p Permanent) CalculateSalary() int{
	return p.basicpay + p.pf
}

func (c Contract) CalculateSalary() int{
	return c.basicpay
}

空接口

没有包含方法的接口称为空接口,空接口表示为interface{},所有类型都实现了空接口。

Func findType(I interface{}){
	switch I.(type) // 通过这种方法获取空接口对应的类型
}

接口的指针接收者

type Describer interface{
	Describe()
}

type Address struct{
	state string
	country string
}

func (a *Address) Describe(){
// 一个指针接受者
}

转载于:https://my.oschina.net/u/1000241/blog/2249364

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_34194702/article/details/92073420
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-14 10:55:31
  • 阅读 ( 1034 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢