go结构体中String接口的实现为什么是结构体而不是指针

davidsu33 · · 2076 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:davidsu33

查看原文:go结构体中String接口的实现为什么是结构体而不是指针

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2076 次点击  
加入收藏 微博
上一篇:Go-Sort
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传