Golang的"泛型"模式
只要实现了Sortable接口的所有方法,就可以使用该接口的函数。
我们通过冒泡排序来演示一下:
package main
import "fmt"
type Sortable interface {
Len() int
Less(int, int) bool
Swap(int, int)
}
func Mysort(s Sortable) {
l := s.Len()
for x := 0; x < l; x++ {
for y := 0; y < l-x-1; y++ {
if s.Less(y, y+1) {
s.Swap(y, y+1)
}
}
}
}
//实现整形数组的排序
type myInt []int
func (myint myInt) Len() int {
return len(myint)
}
func (myint myInt) Less(i, j int) bool {
return myint[i] < myint[j]
}
func (myint myInt) Swap(i, j int) {
myint[i], myint[j] = myint[j], myint[i]
}
//实现字符串长度的排序
type myString []string
func (mystring myString) Len() int {
return len(mystring)
}
func (mystring myString) Less(i, j int) bool {
return len(mystring[i]) < len(mystring[j])
}
func (mystring myString) Swap(i, j int) {
mystring[i], mystring[j] = mystring[j], mystring[i]
}
func main() {
a := myInt{6, 2, 5, 1, 3, 4}
Mysort(a)
fmt.Println(a)
s := myString{"sun", "w", "qiang", "qq"}
Mysort(s)
fmt.Println(s)
}
Golang的"泛型"模式的更多相关文章
- Golang的交互模式进阶-读取用户的输入
Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出. ...
- golang 简单工厂模式
package kit //golang简单工厂模式 //go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类. NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang ...
- 对golang服务器开发模式的一些思考
多线程+同步阻塞模型 在我们的游戏项目中使用的golang服务器开发方式如下 1.多线程逻辑 2.同步阻塞. 也就是说, 每个人一个线程(goroutine), io线程=逻辑线程 这种方式的优点: ...
- 一个小事例,了解golang通道阻塞模式
在学习golang中,channel真的是让人捉摸不透的东西,本来我自以为我理解了协程阻塞的用法了,结果就下面这个小例子,我还是在打印输出后才搞明白到底怎么回事? 当然了,这也是我自身对协程这块不太熟 ...
- 漫谈golang设计模式 工厂模式
工厂模式 意义:创建过程交给专门的工厂子类去完成.定义一个抽象的工厂类,再定义具体的工厂类来生成子类等,它们实现在抽象按钮工厂类中定义的方法.这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引 ...
- golang之工厂模式
说明: golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题 如果包里面的结构体变量首字母小写,引入后,不能直接使用,可以工厂模式解决: ch1.go package ch1 type ...
- 详解 Seata Golang 客户端 AT 模式及其使用
源码seata-golang 概述 我们知道 Seata Java Client 的 AT 模式,通过代理数据源,实现了对业务代码无侵入的分布式事务协调机制,将与 Transaction Coor ...
- golang redis的模式订阅
c := redisPool.Get() psc := redis.PubSubConn{c} psc.PSubscribe("aa*") for { switch v := ps ...
- golang拾遗:为什么我们需要泛型
从golang诞生起是否应该添加泛型支持就是一个热度未曾消减的议题.泛型的支持者们认为没有泛型的语言是不完整的,而泛型的反对者们则认为接口足以取代泛型,增加泛型只会徒增语言的复杂度.双方各执己见,争执 ...
随机推荐
- 关于三星设备 Activity.onDestroy() 被调用。显示“开发者选项”
昨天在三星的Galaxy s4上测试自己的App时,在Activity页面间跳转的时候,第一个Activity的onDestory()总是被调用,导致从第二个Activity返回的时候,第一个Acti ...
- Kafka分布式集群搭建
环境说明 kafka自0.9之后增加了connector的特性.本文主要是搭建一个分布式的kafka connector和broker. 本文用了三台机器进行部署,使用centos 6.6. host ...
- MySQL 笔记 —— 日期和时间函数
[TOC] 获取当前日期的函数和获取当前时间的函数 CURDATE()和CURRENT_DATE()函数获取当前日期:CURTIME()和CURRENT_TIME()函数获取当前时间. mysql&g ...
- C语言之冒泡排序
冒泡排序: 1). 简介 其实就是把一个数组的元素,按照从小到大(从大到小)得顺序,重新排列起来,这种排序就叫冒泡排序 例: int nums[5] = {5,4,3,2,1}; //经过排序后 下标 ...
- iOS之崩溃处理:This application is modifying the autolayout engine from a background thread
一.错误提示 今天在开发的时候遇到一个崩溃问题,"This application is modifying the autolayout engine from a background ...
- 递归思路分解(C#)
例子一:求1!+2!+......+X! 思路分解:因为是用递归思想解决问题,也就是方法调用方法.那么肯定的方法是重复利用的.在这道题里,我们要重复利用的也就是求X!和求和 所以我们先把求X!的代码写 ...
- servlet笔记,配置与 http相关
tomcat配置环境变量: JAVA_HOME= 指向你的jdk的主目录(bin目录的上一层) server.xml: <Context path="/myweb2&qu ...
- GridView”的控件 必须放在具有 runat=server 的窗体标记内 “错误提示”
在做导出数据到EXCEL程序中,出现了错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记 解决办法 重写 VerifyRendering ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- Objective-C Runtime 运行时之四:Method Swizzling(转载)
理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...