我正在從文件中讀取 json 數(shù)據(jù)并使用 gob 編碼將其發(fā)送到遠(yuǎn)程服務(wù)器,但我對(duì)我的代碼不滿意,我嘗試了幾種方法來獲得更通用的功能,但我失敗了,唯一的方法我的代碼對(duì)每種類型都具有相同的功能。我嘗試使用 switch 類型,但以同樣的方式需要重復(fù)代碼以解組和編碼 gob 數(shù)據(jù)拜托,有人可以幫助我了解如何改進(jìn)嗎?兩種類型:type Data1 struct{ID intMessage string}type Data2 struct{ Serial int Height float64 Loss float64 Temp float64 Oil float64}Data1 類型的函數(shù)func SenderData1(address string, buff *filebuffer.Buffer) { var conn net.Conn var err error var line string var obj Data1 for { line, err = buff.Pop() if err != nil { log.Critical("Error Poping:", err.Error()) continue } if len(line) == 0 { time.Sleep(1 * time.Second) continue } if err := json.Unmarshal([]byte(line), &obj); err != nil { log.Critical("Error Unmarshaling:", err.Error()) continue } for { log.Info("Trying to connect with Server...") conn, err = net.Dial(PROTO, address) // If err try to connect again if err != nil { log.Error("Error connecting:", err.Error()) time.Sleep(1 * time.Second) continue } // If connected break the loop break } log.Debug("Sending ", obj, " to:", address) encoder := gob.NewEncoder(conn) err := encoder.Encode(obj) if err != nil { log.Critical("Error Encoding Gob:", err.Error()) } // Timer between every sending, ie. Reading from buffer time.Sleep(300 * time.Millisecond) conn.Close() }}
- 1 回答
- 0 關(guān)注
- 168 瀏覽
添加回答
舉報(bào)
0/150
提交
取消