1、接口算法
一、定义app
interface类型能够定义一组方法,用来表示一个对象的行为特征。interface不能包含任何变量。负载均衡
二、示例dom
好比:ide
type Animal interface {函数
Talk(参数列表) 返回值列表spa
Eat(参数列表) 返回值列表3d
。。。code
}对象
三、interface类型是引用类型
type Animal interface{
Talk(参数列表) 返回值列表
。。。
}
var a Animal
a.Talk()
四、接口实现
a、Golang中的接口,不须要显示的实现。只要一个对象,实现了接口中的全部方法,那么这个对象就实现这个接口。
b、若是一个对象实现了多个interface类型的方法,那么这个对象就实现了多个接口。
五、多态
一种事物的多种形态,均可以按照统一的接口进行操做。
六、空接口,interface{}
空接口没有任何方法,因此全部类型都实现了空接口
var a int
var b interface
b = a
七、接口嵌套
一个接口能够嵌套在另外的接口,以下所示:
package main import ( "math/rand" ) type RandBalance struct{ } func (r *RandBalance) DoBalance(addList []string) string{ l := len(addList) index := rand.Intn(l) return addList[index] }
package main type RoundBalance struct{ curIndex int } func (r *RoundBalance) DoBalance(addrList []string) string{ l := len(addrList) r.curIndex = r.curIndex % l addr := addrList[r.curIndex] r.curIndex++ return addr }
package main type Balance interface{ DoBalance([]string) string }
package main import ( "fmt" "math/rand" ) func doBlance(blance Balance, addrList []string) string{ return blance.DoBalance(addrList) } func main() { var addrList []string for i := 0;i < 10; i++{ addr := fmt.Sprintf("%d.%d.%d.%d:80080", rand.Intn(255),rand.Intn(255),rand.Intn(255),rand.Intn(255)) addrList = append(addrList,addr) } var balanceName string fmt.Scanf("%s", &balanceName) var balance Balance if balanceName == "random" { balance = &RandBalance{} } else if balanceName == "roundbrobin" { balance = &RoundBalance{} } else { balance = &RandBalance{} } for i := 0; i<10; i++{ addr := doBlance(balance, addrList) fmt.Println(addr) } }