我试图理解 Go 的界面概念并创建以下代码:
package main
import "fmt"
type Failer interface {
Error() string
}
type Succer interface {
Success() string
}
type Result interface {
Failer
Succer
}
type Fail struct{}
func (*Fail) Error() string {
return "Error"
}
type Succ struct{}
func (*Succ) Success() string {
return "Success"
}
type Combi struct{}
func (*Combi) Error() string {
return "Error"
}
func (*Combi) Success() string {
return "Success"
}
func main() {
var r Result
var s Succer
c := &Combi{}
r = c
s = c
fmt.Println(r.Error())
fmt.Println(s)
}
作为输出我有
Error
Error
为什么?我期望输出错误和成功,因为s它是类型 Succer 的接口,没有错误返回为字符串。当我像这样更改主函数时:
func main() {
var r Result
var s Succer
c := &Combi{}
r = c
s = c
}
编译器抱怨
# command-line-arguments
.\sample1.go:42: r declared and not used
.\sample1.go:43: s declared and not used
为什么?我分配变量r和s引用。
拉丁的传说
繁星coding
富国沪深
相关分类