2 回复
除非使用像 go/ast 这样的包,否则没有简单的方法来获取常量列表。话虽如此,如果我稍微深入思考一下你的问题,我认为你是想收集所有可执行的操作。我想到的是创建一个带有 Execute 方法的接口,任何操作都可以实现它。然后,你可以用这些实现来初始化一个操作列表。
类似这样:
type Operation interface {
Execute()
}
type WriteOperation struct{}
func (wo WriteOperation) Execute() {
println("WriteOperation executing...")
}
type ReadOperation struct{}
func (ro ReadOperation) Execute() {
println("ReadOperation executing...")
}
type OperationCollection []Operation
func NewOperationCollection() OperationCollection {
return OperationCollection{
WriteOperation{},
ReadOperation{},
}
}
func main() {
col := NewOperationCollection()
for _, op := range col {
op.Execute()
}
}
我在这里稍微偏离了惯用的单方法接口命名规则,但试图通过这个例子更好地理解你的意图。
该代码可在 Playground 上运行:https://play.golang.org/p/b7X6R23epbJ
希望这能有所帮助。
更多关于Golang中如何获取枚举集合的类型化值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,可以通过实现自定义类型和接口来获取枚举集合的类型化值并继承其行为。以下是一个示例:
package main
import "fmt"
// 定义接口
type Status interface {
String() string
Value() int
}
// 定义自定义类型
type StatusType int
// 实现接口方法
func (s StatusType) String() string {
switch s {
case StatusPending:
return "PENDING"
case StatusActive:
return "ACTIVE"
case StatusCompleted:
return "COMPLETED"
default:
return "UNKNOWN"
}
}
func (s StatusType) Value() int {
return int(s)
}
// 定义枚举值
const (
StatusPending StatusType = iota
StatusActive
StatusCompleted
)
// 获取枚举集合
func AllStatuses() []Status {
return []Status{
StatusPending,
StatusActive,
StatusCompleted,
}
}
func main() {
// 获取所有枚举值
statuses := AllStatuses()
// 遍历并调用接口方法
for _, status := range statuses {
fmt.Printf("Status: %s, Value: %d\n",
status.String(),
status.Value())
}
// 类型安全的枚举使用
var currentStatus StatusType = StatusActive
fmt.Printf("\nCurrent status: %s\n", currentStatus.String())
}
这个实现提供了:
- 类型安全的枚举值(StatusType)
- 通过接口继承行为(String()和Value()方法)
- 获取所有枚举值的集合(AllStatuses()函数)
- 编译时类型检查
输出结果:
Status: PENDING, Value: 0
Status: ACTIVE, Value: 1
Status: COMPLETED, Value: 2
Current status: ACTIVE

