Loop through the Nth fields one time of struct n a Go

153 Views Asked by At

Iterate through the fields of a struct in Go

I have read above thread and now I'm trying to extend it by processing multiple items at a time

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, '$'})
}

Error I had before: panic: reflect.Value.Interface: cannot return value obtained from unexported field or method

1

There are 1 best solutions below

0
On BEST ANSWER

Go requires you to make the first letter of any variable or function that you wish to use outside of the package (aka EXPORTED). Because you're trying to pass variables to another package, in this case the reflect package, but they're not exportable. It's very common that all struct field names are capitalized as best practice.

The capitalized->exported paradigm is one of the few things I don't like about the language, but that's the way it is.