Go语言中,什么情况下,变量名可以作为指针使用

Go语言中,什么情况下,变量名可以作为指针使用

问题分析:

变量名 a 可以等同于 &a 使用,具体使用情况如下:

(图太乱,大家不要直接看图,请结合下文说明再看图)

在这里插入图片描述
图中共有两处混用的地方

第一处

即由蓝色笔到蓝色笔的调用,程序中的 string 方法是与 *Student 类型绑定,即与结构体 Student 的地址绑定,在 main 调用 string 方法时,就应该用 (&stu).string()

但是程序中却直接使用了 stu.string() 来进行调用,原理上会出错,但实际上却没有

这是因为在编译器底层,为 stu.string() 进行了取地址(&stu).string() 的操作,使得编写方便,同时使程序正常运行

第二处

即由蓝色笔到红色笔的调用,方法中的 stu 是指针类型

正常的取值操作是 (*stu).Name,而stu.Name 无法将值取出,但实际上却可以

这也是因为在编译器底层,为 stu.Name 进行了取值 (*stu).Name 的操作,使得编写方便,同时使程序正常运行

代码如下:

package main

import (
	"fmt"
)

type Student struct{
	Name string
	Age int
}

func (stu *Student)string() string{
	str := fmt.Sprintf("stu.Name = [%v],stu.Age = [%v]",
	stu.Name,stu.Age)
	return str
}

func main(){
	
	stu := Student{
		Name :"tom",
		Age :15,
	}
	fmt.Println(&stu)
	stu01 := stu.string()
	fmt.Println(stu01)
}

以上是可以将变量名与指针混用的情况,如果还有其他请各位补充

(混用太顶了)

==========================================================(分割线)

以下是我以为可以混用,却不行的情况

是将方法嵌套在接口的情况

在这里插入图片描述
上图中画星星的地方必须是指针类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值