[英]Golang - How to “convert” an array ( [ ] ) to a list ( … )?
我正在使用UI lib( https://github.com/andlabs/ui )制作一個關於學生團體的程序。
ui.SimpleGrid允許輸入Control的“列表”:
func NewSimpleGrid(nPerRow int, controls ...Control) SimpleGrid
我覺得在Java和其他語言中,它只是作為一個數組工作,這基本上意味着給它一個可以工作。 但是,這在Go中看起來並不相同。
func initStudentsGrid(students ...Student) ui.SimpleGrid {
var i int
var grd_studentsList []ui.Grid
for i = 0; i < len(students); i++ {
grd_student := ui.NewGrid()
grd_student.Add(ui.NewLabel(students[i].group), nil, ui.West, true, ui.LeftTop, true, ui.LeftTop, 1, 1)
grd_student.Add(ui.NewLabel(students[i].lastName), nil, ui.West, true, ui.LeftTop, true, ui.LeftTop, 1, 1)
grd_student.Add(ui.NewLabel(students[i].firstName), nil, ui.West, true, ui.LeftTop, true, ui.LeftTop, 1, 1)
grd_studentsList = append(grd_studentsList, grd_student)
}
return ui.NewSimpleGrid(1, grd_studentsList)
該程序沒有編譯,因為:
不能使用grd_studentsList(type [] ui.Grid)作為類型ui.Control參數ui.NewSimpleGrid:[] ui.Grid不實現ui.Control(缺少ui.containerHide方法)
有沒有辦法從數組中執行某種“強制轉換”到所需的格式,因為無法逐個添加網格(在SimpleGrid上沒有附加方法)?
它不起作用......
cannot use grd_studentsList (type `[]ui.Grid`) as type `[]ui.Control`
in argument to `ui.NewSimpleGrid`
正如我之前提到的那樣(“ 內存布局意味着在Go? ”中無法將[]T
轉換為[]interface{}
,你無法在[]B
隱式轉換A[]
。
您需要先復制:
var controls []ui.Control = make([]ui.Control, len(grd_studentsList))
for i, gs := range grd_studentsList{
controls [i] = gs
}
然后使用正確的切片(使用正確的類型)
return ui.NewSimpleGrid(1, controls...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.