go语言自定义教程 go语言定义变量( 六 )


在 go 语言中,没有类的概念但是可以给类型(结构体,自定义类型)定义方法 。所谓方法 就是定义了接收者的函数 。接收者的概念就类似于其他语言中的 this 或者 self 。
方法的定义格式如下:
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
函数体
}
注意:想改变结构体内的值,必须先变成指针 。
在 Go 语言中,接收者的类型可以是任何类型,不仅仅是结构体,任何类型都可以拥有方法 。举个例子,我们基于内置的 int 类型使用 type 关键字可以定义新的自定义类型,然后为我们 的自定义类型添加方法 。
注意:匿名结构体中不允许出现多个重复的类型
注意:如果结构体里面有私有属性也就是小写定义的字段,则不会被json使用
Golang中的自定义json序列化后端开发人员跟前端对接接口的时候,或多或少都会面临一些沟通问题,比如说枚举字符的定义,比如有整形状态字段: state
通常给前端的时候,前段要做的是将1,2,3以及对应的中文释义存储为key/value的形式,key与value单看都无法知道对方的语义,
比如我只知道状态值为“1”,是无法将其与“成功”对应起来的(当然这套状态的设计者肯定是知道的) , 后端通常给到前端的restful api
接口定义也是key/value的形式 , 这乍一看其实也没啥毛病,只要有key/value也没问题 , 后端定义通常会是
但数字的表现形式终归是不不太明确的 , 如果对状态的定义换成以下形式:
基本可以理解为中英文互译了,理解起来也会更清晰一些不是,如果这么做的话,后端给到前端的响应字段状态的类型就需要修改成字符器格式
后端还是要做一层字符串到整型的转换,从目的来讲,我们只是想返给前端的 state 字段是字符串而已,也就是在做json序列化的时候将整型与字符串做一层转换,有更优雅的做法如下所示
只需要做两件事 , 自定义类型 MyState  , 实现 MarshalJSON 方法
只要类型实现了 MarshalJSON 方法,在json序列化时就会调用此方法 , 如此一来,我们就轻松实现了自定义json序列化,反序列化同样如此
实现起来也很简单
需要注意的是,UnmarshalJSON 方法操作过程需要给 receiver 也就是 u 赋值,所以必须是指针类型,同样的,在实现
MarshalJSON 方法, receiver 的类型需要与结构体定义中的类型保持一致,否则自定义序列化会失败
参考:
关于go语言自定义教程和go语言定义变量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读