GO interface的使用

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

GO没有继承的概念,所以接口用来定义对象对应的方法名称,并不实现。如果我们定义的对象包含接口中的方法,那么就可以把对象赋值给定义为接口类型的变量。

如以下的代码中,MyFloat和 *Vertex均实现了Abs()方法,所以可以用接口的方式直接调用,而Vertex并没有实现Abs()方法,所以运行的时候,编译器会提示错误。

package main

import (
	"fmt"
	"math"
)

type MyFloat float64

func (f MyFloat) Abs() float64 {
	if f < 0 {
		return float64(-f)
	}
	return float64(f)
}

type Vertex struct {
	X, Y float64
}

func (v *Vertex) Abs() float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

type Abser interface {
	Abs() float64
}

func main() {
	var a Abser
	f := MyFloat(-math.Sqrt2)
	v := Vertex{3, 4}

	a = f  // a MyFloat implements Abser
	a = &v // a *Vertex implements Abser
	//a = v  // a Vertex, does NOT implement Abser  

	fmt.Println(a.Abs())
}



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

本文来自:CSDN博客

感谢作者:genispan

查看原文:GO interface的使用

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

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