package main //Go语言组合的思想很重,数据之间如果要传承 //需要将数组组合进来 //Go有指针的概念,但是并没有指针运算符 import ( "fmt" ) const ( ANIMAL_CAT = 0 ANIMAL_MOUSE = 1 ANIMAL_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 := cat cat4.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_MOUSE cat2.show() fmt.Printf("&cat2=0x%X\n", cat2) //做赋值操作cat3和cat2是两个不一样的指针,但是指向同一个结构体对象 cat3 := cat2 fmt.Printf("&cat3=0x%X\n", cat3) cat3.m_name = "Mouse1" cat3.show() cat2.show() }
有疑问加站长微信联系(非本文作者)