Не обновляется срез структур
Пытаюсь добавить элементы в массив ObjectList, отсортировать и затем вывести на экран, но ничего не работает, элементы попросту не добавляются.
package main
import (
"fmt"
"sort"
)
type Object struct {
Kind int
Message string
}
type ObjectList []*Object
func (objl ObjectList) Add(kind int, msg string) {
objl = append(objl, &Object{kind, msg})
}
func (objl ObjectList) Sort() {
sort.SliceStable(objl, func(i, j int) bool {
return objl[i].Kind < objl[j].Kind // sort from warn to fatal
})
}
func main() {
var list ObjectList
list.Add(0, "WARN USE IDENT")
list.Add(0, "WARN USE STRUCT INSTEAD")
list.Add(1, "unexpected syntax error")
list.Add(2, "panic")
list.Sort()
for _, obj := range list {
fmt.Println(obj.Message)
}
}
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
Ваши методы принимают копию среза вместо указателя на сам срез, поэтому изменения не сохраняются. Вот рабочий код:
func (objl *ObjectList) Add(kind int, msg string) {
if objl == nil {
return
}
*objl = append(*objl, &Object{kind, msg})
}
func (objl *ObjectList) Sort() {
if objl == nil {
return
}
sort.SliceStable(*objl, func(i, j int) bool {
return (*objl)[i].Kind < (*objl)[j].Kind
})
}