欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Golang高性能json包:easyjson

簡介

easyjson是什么呢? 根據(jù)官網(wǎng)介紹,easyjson是提供高效快速且易用的結(jié)構(gòu)體structs<-->json轉(zhuǎn)換包。easyjson并沒有使用反射方式實現(xiàn),所以性能比其他的json包該4-5倍,比golang 自帶的json包快2-3倍。 easyjson目標是維持生成去代碼簡單,以致于它可以輕松地進行優(yōu)化或固定。

成都創(chuàng)新互聯(lián)公司從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元伍家崗做網(wǎng)站,已為上家服務(wù),為伍家崗各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

安裝

go get -u github.com/mailru/easyjson/go install  github.com/mailru/easyjson/easyjsonorgo build -o easyjson github.com/mailru/easyjson/easyjson

驗證是否安裝成功。

$ easyjson
Usage of D:\Code\go\bin\easyjson.exe:
  -all        generate marshaler/unmarshalers for all structs in a file
  -build_tags string        build tags to add to generated file
  -leave_temps        do not delete temporary files
  -lower_camel_case        use lowerCamelCase names instead of CamelCase by default
  -no_std_marshalers        don't generate MarshalJSON/UnmarshalJSON funcs
  -noformat        do not run 'gofmt -w' on output file
  -omit_empty        omit empty fields by default

   string
        specify the filename of the output
  -pkg        process the whole package instead of just the given file
  -snake_case        use snake_case names instead of CamelCase by default
  -stubs        only generate stubs for marshaler/unmarshaler funcs

其中有幾個選項需要注意:

-lower_camel_case:將結(jié)構(gòu)體字段field首字母改為小寫。如Name=>name。  
-build_tags string:將指定的string生成到生成的go文件頭部。  
-no_std_marshalers:不為結(jié)構(gòu)體生成MarshalJSON/UnmarshalJSON函數(shù)。  
-omit_empty:沒有賦值的field可以不生成到j(luò)son,否則field為該字段類型的默認值。-output_filename:定義生成的文件名稱。-pkg:對包內(nèi)指定有`//easyjson:json`結(jié)構(gòu)體生成對應(yīng)的easyjson配置。-snke_case:可以下劃線的field如`Name_Student`改為`name_student`。

使用

記得在需要使用easyjson的結(jié)構(gòu)體上加上//easyjson:json。 如下:

//easyjson:jsontype School struct {    Name string        `json:"name"`
    Addr string        `json:"addr"`}//easyjson:jsontype Student struct {
    Id       int       `json:"id"`
    Name     string    `json:"s_name"`
    School   School    `json:"s_chool"`
    Birthday time.Time `json:"birthday"`}

在結(jié)構(gòu)體包下執(zhí)行

easyjson  -all student.go

此時在該目錄下出現(xiàn)一個新的文件。

// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.package easyjsonimport (
    json "encoding/json"
    easyjson "github.com/mailru/easyjson"
    jlexer "github.com/mailru/easyjson/jlexer"
    jwriter "github.com/mailru/easyjson/jwriter")// suppress unused package warningvar (
    _ *json.RawMessage
    _ *jlexer.Lexer
    _ *jwriter.Writer
    _ easyjson.Marshaler)func easyjsonB83d7b77DecodeStudygoEasyjson(in *jlexer.Lexer, out *Student) {
    isTopLevel := in.IsStart()    if in.IsNull() {        if isTopLevel {            in.Consumed()
        }        in.Skip()        return
    }    in.Delim('{')    for !in.IsDelim('}') {
        key := in.UnsafeString()        in.WantColon()        if in.IsNull() {            in.Skip()            in.WantComma()            continue
        }        switch key {        case "id":            out.Id = int(in.Int())        case "s_name":            out.Name = string(in.String())        case "s_chool":
            easyjsonB83d7b77DecodeStudygoEasyjson1(in, &out.School)        case "birthday":            if data := in.Raw(); in.Ok() {                in.AddError((out.Birthday).UnmarshalJSON(data))
            }        default:            in.SkipRecursive()
        }        in.WantComma()
    }    in.Delim('}')    if isTopLevel {        in.Consumed()
    }
}func easyjsonB83d7b77EncodeStudygoEasyjson(out *jwriter.Writer, in Student) {    out.RawByte('{')
    first := true
    _ = first    if !first {        out.RawByte(',')
    }
    first = false
    out.RawString("\"id\":")    out.Int(int(in.Id))    if !first {        out.RawByte(',')
    }
    first = false
    out.RawString("\"s_name\":")    out.String(string(in.Name))    if !first {        out.RawByte(',')
    }
    first = false
    out.RawString("\"s_chool\":")
    easyjsonB83d7b77EncodeStudygoEasyjson1(out, in.School)    if !first {        out.RawByte(',')
    }
    first = false
    out.RawString("\"birthday\":")    out.Raw((in.Birthday).MarshalJSON())    out.RawByte('}')
}// MarshalJSON supports json.Marshaler interfacefunc (v Student) MarshalJSON() ([]byte, error) {
    w := jwriter.Writer{}
    easyjsonB83d7b77EncodeStudygoEasyjson(&w, v)    return w.Buffer.BuildBytes(), w.Error
}// MarshalEasyJSON supports easyjson.Marshaler interfacefunc (v Student) MarshalEasyJSON(w *jwriter.Writer) {
    easyjsonB83d7b77EncodeStudygoEasyjson(w, v)
}// UnmarshalJSON supports json.Unmarshaler interfacefunc (v *Student) UnmarshalJSON(data []byte) error {
    r := jlexer.Lexer{Data: data}
    easyjsonB83d7b77DecodeStudygoEasyjson(&r, v)    return r.Error()
}// UnmarshalEasyJSON supports easyjson.Unmarshaler interfacefunc (v *Student) UnmarshalEasyJSON(l *jlexer.Lexer) {
    easyjsonB83d7b77DecodeStudygoEasyjson(l, v)
}func easyjsonB83d7b77DecodeStudygoEasyjson1(in *jlexer.Lexer, out *School) {
    isTopLevel := in.IsStart()    if in.IsNull() {        if isTopLevel {            in.Consumed()
        }        in.Skip()        return
    }    in.Delim('{')    for !in.IsDelim('}') {
        key := in.UnsafeString()        in.WantColon()        if in.IsNull() {            in.Skip()            in.WantComma()            continue
        }        switch key {        case "name":            out.Name = string(in.String())        case "addr":            out.Addr = string(in.String())        default:            in.SkipRecursive()
        }        in.WantComma()
    }    in.Delim('}')    if isTopLevel {        in.Consumed()
    }
}func easyjsonB83d7b77EncodeStudygoEasyjson1(out *jwriter.Writer, in School) {    out.RawByte('{')
    first := true
    _ = first    if !first {        out.RawByte(',')
    }
    first = false
    out.RawString("\"name\":")    out.String(string(in.Name))    if !first {        out.RawByte(',')
    }
    first = false
    out.RawString("\"addr\":")    out.String(string(in.Addr))    out.RawByte('}')
}

現(xiàn)在可以寫一個測試類啦。

package mainimport (    "studygo/easyjson"
    "time"
    "fmt")func main(){
    s:=easyjson.Student{
        Id: 11,
        Name:"qq",
        School:easyjson.School{
            Name:"CUMT",
            Addr:"xz",
        },
        Birthday:time.Now(),
    }
    bt,err:=s.MarshalJSON()
    fmt.Println(string(bt),err)
    json:=`{"id":11,"s_name":"qq","s_chool":{"name":"CUMT","addr":"xz"},"birthday":"2017-08-04T20:58:07.9894603+08:00"}`
    ss:=easyjson.Student{}
    ss.UnmarshalJSON([]byte(json))
    fmt.Println(ss)
}

運行結(jié)果:

{"id":11,"s_name":"qq","s_chool":{"name":"CUMT","addr":"xz"},"birthday":"2017-08-04T20:58:07.9894603+08:00"} <nil>
{121  {CwwwwwwwUMT xzwwwww} 2017-08-04 20:52:03.4066002 +0800 CST}

新聞標題:Golang高性能json包:easyjson
標題鏈接:http://aaarwkj.com/article32/pcdgsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、服務(wù)器托管、手機網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作小程序開發(fā)、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
亚洲精品色在线网站国产呦| 色综合色综合蘑菇在线| 少妇肥臀一区二区三区| 成人黄色18免费网站| 最新91精品手机国产在线| 欧美日韩免费爱爱视频| 日韩不卡的在线视频| 亚洲 欧美 日韩一区| 亚洲国产精品视频中文字幕| 午夜免费视频观看在线| 亚洲一区二区日韩综合久久| 欧洲亚洲国产一区二区| 日本在线高清精品人妻| 最新日本免费久久精品| 日韩精品视频播放一区| 亚洲成人福利免费网站| 日韩中文字幕视频久久| 高清国语对白刺激av在线播放| 国产一区二区伦理视频| 国产经典午夜福利在线| 免费可以看的黄片欧美| 亚洲精品成人久久网| 欧美日韩一区二区黄色| 亚洲淫婷婷久久一区二区| 九色综合狠狠综合久久| 欧美日韩一级特黄大片| 国产一级二级三级久久| 黄色午夜福利在线观看| 东京热男人的av天堂| 亚洲天堂日韩欧美在线| 精品亚洲一区二区三区四| 亚洲男人天堂最新地址| 日本不卡不码高清免费| 国产精品伊人久久综合网| 综合久久—本道中文字幕| 一本色道av久久精品+| 久久日韩精品人妻一区二区| 亚洲女优中文字幕在线免费| 日韩色欧美色国产精品| 婷婷91麻豆精品国产人妻| 丰满肥臀熟女高清区二区|