相关疑难解决方法(0)

如何在Go中运行时从其类型创建结构的新实例?

在Go中,如何在运行时从其类型创建对象的实例?我想你也需要先得到type对象的实际值?

我试图做懒惰的实例化以节省内存.

reflection go go-reflect

61
推荐指数
5
解决办法
4万
查看次数

有没有办法从字符串创建结构的实例?

给定一个结构:

type MyStruct struct {
    A int
    B int
}
Run Code Online (Sandbox Code Playgroud)

和一个带结构名称的字符串

a := "MyStruct"
Run Code Online (Sandbox Code Playgroud)

要么

a := "mypkg.MyStruct"
Run Code Online (Sandbox Code Playgroud)

如何从字符串名称而不是结构创建结构的实例?我的想法是创建一个应用程序,其中所有结构都链接到二进制文件中,但是从字符串创建运行时实例.(一种元元)

go

45
推荐指数
3
解决办法
3万
查看次数

Gorm Golang orm协会

我正在使用Go与GORM ORM.我有以下结构.关系很简单.One Town有多个地方,一个地方属于一个城镇.

type Place struct {
  ID          int
  Name        string
  Town        Town
}

type Town struct {
  ID   int
  Name string
}
Run Code Online (Sandbox Code Playgroud)

现在我想查询所有地方,并与他们所有的领域相处相应的城镇的信息.这是我的代码:

db, _ := gorm.Open("sqlite3", "./data.db")
defer db.Close()

places := []Place{}
db.Find(&places)
fmt.Println(places)
Run Code Online (Sandbox Code Playgroud)

我的示例数据库有这些数据:

/* places table */
id  name    town_id
 1  Place1        1
 2  Place2        1

/* towns Table */
id name
 1 Town1
 2 Town2
Run Code Online (Sandbox Code Playgroud)

收到了这个:

[{1 Place1 {0 }} {2 Mares Place2 {0 }}]

但是我期待收到这样的东西(这两个地方都属于同一个城镇):

[{1 Place1 {1 …

orm go go-gorm

28
推荐指数
3
解决办法
3万
查看次数

Reflect.Value.FieldByName导致恐慌

我在调用反射值的.FieldByName方法时遇到以下错误,确切的错误是: -

panic: reflect: call of reflect.Value.FieldByName on ptr Value
Run Code Online (Sandbox Code Playgroud)

而代码是: -

s := reflect.ValueOf(&value).Elem() (value is a struct)
metric := s.FieldByName(subval.Metric).Interface() (subval.Metric is a string)
Run Code Online (Sandbox Code Playgroud)

我知道这并不多,但这是我能得到的所有信息.

这是Go Playground代码的链接:http://play.golang.org/p/E038cPOoGp

reflection go

9
推荐指数
1
解决办法
2万
查看次数

如何在Golang中反映结构递归

我想递归地反映结构类型和值,但是失败了。我不知道如何递归地传递子结构。

错误如下。

panic: reflect: NumField of non-struct type

goroutine 1 [running]:
reflect.(*rtype).NumField(0xc0b20, 0xc82000a360)
    /usr/local/go/src/reflect/type.go:660 +0x7b
Run Code Online (Sandbox Code Playgroud)

我有两个结构PersonName

type Person struct {
    Fullname NameType
    Sex      string
}

type Name struct {
    Firstname string
    Lastname  string
}
Run Code Online (Sandbox Code Playgroud)

Person在main中定义该结构,并使用递归函数显示该结构。

person := Person{
    Name{"James", "Bound"},
    "Male",
}

display(&person)
Run Code Online (Sandbox Code Playgroud)

display函数递归显示结构。

func display(s interface{}) {
    reflectType := reflect.TypeOf(s).Elem()
    reflectValue := reflect.ValueOf(s).Elem()

    for i := 0; i < reflectType.NumField(); i++ {
        typeName := reflectType.Field(i).Name

        valueType := reflectValue.Field(i).Type()
        valueValue := reflectValue.Field(i).Interface()

        switch …
Run Code Online (Sandbox Code Playgroud)

go go-reflect

1
推荐指数
1
解决办法
3138
查看次数

标签 统计

go ×5

go-reflect ×2

reflection ×2

go-gorm ×1

orm ×1