本章中主要是关于go语言的类型声明学习及初步理解
经过查询资料,在Golang官方中,看到有两种类型声明方式: 具体也可查看官方文档
var TypeInt int//类型定义
var AliasInt = int//类型别名
类型别名:顾名思义相当于给原类型声明一个别名,除了名字不一样,其他都不变
类型定义:新定义的类型除了底层类型和原类型相同,可以显式转换,但其实他是新的类型和其他类型不再相关
类型定义后可能拥有原类型的方法
// A Mutex is a data type with two methods, Lock and Unlock.
type Mutex struct { /* Mutex fields */ }
func (m *Mutex) Lock() { /* Lock implementation */ }
func (m *Mutex) Unlock() { /* Unlock implementation */ }
// NewMute底层类型是Mutex 但是不拥有Mutex的方法
type NewMutex Mutex
// PtrMutex底层类型是*Mutex 也不拥有Mutex的方法
type PtrMutex *Mutex
// PrintableMutex 拥有Mutex的方法
type PrintableMutex struct {
Mutex
}
type Block interface {
BlockSize() int
Encrypt(src, dst []byte)
Decrypt(src, dst []byte)
}
// MyBlock 是一个接口类型 并且拥有Block的方法
type MyBlock Block
类型定义的一些用法 自定义基本类型,并添加方法
type TimeZone int
const (
EST TimeZone = -(5 + iota)
CST
MST
PST
)
func (tz TimeZone) String() string {
return fmt.Sprintf("GMT%+dh", tz)
}
个人理解: 类型别名:
- 可以用于导出不可用包,
- 给太长,不好记的类型可以修改为通俗易懂的名称
类型定义:
- 声明了一个完全不同的类型,并且可以继承原类型的方法,这样增加的方法也不会对原类型影响,可以实现自定义扩展
如有遗漏欢迎批评指正