這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package main//Go語言群組合的思想很重,資料之間如果要傳承//需要將數組組合進來//Go有指標的概念,但是並沒有指標運算子import ("fmt")const (ANIMAL_CAT = 0ANIMAL_MOUSE = 1ANIMAL_DOG = 2)//go語言的介面type Animal interface {name() (string)setName(name string)setType(animalType int)getType()(int)}//貓type Cat struct{//名稱m_name string "名稱_tag"//類型m_type int "類型_tag"//種類m_spec string "種類_tag_反射用"}//接收器使用 (struct_name * StructType)和 (struct_name StructType)不一樣//Go語言中預設全部傳遞的是拷貝//在用法上優先考慮使用 (struct_name *StructType),避免傳值func (cat Cat) name()(string) {return cat.m_name}func (cat Cat) setName(name string) {cat.m_name = name}func (cat Cat) setType(ty int) {cat.m_type = ty}func (cat Cat) getType()(int) {return cat.m_type}func (cat Cat) getSpec()(string) {return cat.m_spec}func (cat Cat) show() {fmt.Printf(":=> name=%s type=%d spec=%s\n", cat.m_name, cat.m_type, cat.m_spec)}//func (cat Cat) init() {//cat.m_name = "Cat"//cat.m_type = ANIMAL_CAT//}//老虎(貓科)type Tiger struct {//結構體中不能直接使用結構對象,但是可以使用指標//這樣彙總一個Cat對象的指標,相當於就從Cat做了繼承了//Cat的資料有了,調用方法直接使用cat調用//m_cat預設就是nil,所有的都會自動初始化m_cat * Cat}func main() {//沒有建構函式,可以構造結構體來進行初始化cat := Cat{"Cat", ANIMAL_CAT, "Cat Spec"}cat.show()fmt.Printf("&cat=0x%X\n", &cat.m_name)//結構體賦值操作後,cat4和cat分別是兩個對象cat4 := catcat4.show()fmt.Printf("&cat4=0x%X\n", &cat.m_name)//如果接受器採用的是 (struct_name StructType),則調用函數無法設定結構體的資料//如果接收器採用的是(struct_name* StructType), 則沒有問題//GO語言中預設都是傳值,不會傳引用的,所以如果要修改值的話,請穿引用cat4.setName("Cat1")cat4.setType(ANIMAL_DOG)cat4.show()cat.show()//使用new關鍵字來,分配一個對象,Go語言自動初始化未初始化的資料//訪問資料的時候,直接使用.而不是->cat2 := new(Cat)cat2.m_name = "Mouse"cat2.m_spec = "Mouse Spec"cat2.m_type = ANIMAL_MOUSEcat2.show()fmt.Printf("&cat2=0x%X\n", cat2)//做賦值操作cat3和cat2是兩個不一樣的指標,但是指向同一個結構體對象cat3 := cat2fmt.Printf("&cat3=0x%X\n", cat3)cat3.m_name = "Mouse1"cat3.show()cat2.show()}