登录
首页 >  Golang >  Go问答

如何从 golang 中的 reflect.Value 获取潜在价值?

来源:Golang技术栈

时间:2023-04-13 17:36:25 251浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何从 golang 中的 reflect.Value 获取潜在价值?》,主要介绍了golang,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

所以我找到了一些代码来帮助我开始在 Go (golang) 中进行反射,但是我在获取底层值时遇到了麻烦,因此我基本上可以map[string]string从结构及其字段中创建一个。

最终,我想把结果变成 a map[string]interface{},但是这个问题有点阻碍我。

我目前拥有的代码:

package main

import (
    "fmt"
    "reflect"
)

type Foo struct {
    FirstName string `tag_name:"tag 1"`
    LastName  string `tag_name:"tag 2"`
    Age       int  `tag_name:"tag 3"`
}

func inspect(f interface{}) map[string]string {

    m := make(map[string]string)
    val := reflect.ValueOf(f).Elem()

    for i := 0; i 

运行代码的输出:

FirstName : Drew
LastName : Olson
Age : 

据我了解,FirstName 和 LastName 的输出是实际的 reflect.Value 对象,但对于字符串,值上的 String() 方法只输出底层字符串。我想获取 int 并将其更改为字符串,但是从 relfect 包文档中我没有立即看到它是如何完成的。

Soo....如何从 golang 中的 reflect.Value 中获取基础价值?

正确答案

如何解析值的一个很好的例子是fmt包。请参阅此代码

使用提到的代码来匹配您的问题将如下所示:

switch val.Kind() {
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    m[typeField.Name] = strconv.FormatInt(val.Int(), 10)
case reflect.String:
    m[typeField.Name] = val.String()    
// etc...
}

基本上你需要检查所有可用的 Kinds

终于介绍完啦!小伙伴们,这篇关于《如何从 golang 中的 reflect.Value 获取潜在价值?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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