golang struct to buf

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

struct to buf

package mainimport ("bytes""encoding/binary""reflect""io""errors""fmt")func writeBuf(w io.Writer,v reflect.Value) (n int, err error){newBuf := bytes.NewBuffer(nil)for i := 0; i < v.NumField(); i++ {switch v.Field(i).Type().Kind() {case reflect.Struct:n,err := writeBuf(newBuf,v.Field(i))if err != nil {return n,err}case reflect.Bool:boolByte := []byte{0}if v.Field(i).Bool() {boolByte = []byte{1}}newBuf.Write(boolByte)case reflect.String:newBuf.WriteString(v.Field(i).String())case reflect.Slice:newBuf.Write(v.Field(i).Bytes())case reflect.Int:binary.Write(newBuf, binary.LittleEndian,int32(v.Field(i).Int()))case reflect.Uint:binary.Write(newBuf, binary.LittleEndian, uint32(v.Field(i).Uint()))case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:binary.Write(newBuf, binary.LittleEndian, v.Field(i).Interface())}}return w.Write(newBuf.Bytes())}func WriteStructToBuffer(w io.Writer ,data interface{}) ( error ) {v := reflect.Indirect(reflect.ValueOf(data))if v.Kind() == reflect.Struct {fmt.Println("test")_,err := writeBuf(w,v)return err}return errors.New("invalid type Not a struct")}func StringFixedLength(s string, length int) []byte {sLength := len(s)if sLength >= length {return []byte(s[:length])} else {b := make([]byte, length-sLength)return append([]byte(s), b...)}return nil}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.