多云平台 或者不同平台的服务器信息 操作相同只是平台不同 就可以用接口来做
package main
import (
"fmt"
)
type Cloud interface {
GetHost() []Host
Start(id string) error
Stop(id string) error
Detil(id string) error
}
type Host struct {
name string
ip string
}
type AliCloud struct {
api string
key string
secret string
}
type TenCloud struct {
api string
key string
secret string
}
func NewAliCloud(api,key,secret string) AliCloud {
return AliCloud{api,key,secret}
}
func NewTenCloud(api,key,secret string) TenCloud {
return TenCloud{api,key,secret}
}
func (a AliCloud) GetHost() []Host{
fmt.Println("Ali GetHost")
return []Host{}
}
func (a AliCloud) Start(id string) error{
fmt.Println("Ali Start")
return nil
}
func (a AliCloud) Stop(id string) error{
fmt.Println("Ali Stop")
return nil
}
func (a AliCloud) Detil(id string) error{
fmt.Println("Ali Detil")
return nil
}
func (a TenCloud) GetHost() []Host{
fmt.Println("Ten GetHost")
return []Host{}
}
func (a TenCloud) Start(id string) error{
fmt.Println("Ten Start")
return nil
}
func (a TenCloud) Stop(id string) error{
fmt.Println("Ten Stop")
return nil
}
func (a TenCloud) Detil(id string) error{
fmt.Println("Ten Detil")
return nil
}
func GetCloud(cloudtype string) Cloud {
var cloud Cloud
if cloudtype == "ten" {
cloud = NewTenCloud("a","b","c")
}else if cloudtype == "ali" {
cloud = NewAliCloud("a","b","c")
}else {
fmt.Println("err")
}
return cloud
}
func main() {
cloud := GetCloud("ten")
END:
for {
//多云平台就会用到接口 同种操作针对不同类型 可以复用
var operator string
fmt.Print("请输入操作:")
fmt.Scan(&operator)
switch operator {
case "1":
cloud.GetHost()
case "2":
cloud.Start("1")
case "3":
cloud.Stop("2")
case "4":
cloud.Detil("3")
case "5":
break END
}
}
}