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) } }