亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 map golang 中使用不同的結構作為值

在 map golang 中使用不同的結構作為值

Go
慕桂英4014372 2023-05-08 15:09:42
有什么辦法可以創建一個映射到多個結構中,然后使用它嗎?我有幾個不同的結構,它們實現相同的接口并為每個結構匹配輸入類型。我想從不同的輸入中讀取數據到結構中——在編譯時不知道輸入類型。type myInput struct {    InputType  string    data       []bytes}// Will get as an input after compeleationinputs := []myInput{    myInput{InputType: "a", data: []bytes{0x01, 0x02, 0x03}},    myInput{InputType: "b", data: []bytes{0x01, 0x02}},}type StructA struct {   A uint16   B uint32}func (a StructA) name () {    fmt.Printf("name is: %d %d", a.A, a.B)}type StructB struct {   C uint32}func (b StructB) name () {    fmt.Printf("name is: %d", b.C)}AorB map[string]<???> {    "a": StructA,    "b": StructB,}在這一點上,我不知道該怎么辦。我需要通過輸入類型獲取正確的結構并使用初始化結構binary.Read。for _, myInput := range (inputs) {    // ???? :(    myStruct := AtoB[myInput.InputType]{}    reader :=bytes.NewReader(input1)    err := binary.Read(reader, binary.BigEndian, &myStruct)    fmt.Printf(myStruct.name())}謝謝!
查看完整描述

1 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

定義一個接口


type Bin interface {

    name() string

    set([]byte) // maybe returning error

}

你將Bin只處理 s 。


type StructA struct { /* your code so far */ }

type StructB struct { /* your code so far */ }


func (a *StructA) set(b []byte) {

    a.A = b[0]<<8 + b[1] // get that right, too lazy to code this for you

    a.B = b[2]<<24 + b[3]<<16 + ...  

}

// same for StructB

所以你的 StructA/B 現在是 Bins。


func makeBin(in myInput) Bin {

     var bin Bin

     if in.InputType == "a" {

         bin = &StructA{}

     } else {

         bin = &StructB{}

     }

     bin.set(in.data) // error handling?

     return bin

}

if如果您有兩種以上的類型:如果一個或制作一個微型注冊表(反映),請改用開關。


查看完整回答
反對 回復 2023-05-08
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號