问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

golang 方法返回的结构体为什么取不到地址?

发布网友 发布时间:2022-04-20 08:21

我来回答

1个回答

热心网友 时间:2022-04-10 04:59

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语言为结构体指针专门准备的“->”运算符。

可以使用结构体指针,作为结构体的方法的参数以指代自身吗,

golang 方法返回的结构体为什么取不到地址?

golang方法(method)返回值提取结构体(struct)取不到地址的原因是,①返回值并没有保存到变量中,返回值本身只是临时保存在程序运行的堆栈的某个不确定位置,不能取地址;②实参取地址用的操作符是是&,而形参声明变量类型为指针,需要地址值用的才是*;③声明形参为指针的参数的实参只能为地址值。故先...

golang函数返回值是结构体值的时候,为何不能对成员赋值呢?

1,右值不可赋值 2,函数返回的是右值 getTest()是右值,结构体整体都是右值,右值不可赋值 getTestPoint()返回当然也是右值,但只有指针是右值,即你不能给返回的指针赋值(例如:getTestPoint() = nil),但是可以给指针指向的结构体成员赋值(就像你代码里那样)有右值自然就有左值,左值是可被赋...

golang中返回空结构体可以返回nil吗

不可以,但是结构体指针可以返回nil

golang怎么返回结构体

用golang解析二进制协议时,其实没必要管结构体的字段的对齐规则,何况语言规范也没有规定如何对齐,也就是没有规则。用encoding/binary.Read函数直接读入struct里就行,struct就像c那样写 type Data struct { Size, MsgType uint16 Sequence uint32 // ...} golang编译器加不加padding,Read都能正常...

golang | Go语言入门教程——结构体初始化与继承

直接使用结构体名称,如果不指定参数,会得到一个零值填充的结构体实例。通过在值前加上属性名可以避免混淆。如果需要创建结构体指针,可以在结构体名称前加上取地址符`&`。继承机制 尽管Go语言在面向对象特性上有所简化,许多人认为它在继承方面存在不足。然而,Go的继承实现方式独特,可能与我们通常的...

Golang复制结构体

Golang中复制结构体,可以使用赋值语句 执行结果 可以看出,roger跟mydog在内存中的地址不同。并且对mydog修改属性,对roger没有影响。 但是注意,这里的Dog结构体中的属性,都是值类型。如果是 引用类型 的话,复制的是 指针 ,而不是具体的值。所以通过赋值语句对结构体的拷贝,是 浅拷贝 。如...

Go看源码必会知识之unsafe包

如果要修改其他成员变量,需要进行偏移量计算,才可以对其内存地址修改,所以Offsetof方法就可返回成员变量在结构体中的偏移量,也就是返回结构体初始位置到成员变量之间的字节数。看代码时大家应该要住uintptr的使用,不可以用一个临时变量存储uintptr类型,前面我们提到过用于指针运算,GC不把uintptr当指针,uintptr无法持有...

golang连接池管理tcp?

Golang网络编程丝绸之路-TCP/UDP地址解析 TL;DR在使用Golang编写TCP/UDPsocket的时候,第一步做的就是地址解析。 该函数返回的地址包含的信息如下: TCPAddr里,IP既可以是IPv4地址,也可以是IPv6地址。Port就是端口了。Zone是IPv6本地地址所在的区域。 从返回结果看该函数的参数,network指address的网络类型;address指...

golang数据分析?

Golang内存分配是个相当复杂的过程,其中还掺杂了GC的处理,这里仅仅对其关键数据结构进行了说明,了解其原理而又不至于深陷实现细节。1、Golang程序启动时申请一大块内存并划分成spans、bitmap、arena区域 2、arena区域按页划分成一个个小块。 3、span管理一个或多个页。 4、mcentral管理多个span供线程申请使用 5、mc...

golang 中结构体与字节数组能相互转化么

解码时如下,data为需要解码的字节数组,to为相应的接收结构体,记住to的结构体结构应与被编码的data相一致(这就是gob相对于json的缺陷,解码需要预先知道被解码内容的结构),解码后内容保存在to里面,直接使用to即可 func Decode(data []byte, to interface{}) error { buf := bytes.NewBuffer(data...

怎么把改变的值返回结构体 golang 结构体 golang空结构体 golang结构体序列化 golang结构体初始化 golang结构体继承 golang 内嵌数组结构体赋值 结构体怎么返回 c返回结构体指针
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
尼康24 f1.4 和58 f1.4定焦镜头哪个好蜂鸟论坛 尼康28 85d2.8-4和适马24 70 2.8二代,哪个好? ...尼康14-24 F2.8 这个头要这么大光圈有什么用 开个网吧需要路由器和交换机?这路由器和家用的有什么区别?交换机是用来... 网吧交换机和网吧路由器的区别 南京儿童游乐场有哪些 ...盆栽植物上,将一分枝的叶片套上一个透明的塑料袋,扎紧袋口,一段时间... ...在一株盆栽植物上将一分枝的叶片套上一个透明的塑料袋,扎紧袋... 苹果6开不了机了怎么办啊? 抖音的歌单在哪设置? golang 结构体与error 的问题? GoLang结构体帮忙可以理解是PHP中的数组吗 在Go 语言中,为什么结构体类型可以同时使用指针传... golang函数返回值是结构体值的时候,为何不能对成... golang怎么返回结构体 golang 中结构体与字节数组能相互转化么 go语言中怎么给结构体分配内存 go语言结构体变量和结构体指针变量的区别 go语言怎么判断一个结构体里有几个字段 怎么把MP4转换成ts格式 windows下怎样生成ts和m3u8文件 有什么手机播放器能支持TP跟TS视频格式的? 我用ffmpeg.exe 把视频转换为mpeg2格式,不知道怎... M3U8文件打不开,下载的ts文件也打不开,potplayer... TS格式的视频文件怎么转换成mp4文件。 下载的视频为若干.ts文件,一个m3u8文件,和一个ke... ffmpeg怎么把编码好的h264帧存入ts文件里 如何使用ffmpeg将h264标准码流生成m3u8索引和ts段文件 向bat拖拽进文件夹利用ffmpeg把视频向指定路径切片... 网页视频经过m3u8 技术切片且加密的TS文件在播放时... golang 结构体 字节对齐是怎么样的 golang struct结构体字段类型有哪些 被盗了怎么办怎么找回来? 被盗了,可以找回来嘛 被盗了,也被改了,怎么办? 被盗了,还被对方改了电话号码怎么办? 被盗用了该怎么办 被盗了还改了密码怎么办? 被盗了手机号和密码都被改了怎么办? 被盗了登不上去怎么办怎么找回来? 被盗的怎么找回来 被盗后怎么办 被盗后怎么办 被盗了,没办法找回,怎么办 被盗了怎么办? 被盗了,实名认证被改了。手机号也被改了。... 被盗可以找回来吗? 我的被盗,怎么查出盗号人 我的被盗用了怎么能找回来? 怎样追回被盗的?