golang中,type是非常重要的關鍵字,一般常見用法就是定義結構,接口等,但是type還有很多其它的用法,在學習中遇到了以下幾種,這點簡單總結記錄下
- 定義結構
type Person struct {
name string
age int
}
type Mutex struct {}
type OtherMutex Mutex //定義新的類型
func (m *Mutex) Lock(){
fmt.Println("lock")
}
func (m *Mutex) Unlock(){
fmt.Println("lock")
}
func main() {
m := &OtherMutex{} //注意,OtherMutex不具有Lock和Unlock方法
m.Lock()
}
- 定義接口
type Personer interface{
ShowName(s string)
}
- 類型定義
type Myint int //定義一個新的類型,
//定義一個類型方法
func (m Myint) showValue() {
fmt.Println("show int", m)
}
func main() {
var m Myint = 9 //變量聲明
m.showValue()
}
新定義的類型,可以定義方法,
如上例的 showValue()
- 別名定義
定義和原來一樣的類型,就是一個別名alias
type nameMap = map[string]interface{}
func main() {
m :=make(nameMap)
m["name"] = "golang"
fmt.Printf("%v", m)
}
另外別名定義和類型定義有點區別
type A int32 //類型定義,生成新的
type B = int32 //別名定義,僅僅是 alias
func main() {
var a A = 333
fmt.Println(a)
var b B = 333
b = B(a) //a,b屬於不同的類型,所以這里需要強制轉換
fmt.Println(b)
}
- 定義函數類型
type cb func(s string) // 定義一個函數類型
//對函數類型再定義方法
func (f cb) ServerCb() error{
f("cbb")
fmt.Println("server cb")
return nil
}
func main() {
s :=cb(func( s string){
fmt.Println("sss", s)
})
s.ServerCb()
}
其實,這種定義方式,和實現接口的方法定義差不多,感覺這種就是讓代碼更清晰,如果聲明太復雜,不用看上去全是很亂的這種定義。
好了,以上就是 type一些常用的用法。