How to create a golang struct with given name of string

Viewed 37

I am using protobuf to generate a lot of struct, and I want to use gorm.io to Db.AutoMigrate all the struct in the generate package into the database. But the function func (*gorm.DB).AutoMigrate(dst ...interface{}) error can only accept variadic struct instance as its parameters. The following code can retrieved all the name of structs is string format.

package main

import (
    "fmt"
    "go/ast"
    "go/parser"
    "go/token"
)

func main() {
    // src is the input for which we want to inspect the AST.
    src := `
package service
type Screen struct {
    Width float64
    Height float64
}

type Memory struct {
    Unit float64
}
`

    // Create the AST by parsing src.
    fset := token.NewFileSet() // positions are relative to fset
    f, err := parser.ParseFile(fset, "src.go", src, 0)
    if err != nil {
        panic(err)
    }

    for _, node := range f.Decls {
        switch node.(type) {

        case *ast.GenDecl:
            genDecl := node.(*ast.GenDecl)
            for _, spec := range genDecl.Specs {
                switch spec.(type) {
                case *ast.TypeSpec:
                    typeSpec := spec.(*ast.TypeSpec)
                    fmt.Printf("Struct: name=%s\n", typeSpec.Name.Name)
                }
            }
        }
    }

}

My Question is:

This code can got all the name of structs , but the gorm.io need initialize the struct DB.AutoMigrate(&User{}). How can I do create a empty struct that specified by the string of the name at the runtime. eg. the "Screen" ===> &Screen{}.

0 Answers
Related