如何使用 gob.Encoder() 定义带有 interface{} 的 Send/Receive 函数
How to define a Send/Receive Function with interface{} using gob.Encoder()
我需要使用 gob
包定义 Send/Receive
函数。
我简单定义了Send()
如下:
func Send(enc *gob.Encoder, PKG interface{}) error {
err := enc.Encode(PKG)
return err
}
和Receive
如下:
func Receive(dec *gob.Decoder) (PKG interface{}) {
err := dec.Decode(PKG)
if err != nil {
fmt.Println(PKG)
Errors.Error(err, "Error receiving Package")
}
if PKG == nil {
fmt.Println(PKG)
Errors.Error(err, "Receiving empty Package")
}
return PKG
}
我将这些函数与各种类型一起使用:结构、具体类型、iota...我用来在调用 Receive
方法后立即检查接收到的类型。
但是,不幸的是,我没有到达检查断点。这些方法 (Send/Receive
) 定义错误。尽管所有发送的项目都已导出,但我在接收方收到了一个 <nil>
指针 (panic: Receiving empty Package
)。
目前,我正在尝试发送以下定义类型的 int
:
type ProcessType int
const (
COORDINATOR ProcessType = iota
SENDER
NORMALPROCESS
)
我已经阅读了很多文档,但无法彻底理解问题所在。能否请您提供一个简洁明了的解释。
通过&PKG
进行编码和解码:
func Send(enc *gob.Encoder, PKG interface{}) error {
// Pass &PKG to force encoder to send PKG as a dynamic value.
err := enc.Encode(&PKG)
return err
}
func Receive(dec *gob.Decoder) (PKG interface{}) {
// Pass address of result.
err := dec.Decode(&PKG)
if err != nil {
fmt.Println(PKG)
log.Fatal(err, "Error receiving Package")
}
if PKG == nil {
fmt.Println(PKG)
log.Fatal(err, "Receiving empty Package")
}
return PKG
}
解码端应gob.Register 传递给发送的所有可能类型的值。将此代码用于 iota 示例:
gob.Register(COORDINATOR) // any value of type ProcessType works.
我需要使用 gob
包定义 Send/Receive
函数。
我简单定义了Send()
如下:
func Send(enc *gob.Encoder, PKG interface{}) error {
err := enc.Encode(PKG)
return err
}
和Receive
如下:
func Receive(dec *gob.Decoder) (PKG interface{}) {
err := dec.Decode(PKG)
if err != nil {
fmt.Println(PKG)
Errors.Error(err, "Error receiving Package")
}
if PKG == nil {
fmt.Println(PKG)
Errors.Error(err, "Receiving empty Package")
}
return PKG
}
我将这些函数与各种类型一起使用:结构、具体类型、iota...我用来在调用 Receive
方法后立即检查接收到的类型。
但是,不幸的是,我没有到达检查断点。这些方法 (Send/Receive
) 定义错误。尽管所有发送的项目都已导出,但我在接收方收到了一个 <nil>
指针 (panic: Receiving empty Package
)。
目前,我正在尝试发送以下定义类型的 int
:
type ProcessType int
const (
COORDINATOR ProcessType = iota
SENDER
NORMALPROCESS
)
我已经阅读了很多文档,但无法彻底理解问题所在。能否请您提供一个简洁明了的解释。
通过&PKG
进行编码和解码:
func Send(enc *gob.Encoder, PKG interface{}) error {
// Pass &PKG to force encoder to send PKG as a dynamic value.
err := enc.Encode(&PKG)
return err
}
func Receive(dec *gob.Decoder) (PKG interface{}) {
// Pass address of result.
err := dec.Decode(&PKG)
if err != nil {
fmt.Println(PKG)
log.Fatal(err, "Error receiving Package")
}
if PKG == nil {
fmt.Println(PKG)
log.Fatal(err, "Receiving empty Package")
}
return PKG
}
解码端应gob.Register 传递给发送的所有可能类型的值。将此代码用于 iota 示例:
gob.Register(COORDINATOR) // any value of type ProcessType works.