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

我正在try 懒惰实例化以节省内存.

推荐答案

要做到这一点,你需要reflect美元.

package main

import (
    "fmt"
    "reflect"
)

func main() {
    // one way is to have a value of the type you want already
    a := 1
    // reflect.New works kind of like the built-in function new
    // We'll get a reflected pointer to a new int value
    intPtr := reflect.New(reflect.TypeOf(a))
    // Just to prove it
    b := intPtr.Elem().Interface().(int)
    // Prints 0
    fmt.Println(b)

    // We can also use reflect.New without having a value of the type
    var nilInt *int
    intType := reflect.TypeOf(nilInt).Elem()
    intPtr2 := reflect.New(intType)
    // Same as above
    c := intPtr2.Elem().Interface().(int)
    // Prints 0 again
    fmt.Println(c)
}

您可以使用 struct 类型而不是int类型来做同样的事情.或者别的什么,真的.当涉及到映射和切片类型时,请确保了解new和make之间的区别.

Go相关问答推荐

无法找到与golang、nginx和postquist进行的docker-compose./主要

如何获得与cksum相同的CRC 32?

AWS S3 SelectObjectContent在AWS SDK v2 for Go中不返回结果

GORM Find方法中缺少字段

GoFR HTTP服务初始化中Open遥测传输和超时配置的说明

Golang在不写入磁盘的情况下为jpeg图像生成一致的哈希

通过 Terraform 中的 MapNestedAtribute 进行迭代

如何将Golang测试用例的测试覆盖率值与特定阈值进行比较

自定义 Fyne 自适应网格布局

无法将 graphql-ws 连接到 gqlgen

获取不带类型参数的泛型 struct 的类型名称

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

grpc-gateway:重定向与定义不匹配(原始文件)

通过 golang 中的 gremlin-go 库嵌入 gremlin 服务器

Go 泛型:自引用接口约束

panic :拨号 tcp:在 172.22.64.1:53 上查找 bookstoreDB:没有这样的主机

自定义指标未显示在 prometheus web ui 中,grafana 中也是如此

函数的递归调用以 goroutine 和惯用方式开始,以在所有工作 goroutine 完成时继续调用者

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string

如何获得Ent中数字列的总和