Go 将切片解包为结构值

Go 将切片解包为结构值,go,struct,slice,Go,Struct,Slice,假设你有这个结构 type Color struct { R uint8 G uint8 B uint8 A uint8 } 这一片 s := []uint8{50, 60, 100, 100} 有没有办法将切片“解包”到结构中?(比如与排列操作符或其他东西) 我的意思是 c := Color{s[0], s[1], s[2], s[3]} 不幸的是,没有办法做到这一点。如果您想减少写作工作量,可以采取以下解决方法: func NewColor(values

假设你有这个结构

type Color struct {
    R uint8
    G uint8
    B uint8
    A uint8
}
这一片

s := []uint8{50, 60, 100, 100}
有没有办法将切片“解包”到结构中?(比如与排列操作符或其他东西)

我的意思是

c := Color{s[0], s[1], s[2], s[3]}

不幸的是,没有办法做到这一点。如果您想减少写作工作量,可以采取以下解决方法:

func NewColor(values ...uint8) Color {
   return Color {
    R: values [0], G: values [1], B: values [2], A: values [3],
   }
}
但是,这是危险的,除非您还添加了越界检查。您可以添加类似的内容来防止它,但它可能会给您留下错误的颜色:

if len(values) != 4 { 
   return Color {} 
}
然后,您可以按照您想要的方式创建颜色:

s := []uint8{50, 60, 100, 100}
color := NewColor(s...)

希望对您有所帮助。

颜色{s[0],s[1],s[2],s[3]}
不错<代码>颜色{R:s[0],G:s[1],B:s[2],A:s[3]}会更好。
s := []uint8{50, 60, 100, 100}
color := NewColor(s...)