No se pueden enviar datos de gob a través de TCP en la programación de Go

Tengo una aplicación de servidor cliente, usando conexión TCP

Cliente:

type Q struct {
    sum int64
}

type P struct {
    M, N int64
}

func main() {
    ...
    //read M and N
    ...
    tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
    ...
    var p P
    p.M = M
    p.N = N
    err = enc.Encode(p)
}

Servidor:

type Q struct {
    sum int64
}

type P struct {
    M, N int64
}

func main() {
    ...
    tcpAddr, err := net.ResolveTCPAddr("ip4", service)
    listener, err := net.ListenTCP("tcp", tcpAddr)
    ...
    var connB bytes.Buffer
    dec := gob.NewDecoder(&connB)
    var p P
    err = dec.Decode(p)
    fmt.Printf("{%d, %d}\n", p.M, p.N)
}

El resultado en el servicio es {0, 0} porque no sé cómo obtener unbytes.Buffer variable desdenet.Conn.

¿Hay alguna manera de enviar variables de gob a través de TCP?

Si es verdad, ¿cómo se puede hacer esto? ¿O hay alguna alternativa en el envío de números a través de TCP?

Cualquier ayuda o código de muestra sería realmente apreciado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta