【问题标题】:Loop through the Nth fields one time of struct n a Go遍历 struct n a Go 的第 N 个字段
【发布时间】:2023-03-03 14:57:02
【问题描述】:

Iterate through the fields of a struct in Go

我已经阅读了上面的帖子,现在我正在尝试通过一次处理多个项目来扩展它

package main

import (
    "fmt"
    "reflect"
)

type BaseStats struct {
    value1       int
    value2       byte
    value3       int
    value4       byte
}

func StatsCreate(stats BaseStats) {
    v := reflect.ValueOf(stats)
    val := make([]interface{}, v.NumField())
    for i := 0; i< v.NumField(); i+=2 {
        val[i+0] = v.Field(i+0).Interface().(int)
        val[i+1] = v.Field(i+1).Interface().(byte)
        fmt.Printf("%v %v", val[i+0], val[i+1])
    }
}
func main() {
    StatsCreate(BaseStats{20, '%', 400, '$'})
}

我之前遇到的错误:panic: reflect.Value.Interface: cannot return value obtained from unexported field or method

【问题讨论】:

标签: go reflect


【解决方案1】:

Go 要求您将希望在包之外使用的任何变量或函数的第一个字母(也称为 EXPORTED)。因为您试图将变量传递给另一个包,在本例中为 reflect 包,但它们不可导出。作为最佳实践,所有结构字段名称都大写是很常见的。

大写的->导出的范式是我不喜欢该语言的少数几个方面之一,但事实就是如此。

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2012-05-07
    • 2016-07-23
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多