Распаковать фрагмент в значения структуры - PullRequest
0 голосов
/ 21 июня 2020

Допустим, у вас есть эта структура,

type Color struct {
    R uint8
    G uint8
    B uint8
    A uint8
}

И этот фрагмент,

s := []uint8{50, 60, 100, 100}

Есть ли способ «распаковать» фрагмент в структуру? (Например, с оператором распространения или чем-то еще)

c := Color{s...}

Вместо этого я имею в виду

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

1 Ответ

0 голосов
/ 21 июня 2020

К сожалению, это невозможно. Если вы хотите сократить объем писательской работы, можно найти обходной путь:

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...)

Надеюсь, это тебе поможет.

...