证券程序化交易接口,接口继承
定义Flyable证券程序化交易接口,接口
定义WuKong结构体,包含Monkey和Tool属性。
空证券程序化交易接口,接口
定义证券程序化交易接口,接口模板如下:
参考
WuKong结构体就实现了上面的两个证券程序化交易接口,接口。
证券程序化交易接口,接口不能创建实例,证券程序化交易接口,接口可以指向实现了证券程序化交易接口,接口的结构体实例结构体必须实现所有证券程序化交易接口,接口的方法才可以说实现了该证券程序化交易接口,接口证券程序化交易接口,接口默认是指针类型,没有初始化会输出nil空证券程序化交易接口,接口可以接收任何类型
证券程序化交易接口,接口和继承比较
实现
Sort,本地排序data,无返回。它调用1次datLen确定长度,调用O(n*log()次datLess和datSwap,底层使用的是快排,感兴趣的朋友可以看看快排源代码。本函数不能保证排序的稳定性。
// Sort sorts data.
// It makes one call to data.Len to determine n and O(n*log(n)) calls to
// data.Less and data.Swap. The sort is not guaranteed to be stable.
func Sort(data Interface) {
n := data.Len()
quickSort(data, 0, n, maxDepth(n))
}
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with index i must sort before the element with index j.
// See Float64Slice.Less for a correct implementation for floating-point values.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}
截
如你所见,什么方法也没有,即每个结构体都实现了空证券程序化交易接口,接口,都可以赋值给空证券程序化交易接口,接口,这在排序,后面类型断言等部分都很有用。
至此,WuKong结构体实现了四个证券程序化交易接口,接口,为什么是四个呢?因为还有下面这一个
Go标准库-sort
使用
monkeys := MonkeySlice{{'峨眉猴'},{'齐天大圣'},{'金丝猴'},{'六耳猕猴'},{'孙悟空'}}
sort.Sort(monkeys)
fmt.Println(monkeys)
实现
func (w *WuKong) Change() {
fmt.Println('看我72变...')
}
再定义一个证券程序化交易接口,接口
注意项
全部代码
package main
import (
'fmt'
'sort'
)
type Monkey struct {
Name string
}
func (m *Monkey)climb(){
fmt.Println(m.Name,'会爬树...')
}
//--------Flyable证券程序化交易接口,接口---------
type Flyable interface {
Fly()
}
//--------Swimmable证券程序化交易接口,接口-------
type Swimmable interface {
Swim()
}
//----------证券程序化交易接口,接口继承--------------
type Skills interface {
Flyable
Swimmable
Change()
}
//-----------空证券程序化交易接口,接口-----------
type Null interface {
}
//---------不破坏结构体,添加属性--------
type WuKong struct {
Monkey
Tool string
}
//---------不破坏继承,扩展行为/方法--------
func (w *WuKong) Fly() {
fmt.Println('筋斗云,来...')
}
func (w *WuKong) Swim() {
fmt.Println('老龙王,俺老孙的金箍棒呢?')
}
func (w *WuKong) Change() {
fmt.Println('看我72变...')
}
type MonkeySlice []Monkey
//--------实现Len--------
func (m MonkeySlice) Len() int{
return len(m)
}
//---------实现Less---------
func (m MonkeySlice) Less(i,j int) bool {
return m[i].Name < m[j].Name
}
//----------实现Swap---------
func (m MonkeySlice) Swap(i,j int){
m[i],m[j] = m[j],m[i]
}
func main() {
//-----------证券程序化交易接口,接口体-------
w := WuKong{}
w.Name = '孙悟空'
//-----------使用方法------
w.climb()
//-----------使用实现的证券程序化交易接口,接口的方法---------
w.Fly()
//-----------结构体赋值给证券程序化交易接口,接口------------
var s Skills
s = &w
s.Change()
//----------空证券程序化交易接口,接口-------------
var null Null
null = w
wukong := null.(WuKong)
wukong.Swim()
//-----------结构体切片排序--------------
monkeys := MonkeySlice{{'峨眉猴'},{'齐天大圣'},{'金丝猴'},{'六耳猕猴'},{'孙悟空'}}
sort.Sort(monkeys)
fmt.Println(monkeys)
}
/*定义证券程序化交易接口,接口*/typeinterface_nameinterface{method_name1([parameterlist])(return_typmethod_name2([parameterlist])(return_typ...method_namen([parameterlist])(return_typ}
多证券程序化交易接口,接口实现
鸭子类型
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝1883389520您的支持是我不断更新的动力。
当A结构体继承了B结构体,那么A结构体就自动的继承了B结构体的字段和方法,并且可以直接使用当A结构体需要扩展功能,同时不希望去破坏继承关系,则可以去实现某个证券程序化交易接口,接口即可,证券程序化交易接口,接口是对继承的补充,是like和is的区别继承解决代码的复用性和可维护性证券程序化交易接口,接口更加灵活,一定程度上实现了解耦
实现了证券程序化交易接口,接口的所有方法,就是实现了该证券程序化交易接口,接口,不需要显示指明是哪个证券程序化交易接口,接口,即隐式实现。
func (w *WuKong) Fly() {
fmt.Println('筋斗云,来...')
}
结构体切片排序
实现与使用
鸭子类型是动态类型的一种风格,例如,Python语言中比较常见。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的证券程序化交易接口,接口,而是由'当前方法和属性集合'决定。
代码
而在Go中,就是由当前结构体的方法集合决定当前结构体是否实现了某个证券程序化交易接口,接口。WuKong可以飞,而Monkey不可以飞,WuKong在继承Monkey的基础上,扩展了自己的功能。
Go语言中的证券程序化交易接口,接口是一种内置的类型,它定义了一组方法的签名,体现了程序设计的高内聚低耦合的特点,本篇文章会介绍证券程序化交易接口,接口及基本使用,下篇文章介绍类型断言。
声明/定义
结构体
实现
func (w *WuKong) Swim() {
fmt.Println('老龙王,俺老孙的金箍棒呢?')
}
定义Monkey结构体,具有climb方法。
type Monkey struct {
Name string
}
func (m *Monkey)climb(){
fmt.Println(m.Name,'会爬树...')
}
既然这是一个证券程序化交易接口,接口,只要我们实现了Len、Less、Swap方法即可传参,进行排序。
再定义一个证券程序化交易接口,接口Skills,继承前面的两个证券程序化交易接口,接口,并添加新的方法Change
我们就用Monkey结构体的切片实现一下这个证券程序化交易接口,接口。
type MonkeySlice []Monkey
//--------实现Len--------
func (m MonkeySlice) Len() int{
return len(m)
}
//---------实现Less---------
func (m MonkeySlice) Less(i,j int) bool {
return m[i].Name < m[j].Name
}
//----------实现Swap---------
func (m MonkeySlice) Swap(i,j int){
m[i],m[j] = m[j],m[i]
}
文章为作者独立观点,不代表股票交易接口观点