3

golang -> encoding/gob を使用する場合、次に取得する変数の型を決定したいと考えています。それを行う1つの方法は、列挙型と未知の変数を交互に使用することです。列挙型は次の変数が何であるかを教えてくれます。

ただし、gob-stream は次の変数の型を既に認識しています。(または、少なくともそれは私にとっては十分な名前です。) この例でわかるように:

package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "log"
)

type Vector struct {
    X, Y, Z int
}

func main() {
    var network bytes.Buffer // Stand-in for the network.
    // Create an encoder and send a value.
    enc := gob.NewEncoder(&network)
    err := enc.Encode(Vector{3, 4, 5})
    if err != nil {
        log.Fatal("encode:", err)
    }

    // Create a decoder and receive a value.
    dec := gob.NewDecoder(&network)
    var v interface{}
    err = dec.Decode(&v)
    if err != nil {
        // This will run, outputting:
        // local interface type *interface {} can only be decoded from remote interface type; received concrete type Vector = struct { X int; Y int; Z int; }
        log.Fatal("decode:", err)
    }
    fmt.Println(v)
}

次に取得するものは名前ベクトルを持つ構造体でなければならず、エラーがスローされることがわかります。事前に次のタイプを照会する方法はありますか。(繰り返しますが、明示的に送信しないと、実際には不要なオーバーヘッドが発生します)

4

0 に答える 0