Skip to content

structs.InitDefaults: can't set slice to array #172

@d-enk

Description

@d-enk
  • OS: linux
  • GO Version: 1.22.3
  • Pkg Version: 0.6.15
package main

import "github.com/gookit/goutil/structs"

func maint() {
	type Config struct {
		Ints [3]int `default:"1,2,3"`
	}

	var c Config

	structs.InitDefaults(&c)
	// panic: reflect.Set: value of type []int is not assignable to type [3]int
}

goutil/structs/init.go

Lines 190 to 193 in 9ef6bd0

valRv, err := reflects.ConvSlice(reflect.ValueOf(ss), fv.Type().Elem())
if err == nil {
reflects.SetRValue(fv, valRv)
}

Need something like:

if fv.Kind() == reflect.Array {
	for i := 0; i < valRv.Len(); i++ {
		fv.Index(i).Set(valRv.Index(i))
	}
}

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions