empty struct as receiver in method

Viewed 49

what is the benefit of using empty struct Asn1 here? Moreover, we are using receiver "a" in Encode() and Decode() methods, but never used in those. So what is the use here?

type Asn1 struct {} // empty struct

func (a *Asn1) Encode(message RmrPayload) ([]byte, error) {
        buffer := new(bytes.Buffer)
        asn1 := gob.NewEncoder(buffer)
        if err := asn1.Encode(message); err != nil {
                return nil, err
  }
        return buffer.Bytes(), nil 
}

func (a *Asn1) Decode(data []byte) (RmrPayload, error) {
  message := new(RmrPayload)
  buffer := bytes.NewBuffer(data)
        asn1 := gob.NewDecoder(buffer)
        if err := asn1.Decode(message); err != nil {
                return RmrPayload{}, err 
  }
        return *message, nil 
}

making it receiver makes complicated calling Encode() and Decode() method like below

  asn1 := new(Asn1)
  message, err := asn1.Decode(payload)

why we can not define these two methods without empty struct and call simply as

message, err := Decode(payload)
1 Answers

The main reason to define methods on an empty struct is to satisfy an interface. Bare functions cannot be used this way.

Related