英文:
Golang, variable with type from string
问题
可以使用反射来实现根据字符串创建具有相应类型的变量。以下是一个示例代码:
package main
import (
"fmt"
"reflect"
)
type FirstType struct {
// ...
}
type SecondType struct {
// ...
}
func main() {
var1 := "Second"
// 获取类型名称
typeName := var1 + "Type"
// 根据类型名称创建类型
typeObj, _ := getTypeByName(typeName)
// 创建变量
variable := reflect.New(typeObj).Elem()
fmt.Printf("Type: %T\nValue: %v\n", variable.Interface(), variable.Interface())
}
// 根据类型名称获取类型对象
func getTypeByName(typeName string) (reflect.Type, error) {
// 遍历当前包中的所有类型
for _, pkg := range reflect.ValueOf(main).Elem().FieldByName("Type").Interface().([]interface{}) {
// 获取类型对象
typeObj := reflect.TypeOf(pkg).Elem()
// 检查类型名称是否匹配
if typeObj.Name() == typeName {
return typeObj, nil
}
}
return nil, fmt.Errorf("Type not found: %s", typeName)
}
这段代码首先定义了两个类型 FirstType
和 SecondType
。然后,根据给定的字符串 var1
,我们将其与字符串 "Type"
进行拼接,得到类型名称 "SecondType"
。接下来,我们使用反射获取类型名称对应的类型对象,并使用 reflect.New
创建一个新的变量。最后,我们打印出变量的类型和值。
请注意,这只是一个示例代码,实际应用中可能需要根据具体情况进行适当的修改和错误处理。
英文:
Is it possible to create variable with type from string?
Example:<br>
I have two types:
type FirstType struct {
...
}
type SecondType struct {
...
}
// also I have a string variable
var1 := "Second"
I want to create variable with type - String value + "Type"
:
var variable = []var1+"Type" // slice of "SecondType"
Expected result is like in this case:
var variable = []SecondType
Thanks!
答案1
得分: 7
这是不可能的。Go语言不提供创建静态未知类型变量的功能。变量的类型始终是静态已知的。考虑使用接口代替。
英文:
This is not possible. Go does not provide functionality to create variables of types that are not known statically. The type of a variable is always known statically. Consider using interfaces instead.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论