У меня есть фрагмент, который состоит из фрагментов типа string. Я хотел бы иметь возможность назначать значения отдельным элементам этого среза, не обязательно по порядку. Затем, позже, я хотел бы иметь возможность изменить значение любого конкретного элемента. Я прочитал посты по тому же вопросу с ломтиками, но не могу понять, как применить это к ломтикам ломтиков. Рассмотрим этот код:
package main
import (
"fmt"
"strconv"
)
type aRow []string
type aGrid struct {
col []aRow
}
func main() {
var c aGrid
r := make(aRow, 4) // each row will have 4 elements
for i := 0; i < 3; i++ {
c.col = append(c.col, r) // there will be 3 rows
}
i, j := 1, 2
c.col[i][j] = "i=" + strconv.Itoa(i) + " j=" + strconv.Itoa(j)
fmt.Println("c= ", c)
// c= {[[ i=1 j=2 ] [ i=1 j=2 ] [ i=1 j=2 ]]}
}
Я хочу присвоить строку j-му элементу i-го среза c, но она назначает строку j-му элементу каждого среза c.
Я пытался получить значение поддержки внутреннего среза, например
i, j := 1, 2
c.col[i][j].value = "i=" + strconv.Itoa(i) + " j=" + strconv.Itoa(j)
// yields "c.col[i][j].value undefined (type string has no field or method value)"
, и указателей, таких как
p := &c.col[i][j]
p.value = "i=" + strconv.Itoa(i) + " j=" + strconv.Itoa(j)
// yields "p.value undefined (type *string has no field or method value)"
Чего мне не хватает?