加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang-encoding模块学习

发布时间:2020-12-16 19:13:53 所属栏目:大数据 来源:网络整理
导读://Golang中encoding的用法 package main import ( "bytes" "encoding/binary" "encoding/hex" "encoding/xml" "fmt" "os" ) func goxml() { type Address struct { City,State string } //xml元素节点增加属性,需要重新定制结构体 type ElementWithAttr str
//Golang中encoding的用法 package main

import (
       "bytes"  "encoding/binary"  "encoding/hex"  "encoding/xml"  "fmt"  "os" )

func goxml() {
       type Address struct {
              City,State string
       }

       //xml元素节点增加属性,需要重新定制结构体  type ElementWithAttr struct{
              AttrOne string `xml:"attrone,attr"`  AttrTwo string `xml:"attrtow,attr"`  }

       type Person struct {
              XMLName   xml.Name `xml:"person"`  Id        int     `xml:"id,attr"`  Sex       string  `xml:"sex,attr"`  FirstName string  `xml:"name>first"`  LastName  string  `xml:"name>last"`  Age       int     `xml:"age"`  Height    float32 `xml:"height,omitempty"`  EWA       ElementWithAttr `xml:elementwithattr`  //这里写子节点或者属性的时候(凡是不是一个单独字符串),必须使用""来进行包封,否则反射的时候认不出来  EWAChild  string `xml:"elementwithattr>ewachild"`  Married   bool
              Address
              Comment string `xml:",comment"`  }

       v := &Person{Id: 13,FirstName: "John",LastName: "Doe",Age: 42,Sex:"Female"}
       v.Comment = " Need more details. "  v.Address = Address{"Hanga Roa","Easter Island"}
       v.EWA = ElementWithAttr{"AttribteOne","AttributeTwo"}
       v.EWAChild = "ElementWithAttrChildNode"   enc := xml.NewEncoder(os.Stdout)
       enc.Indent(" "," ")
       if err := enc.Encode(v); err != nil {
              fmt.Printf("error: %vn",err)
       }
}

func main() {
       pi := 3.1415926
       buf := bytes.Buffer{}
       //使用的是小编码,低地址对应低字节  binary.Write(&buf,binary.LittleEndian,&pi)
       //常量浮点数默认是float64  fmt.Printf("buf=%#vn",buf.Bytes())

       var rpi float64
       binary.Read(&buf,&rpi)
       fmt.Printf("rpi=%#vn",rpi)

       //和python的binascii库的作用一样,16进制和ascii字符之间的转换  src := "Go is good language!我们都一样"  //根据编码后长度来分配缓存空间  dst := make([]byte,hex.EncodedLen(len(src)))
       hex.Encode(dst,[]byte(src))
       fmt.Printf("dst=%vn",dst)
       fmt.Printf("dst(hex)=%sn",string(dst))

       //根据解码长度来分配缓存空间  dst2 := make([]byte,hex.DecodedLen(len(dst)))
       hex.Decode(dst2,dst)
       fmt.Printf("dst2=%vn",dst2)
       fmt.Printf("dst2.(string)=%sn",string(dst2))

       goxml()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读