登录
首页 >  Golang >  Go问答

如何创建动态类型变量

来源:stackoverflow

时间:2024-04-11 09:00:35 484浏览 收藏

哈喽!今天心血来潮给大家带来了《如何创建动态类型变量》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我可以创建“sample”类型的变量“model”,如下所示:

type sample struct {
    id   int    `jsonapi:"attr,id,omitempty"`
    name string `jsonapi:"attr,name,omitempty"`
}

var model sample // created successfully

我能够成功创建它,因为我已经知道结构类型(示例)。

但是,当我尝试创建类似的变量“a”时,如下所示,出现语法错误:

package main

import (
    "fmt"
    "reflect"
)

type Sample struct {
    Id   int    `jsonapi:"attr,id,omitempty"`
    Name string `jsonapi:"attr,name,omitempty"`
}

func test(m interface{}) {
    fmt.Println(reflect.TypeOf(m)) // prints 'main.Sample'

    var a reflect.TypeOf(m) // it throws - syntax error: unexpected ( at end of statement
}

func main() {

    var model Sample // I have created a model of type Sample
    model = Sample{Id: 1, Name: "MAK"}
    test(model)
}

请告知如何在 go 中创建动态类型的变量。


解决方案


package main

import (
    "fmt"
    "reflect"
)

type sample struct {
    id   int    `jsonapi:"attr,id,omitempty"`
    name string `jsonapi:"attr,name,omitempty"`
}

func test(m interface{}) {
    fmt.println(reflect.typeof(m)) // prints 'main.sample'

    a, ok := m.(main.sample)
    if ok {
        fmt.println(a.id)
    }
}

func main() {

    var model sample // i have created a model of type sample
    model = sample{id: 1, name: "mak"}
    test(model)
}

如果你想要更多的活力,你可以使用类型开关。而不是 a,ok := m.(main.sample),您可以这样做

switch a := m.(type) {
    case main.Sample:
        fmt.Println("It's a %s", reflect.TypeOf(m))
    case default:
        fmt.Println("It's an unknown type")
}

以上就是《如何创建动态类型变量》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>