Go语言类型和接口语法的实验一则

分享实验Go by 达达 at 2011-05-31

晚上试了下Go语言的interface和struct语法,对Go语言独树一帜的面向对象方式稍微有点了解,下面是实验的代码。

代码中声明了两个接口和两个类型,其中一个类型实现了两个接口,而另一个类型只实现一个接口。

package main
 
type IServer interface {
    Start()
    Stop()
}
 
type IRestartAble interface {
    Restart()
}
 
//-------------------------------------------- 
 
type ServerTypeA struct {
}
 
func (s *ServerTypeA) Start() {
    println("ServerTypeA start")
}
 
func (s *ServerTypeA) Stop() {
    println("ServerTypeA stop")
}
 
func (s *ServerTypeA) Restart() {
    println("ServerTypeA restart")
}
 
//-------------------------------------------- 
 
type ServerTypeB struct {
}
 
func (s *ServerTypeB) Start() {
    println("ServerTypeB start")
}
 
func (s *ServerTypeB) Stop() {
    println("ServerTypeB stop")
}
 
 
func main() {
    var sa IServer = new(ServerTypeA)
    sa.Start()
    sa.Stop()
 
    s1, ok1 := sa.(IRestartAble)
 
    if ok1 {
        s1.Restart()
    } else {
        println("ServerTypeA not restart able.")
    }
 
    var sb IServer = new(ServerTypeB)
    sb.Start()
    sb.Stop()
 
    s2, ok2 := sb.(IRestartAble)
 
    if ok2 {
        s2.Restart()
    } else {
        println("ServerTypeB not restart able.")
    }
}