gpt4 book ai didi

golang反射初始化满足接口(interface)的结构

转载 作者:行者123 更新时间:2023-12-01 22:40:12 25 4
gpt4 key购买 nike

我可以通过某种反射摆脱开关吗? brand总是 匹配结构名称

package main

import "fmt"

type Car interface {
Move()
SetModel()
}

type Ford struct {
Model string
}

type Volkswagen struct {
Model string
}

func (car *Ford) Move() {
fmt.Println(car.Model + " is moving!")
}

func (car *Ford) SetModel() {
car.Model = "Focus"
}

func (car *Volkswagen) Move() {
fmt.Println(car.Model + " is moving!")
}

func (car *Volkswagen) SetModel() {
car.Model = "Jetta"
}

func main() {
var car Car

brand := "Ford"

switch brand {
case "Ford":
car = &Ford{}
case "Volkswagen":
car = &Volkswagen{}
}
car.SetModel()
car.Move()
}

最佳答案

您不能使用 reflect仅从其名称的字符串生成类型,因此可能需要类型工厂的映射,但是根据您所说的需要,您可能希望使用 go generate 以编程方式生成它.它基本上会像这样工作:

var constructors = map[string]func() Car{
"Ford": func() Car{
return &Ford{}
},
"Volkswagen": func() Car{
return &Volkswagen{}
},
}

// ...
car := constructors[brand]()

关于golang反射初始化满足接口(interface)的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61959355/

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