簡體   English   中英

Golang - 如何將數組([])“轉換”為列表(...)?

[英]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上沒有附加方法)?

嘗試類似的東西:

return ui.NewSimpleGrid(1, grd_studentsList...)
                                           ^^^^

這在規范傳遞參數到...參數中提到。

它不起作用......

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM