go語言基礎type關鍵字

 閱讀大約需要2分鐘

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)
	}
}