go语言的指针和结构体 go语言指针和c++一样吗( 四 )


golang 方法返回的结构体为什么取不到地址?golang方法(method)返回值提取结构体(struct)取不到地址的原因是 , ①返回值并没有保存到变量中,返回值本身只是临时保存在程序运行的堆栈的某个不确定位置,不能取地址;②实参取地址用的操作符是是,而形参声明变量类型为指针,需要地址值用的才是*;③声明形参为指针的参数的实参只能为地址值 。
故先把修改后的代码列出,修改要点是把“*NewPerson1().Speak()”改为“var b=NewPerson1();(b).Speak()” , 同时把“NewPerson2().Speak()”改成“var a=NewPerson2();(a).Speak()”,代码列出如下:
package main;
import "fmt";
type PersonA struct{
name string
}
func (p *PersonA) Speak () {
fmt.Println ( "person speak" ,p.name)
}
func (p PersonA) Walk ( ){
fmt . Println ( "person walk",p.name)}
func NewPerson1()(p PersonA){
return PersonA{"new Person1"}}
func NewPerson2()(p PersonA){
return PersonA{"new Person2"}}
func main () {
var a=NewPerson2 (); (a).Speak ();
a .Walk ();
fmt. Println ("--------------------") ;
var b=NewPerson1 ();(b).Speak ();
b.Walk ()}
go代码调试效果
关于指针变量的使用这一点go语言和其他有指针的程序语言如c语言是一样的,从来只有返回值为地址/指针,而从没有在赋值前给返回值取地址这种运算 , 类似的错误晚点再整理 。
不一样的是,go语言更简单go语言函数可以使用结构体或者结构体的指针(pointer)以传递结构体参数,而且和c语言不一样的是,go语言没有区分结构体指针和结构体访问成员的运算符,go语言只有“.”适用于两种情况,而没有c语言为结构体指针专门准备的“-”运算符 。
可以使用结构体指针,作为结构体的方法的参数以指代自身吗,
go语言结构体变量和结构体指针变量的区别第二个程序,空间都没有分配就初始化赋值,这根本就是在给系统添乱嘛 。
goget请求可以接受结构体么goget请求可以接受结构体 。
接收者是结构体时 , 可以是结构体类型、结构体指针类型 。调用时不区分调用者是结构体还是结构体指针 , go语言会自动转化为对应的结构体或结构体指针 。
go语言的指针和结构体的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言指针和c++一样吗、go语言的指针和结构体的信息别忘了在本站进行查找喔 。

推荐阅读