# #go #variadic-functions #fyne
Вопрос:
Мне нужен срез под названием строки, содержащий число файнов.Контейнерные структуры. Затем мне нужно показать их все в виде строк в окне.
Я пытался сделать это:
rows := []*fyne.Container{}
rows = append(
rows,
container.New(
layout.NewGridLayout(4),
widget.NewLabel("Trigger"),
widget.NewLabel("Text"),
widget.NewLabel("Enter"),
widget.NewLabel("Active"),
),
)
w.SetContent(
container.New(
layout.NewGridLayout(1),
rows...
),
)
но я понимаю
невозможно использовать строки (введите []*fyne.Контейнер) как тип []fyne.CanvasObject в аргументе к контейнеру.Новый
И я не понимаю, почему, если я это сделаю:
w.SetContent(
container.New(
layout.NewGridLayout(1),
container.New(
layout.NewGridLayout(4),
widget.NewLabel("Trigger"),
widget.NewLabel("Text"),
widget.NewLabel("Enter"),
widget.NewLabel("Active"),
),
container.New(
layout.NewGridLayout(4),
widget.NewLabel("Trigger"),
widget.NewLabel("Text"),
widget.NewLabel("Enter"),
widget.NewLabel("Active"),
),
),
)
Это прекрасно работает… Разве это не должны быть одни и те же передаваемые отдельные структуры или []типа…?
Спасибо!
Ответ №1:
Метод ожидает фрагмент fyne.CanvasObject
s, который является интерфейсом, fyne.Container
реализуемым структурой.
Фрагмент типа структуры нельзя использовать вместо фрагмента типа интерфейса, даже если тип структуры удовлетворяет интерфейсу.
Ваш срез должен быть типа интерфейса, а не типа структуры. Затем вы можете добавить объекты, соответствующие интерфейсу, в этот срез:
rows := []fyne.CanvasObject{}
rows = append(
rows,
container.New(
layout.NewGridLayout(4),
widget.NewLabel("Trigger"),
widget.NewLabel("Text"),
widget.NewLabel("Enter"),
widget.NewLabel("Active"),
),
)