3 回答
TA贡献2051条经验 获得超10个赞
需要两个修复:
要在某个变量上调用接口方法,请将变量声明为接口类型。
指针接收器实现了该方法。将指针分配给接口变量。
这是代码:
var s Session // Declare variable as Session so we can call StarSession
if sessionType == 1 {
s = &SessionA{} // note & on this line
} else {
s = &SessionB{} // note & on this line
}
TA贡献1909条经验 获得超7个赞
您可以编写一个接受接口的函数
package main
import "fmt"
type Session interface {
StartSession()
}
type SessionA struct {
jobs string
}
type SessionB struct {
foods string
}
func (sessionA *SessionA) StartSession() {
fmt.Printf("begin to do %s\n", sessionA.jobs)
}
func (sessionB *SessionB) StartSession() {
fmt.Printf("begin to eat %s\n", sessionB.foods)
}
func main() {
sessionType := 1 // maybe 2, just example
sessionA:= &SessionA{
jobs: "job1",
}
sessionB := &SessionB{
foods: "food1",
}
if sessionType == 1 {
runSession(sessionA)
} else {
runSession(sessionB)
}
}
func runSession(s Session) {
s.StartSession()
}
TA贡献1155条经验 获得超0个赞
您可以使用策略模式,通过这种方法,您可以在需要时扩展代码。在运行时实例化的对象取决于某些上下文。
type Session interface { //the common behaviour
StartSession()
}
type SessionA struct {
jobs string
}
type SessionB struct {
foods string
}
func (sessionA *SessionA) StartSession() {
fmt.Printf("begin to do %s\n", sessionA.jobs)
}
func (sessionB *SessionB) StartSession() {
fmt.Printf("begin to eat %s\n", sessionB.foods)
}
你的主要可能是:
func main() {
sessionToExcecute := 1
sessions := map[int]Session{
1: &SessionA{jobs: "some job"},
2: &SessionB{foods: "a food"},
}
sessions[sessionToExcecute].StartSession()
}
- 3 回答
- 0 关注
- 111 浏览
添加回答
举报