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)
}
以上是可以将变量名与指针混用的情况,如果还有其他请各位补充
(混用太顶了)
==========================================================(分割线)
以下是我以为可以混用,却不行的情况
是将方法嵌套在接口的情况:
上图中画星星的地方必须是指针类型