go语言实现接口,接受者应该是传值还是传引用(传引用兼容传值)

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

/*
go语言中给接口赋值的时候,对象如果是值(对于引用的接受者处理不了)
如果是指针,则可以自动实现值的处理
 */

package main

import "fmt"

//定义Integer类型
type Integer int

type LessAddInf interface{
	Less(n Integer) bool
	Add(n Integer) Integer
}

func (this Integer) Less(n Integer) bool{
	return this < n
}

func (this *Integer) Add(n Integer) Integer{
	*this += n
	return *this
}

type Computer struct{
	CPU string "计算器"
	Memory string "内存"
}

type Thing interface{
	Name() string
	Attribute() string
}

func (this Computer) Name() string  {
	return "Computer"
}

func (this *Computer) Attribute()string  {
	return fmt.Sprintf("CPU=%v Memory=%v", this.CPU, this.Memory)
}

func main()  {
	var inf LessAddInf
	var n Integer
	inf = &n
	fmt.Printf("inf.Less(20)=%v\n",inf.Less(20))
	fmt.Printf("inf.Add(30)=%v\n", inf.Add(30))

	var thing Thing
	var computer = Computer{CPU:"英特尔至强-v3440", Memory:"三星DDR4(8g)"}
	thing = &computer
	fmt.Printf("thing.Name()=%v\n", thing.Name())
	fmt.Printf("thing.Attribute()=%v\n", thing.Attribute())
}


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

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

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