在 Go 语言中,自定义类型指的是使用 type 关键字定义的新类型,它可以是基本类型的别名,也可以是结构体、函数等组合而成的新类型。自定义类型可以帮助我们更好地抽象和封装数据,让代码更加易读、易懂、易维护
自定义类型
结构体就是自定义类型中的一种
除此之外我们使用自定义类型,还可以让代码组合更加规范
例如,响应给客户端的想要码,我给他一个自定义类型
package main
import "fmt"
type Code int
const (
SuccessCode Code = 0
ValidCode Code = 7 // 校验失败的错误
ServiceErrCode Code = 8 // 服务错误
)
func (c Code) GetMsg() string {
// 可能会有更加响应码返回不同消息内容的要求,我们在这个函数里面去实现即可
// 可能还会有国际化操作
return "成功"
}
func main() {
fmt.Println(SuccessCode.GetMsg())
var i int
fmt.Println(int(SuccessCode) == i) // 必须要转成原始类型才能判断
}
类型别名
和自定义类型很像,但是有一些地方和自定义类型有很大差异
- 不能绑定方法
- 打印类型还是原始类型
- 和原始类型比较,类型别名不用转换
package main
import "fmt"
type AliasCode = int
type MyCode int
const (
SuccessCode MyCode = 0
SuccessAliasCode AliasCode = 0
)
// MyCodeMethod 自定义类型可以绑定自定义方法
func (m MyCode) MyCodeMethod() {
}
// MyAliasCodeMethod 类型别名 不可以绑定方法
func (m AliasCode) MyAliasCodeMethod() {
}
func main() {
// 类型别名,打印它的类型还是原始类型
fmt.Printf("%T %T \n", SuccessCode, SuccessAliasCode) // main.MyCode int
// 可以直接和原始类型比较
var i int
fmt.Println(SuccessAliasCode == i)
fmt.Println(int(SuccessCode) == i) // 必须转换之后才能和原始类型比较
}
参考文档
自定义数据类型 https://www.jb51.net/article/282910.htm
自定义类型 https://www.cnblogs.com/whiteBear/p/15549604.html
自定义类型和类型别名 https://blog.csdn.net/alexchenyang/article/details/120604452
标签:自定义,int,fmt,数据类型,类型,SuccessCode,go,main From: https://www.cnblogs.com/fengfengzhidao/p/18428734