教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go使用接口类型实现“模板类”

go使用接口类型实现“模板类”

发布时间:2022-01-11   编辑:jiaochengji.com
教程集为您提供go使用接口类型实现“模板类”等资源,欢迎您收藏本站,我们将为您提供最新的go使用接口类型实现“模板类”资源

C 支持多态,可以通过重载和模板实现多态,其中模板类这个功能我感觉很方便,比如想写一个栈类型,可以通过模板类,只定义一个类,就能让这个栈支持int,double,char等多种数据类型。

go语言呢,不支持多态,自然也就没有模板这个概念,但是没有关系,go语言的设计者自然知道多态的好处,只是觉得重载这个概念不好理解,所以把多态这个东西给去掉了,取而代之的是一种更简单的编程方式-<span style="color:#f33b45;">接口</span>。

下面我们就来看看,如何使用接口实现C 的模板类。

<h1>使用接口实现模板类</h1>

首先,我们实现一个int类型的stack。

<pre><code class="language-Go">package mystack import "errors" type Mystack []int func (stack *Mystack) Pop() (int, error) { if len(*stack) == 0 { return 0, errors.New("Pop error, stack is empty!") } tail := (*stack)[len(*stack)-1] *stack = (*stack)[:len(*stack)-1] return tail, nil } func (stack *Mystack) Push(val int) { *stack = append(*stack, val) }</code></pre>

我们这里定义了一个Mystack类型,其实就是一个int型切片,放在在mystack包里,并且定义了两个方法Push和Pop。接下来我们先看一下效果。

<pre><code>package main import ( "fmt" mystack "test/stack" ) func main() { stack := mystack.Mystack{1} fmt.Println(stack) stack.Push(2) fmt.Println(stack) stack.Pop() fmt.Println(stack) }</code></pre>

运行结果如下:

欧克,现在我们想让这个栈支持其他的类型,怎么办呢,很简单,把切片类型由int改为接口就可以了,刚才的程序只要改3个地方:

既然改成了“模板类”,那测试函数自然也得搞复杂一些,多整几种类型。

<pre><code>package main import ( "fmt" mystack "test/stack" ) func main() { stackInt := mystack.Mystack{1} stackByte := mystack.Mystack{'a'} stackString := mystack.Mystack{"abc"} fmt.Println("origin:", stackInt, stackByte, stackString) stackInt.Push(2) stackByte.Push('b') stackString.Push("efg") fmt.Println("after push:", stackInt, stackByte, stackString) stackInt.Pop() stackByte.Pop() stackString.Pop() fmt.Println("after push:", stackInt, stackByte, stackString) }</code></pre>

运行结果如下:

这结果,对的不能再对了,也就是说,现在我们写的这个Mystack,已经可以支持int,char,string等所有类型了。

<span style="color:#f33b45;">通过把参数类型设置成interface{},我们就实现了将普通类转化为模板类</span>,还是很简单的吧,哈哈~

 

到此这篇关于“go使用接口类型实现“模板类””的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go使用接口类型实现“模板类”
C#泛型:泛型特点、泛型继承、泛型接口、泛型委托学习笔记
Go语言空接口类型(interface{})
用PHP开始你的MVC (四)实现View层
go 获取函数地址_Go语言基础--接口浅析
C#泛型编程实例详解
第07章 Go语言接口(interface),Golang接口(interface)
详解C#泛型及其特点
DB2实验教程:创建数据库对象
电脑无法进入系统类故障排查方法

[关闭]
~ ~