返回
北京兄弟连IT
置顶
该校与厚学网暂未合作,平台不保证课程的真实有效性,如有侵权等争议,请及时与厚学网联系处理
招生热线:400-656-1390

学校地址:北京市昌平区回龙观文华西路育荣教育园区兄弟连IT教育

兄弟连Go语言分享之Struct Tag

97 2018-08-23 14:28:06

学习笔记

  Go语言经过十余年的发展,已成为流行的新兴语言。目前,Go语言已成为云计算领域的选语言,且随着近几年区块链的流行,作为底层开发语言的Go再次火爆成为区块链领域编程语言,IBMFabic等重量级的区块链项目都是基于Go语言开发的。

 

  殊不知,Go语言可开发的应用项目还有很多。除云计算、区块链等开源项目外,还包含Devops、人工智能、游戏、存储引擎、Web、系统/命令行工具、中间件、测试/持续交付、文件系统等各方面的开源项目。

 

SON字符串和Struct类型相互转换

JSON字符串对象转换

 

func main() {

    var u User

    h:=`{"name":"张三","age":15}`

    err:=json.Unmarshal([]byte(h),&u)    

    if err!=nil{

        fmt.Println(err)

    }else {

        fmt.Println(u)

    }

}

type User struct{

    Name string `name`

    Age int `age`

}

 

上面这个例子就是Json字符串转User对象的例子,这里主要利用的就是User这个结构体对应的字段Tagjson解析的原理就是通过反射获得每个字段的tag,然后把解析的json对应的值赋给他们。

 

利用字段Tag不光可以把Json字符串转为结构体对象,还可以把结构体对象转为Json字符串。

 

 newJson,err:=json.Marshal(&u)

 fmt.Println((string(newJson)))

 

接着刚刚的例子,这样就可以转为一个新的字符串了,通过打印输出,可以看到和开始输入的字符串一样。

 

反射获取字段Tag

 

字段的Tag是标记到字段上的,所以我们可以通过先获取字段,然后再获取字段上的Tag

 

func main() {

    var u User

 

    t:=reflect.TypeOf(u)    

    for i:=0;i

        sf:=t.Field(i)

        fmt.Println(sf.Tag)

    }

}

 

获取字段上一篇我们提到过,获取字段后,调用.Tag就获取到对应的Tag字段了。

 

字段Tag的键值对

 

很多时候我们的一个Struct不止具有一个功能,比如我们需要JSON的互转、还需要BSON以及ORM解析的互转,所以一个字段可能对应多个不同的Tag,以便满足不同的功能场景。

 

Go Struct 为我们提供了键值对的Tag,来满足我们以上的需求。

 

func main() {

    var u User

    t:=reflect.TypeOf(u)    

    for i:=0;i

        sf:=t.Field(i)

        fmt.Println(sf.Tag.Get("json"))

    }

}

type User struct{

    Name string `json:"name"`

    Age int `json:"age"`

}

 

以上的例子,使用了键值对的方式配置Struct TagKey-Value以冒号分开,这里的Keyjson,所以我们可以通过这个Key获取对应的值,也就是通过.Tag.Get("json"))方法。Get方法就是通过一个Key获取对应的tag设置。

 

除此之外,我们还可以设置多个Key,来满足我们上面说的场景。

 

func main() {

    var u User

    t:=reflect.TypeOf(u)    

    for i:=0;i

        sf:=t.Field(i)

        fmt.Println(sf.Tag.Get("json"),",",sf.Tag.Get("bson"))

    }

}

type User struct{

    Name string `json:"name" bson:"b_name"`

    Age int `json:"age" bson:"b_age"`

}

 

多个Key使用空格进行分开,然后使用Get方法获取不同Key的值。

 

Struct Tag可以提供字符串到Struct的映射能力,以便我们作转换,除此之外,还可以作为字段的元数据的配置,提供我们需要的配置,比如生成Swagger文档等。

文中图片素材来源网络,如有侵权请联系删除
来源:北京兄弟连IT
热门课程 全部课程

热门动态

申请免费试听

只要一个电话

我们为您免费回电

立即申请