结构方法正在设置字段但它们不是 "saved"?
Struct method is setting field but they are not being "saved"?
我知道标题令人困惑,对我来说也是如此,因为它说我有从字节缓冲区解码二进制数据的数据包,每个数据值都设置为结构的特定字段。首先,我创建了一个该类型的新结构并调用 "Decode" 方法:
text := packets.NewTextPacket()
text.Buffer = bytes
text.DecodeHeader()
text.Decode()
问题是我特意调用了"Decode"这个方法,你可以看看它做了什么:
func (pk TextPacket) Decode() {
pk.TextType = pk.GetByte()
pk.Translation = pk.GetBool()
switch pk.TextType {
case Raw, Tip, System:
pk.Message = pk.GetString()
break
case Chat, Whisper, Announcement:
pk.Source = pk.GetString()
pk.SourceThirdParty = pk.GetString()
pk.SourcePlatform = pk.GetVarInt()
pk.Message = pk.GetString()
break
case Translation, Popup, JukeboxPopup:
pk.Message = pk.GetString()
c := pk.GetUnsignedVarInt()
for i := uint32(0); i < c; i++ {
pk.Params = append(pk.Params, pk.GetString())
}
break
}
pk.Xuid = pk.GetString()
pk.PlatformChatId = pk.GetString()
}
当我在 func (pk TextPacket) Decode()
中打印 pk.Message
时,它显示了正确的字符串,但在 text.Decode()
之后打印为 text.Message
,它显示了设置的默认值首先创建结构,它是一个空字符串,所有其他字段也是如此,例如 text.TextType
,等等
您正在使用值接收器,因此该方法修改了对象的副本。
尝试更改为指针接收器:pk *TextPacket
查看 Go 之旅以获得简洁明了的解释:https://tour.golang.org/methods/4
我知道标题令人困惑,对我来说也是如此,因为它说我有从字节缓冲区解码二进制数据的数据包,每个数据值都设置为结构的特定字段。首先,我创建了一个该类型的新结构并调用 "Decode" 方法:
text := packets.NewTextPacket()
text.Buffer = bytes
text.DecodeHeader()
text.Decode()
问题是我特意调用了"Decode"这个方法,你可以看看它做了什么:
func (pk TextPacket) Decode() {
pk.TextType = pk.GetByte()
pk.Translation = pk.GetBool()
switch pk.TextType {
case Raw, Tip, System:
pk.Message = pk.GetString()
break
case Chat, Whisper, Announcement:
pk.Source = pk.GetString()
pk.SourceThirdParty = pk.GetString()
pk.SourcePlatform = pk.GetVarInt()
pk.Message = pk.GetString()
break
case Translation, Popup, JukeboxPopup:
pk.Message = pk.GetString()
c := pk.GetUnsignedVarInt()
for i := uint32(0); i < c; i++ {
pk.Params = append(pk.Params, pk.GetString())
}
break
}
pk.Xuid = pk.GetString()
pk.PlatformChatId = pk.GetString()
}
当我在 func (pk TextPacket) Decode()
中打印 pk.Message
时,它显示了正确的字符串,但在 text.Decode()
之后打印为 text.Message
,它显示了设置的默认值首先创建结构,它是一个空字符串,所有其他字段也是如此,例如 text.TextType
,等等
您正在使用值接收器,因此该方法修改了对象的副本。
尝试更改为指针接收器:pk *TextPacket
查看 Go 之旅以获得简洁明了的解释:https://tour.golang.org/methods/4