gpt4 book ai didi

go - 在 Go 中有点 "method overloading"?

转载 作者:IT王子 更新时间:2023-10-29 02:31:07 24 4
gpt4 key购买 nike

假设我有一个名为 State 的类型:

type State struct {
// ... does not matter what is inside
}

连同其上定义的方法:

func (s *State) prettyName() string {
return "I am a state!"
}

目前我无法改变prettyName() 的行为。我知道 Go 有意避开类似 OOP 的继承和方法重载,这可能永远不会改变,但仍然:如果我需要 prettyName() 根据任何情况做出不同的行为怎么办因素?我看到的唯一解决方案是:

type State struct {
_prettyName func() string
}
func (s *State) prettyName() string {
return s._prettyName()
}

是否有更好的 Go 风格的方法来实现相同的目标?

最佳答案

接口(interface)应该在这里工作。

创建一个类似的界面

type Stateful interface  {
State() string
}

和一个基本状态类型

type BaseState struct{
}
func (s BaseState) State() string{
return "Base state"
}

你可以嵌入BaseState结构

type MyStruct struct{
BaseState
}

这样 State 就会返回 "Base state",但也可以实现自己的方法。

func (s MyStruct) State() string{
return "New State"
}

现在 State 将返回 "New State"

https://play.golang.org/p/QOajW0O6gIz

关于go - 在 Go 中有点 "method overloading"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com