go語言基礎type關鍵字
type關鍵字有如下幾種用法:定義結構體,定義接口,類型別名,類型定義,類型查詢
1. 定義結構體
結構體是由一系列具有相同類型或不同類型的數據構成的數據集合
type Person struct {
Name string
Age int
}
func main() {
p:=Person{Name: "john",Age:18}
fmt.Println(p)
}
2. 定義接口
接口是一組僅包含方法名、參數、返回值的未具體實現的方法的集合。
如果實現了接口的所有方法,則認為實現了該接口,無需在該類型上顯示的添加聲明。
package main
import "fmt"
type Person struct {
Name string
Age int
}
type People interface {
ReturnName() string
}
func (p Person) ReturnName() string {
return p.Name
}
func main() {
p := Person{Name: "john", Age: 18}
fmt.Println(p)
fmt.Println(p.ReturnName())
var a People
a = p
name := a.ReturnName()
fmt.Println(name)
}
3. 類型別名
使用類型別名定義出來的類型與原類型一樣,即可以與原類型變量互相賦值,又擁有了原類型的所有方法集。 給string類型取一個別名,別名名稱是name
type name=string
類型別名與類型定義不同之處在於,使用類型別名需要在別名和原類型之間加上賦值符號(=); 使用類型別名定義的類型與原類型等價,而使用類型定義出來的類型是一種新的類型。
package main
import "fmt"
type a=string
type b string
func getValueA(str a) {
fmt.Println(str)
}
func getValueB(str b) {
fmt.Println(str)
}
func main() {
var str="Hello"
getValueA(str)
getValueB(str)
}
編譯後提示 cannot use str (type string) as type b in argument to getValueB
4. 類型定義
類型定義可以在原類型的基礎上創造出新的類型,有些場合下可以使代碼更加簡潔
package main
import "fmt"
// 將newInt定義為int類型
type newInt int
func main() {
var a newInt
a = 100
fmt.Println(a) // 100
fmt.Printf("%T\n", a) // main.newInt
}
定義函數類型
package main
import "fmt"
type handle func(str string)
func exec(f handle) {
f("Hello")
}
func main() {
p:= func(str string) {
fmt.Println(str,"John")
}
exec(p)
exec(func(str string) {
fmt.Println(str,"World")
})
}
5. 類型查詢
類型查詢,就是根據變量,查詢這個變量的類型。
package main
import "fmt"
type Student struct {
Name string
Age int
}
func main() {
//var a interface{} = Student{Name: "John"}
var a interface{} = "Hello"
switch v := a.(type) {
case string:
fmt.Println("字符串")
case int:
fmt.Println("整型")
default:
fmt.Println("其他類型", v)
}
}