Go语言类型定义

· 511字 · 2分钟

本章中主要是关于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)
}

个人理解: 类型别名:

  1. 可以用于导出不可用包,
  2. 给太长,不好记的类型可以修改为通俗易懂的名称

类型定义:

  1. 声明了一个完全不同的类型,并且可以继承原类型的方法,这样增加的方法也不会对原类型影响,可以实现自定义扩展

如有遗漏欢迎批评指正

comments powered by Disqus