2016-07-27 3 views
0

Я пытался добавить новый элемент в срезе, так же, как добавление нового элемента к list в Python, но есть ошибкаКак добавить новый элемент в срез?

package main 

import "fmt" 

func main() { 
    s := []int{2, 3, 5, 7, 11, 13} 
    printSlice(s) 

    s[len(s)] = 100 
    printSlice(s) 
} 

func printSlice(s []int) { 
    fmt.Printf("%v\n", s) 
} 

и выход

[2 3 5 7 11 13] 

panic: runtime error: index out of range 

Как может Затем я добавляю новый элемент в срез?

Правильно ли это, что slice в Го является типом данных шкафа до list в Python?

Спасибо.

+2

https://gobyexample.com/slices – abhink

+1

Также в [Действующий Go] (https://golang.org/doc /effective_go.html#append), [Спецификация языка Go] (https://golang.org/ref/spec#Appending_and_copying_slices) и в [Tour of Go] (https://tour.golang.org/moretypes/ 7) – JimB

+0

См. Также: http://stackoverflow.com/questions/20195296/golang-append-an-item-to-a-slice/20197469#20197469 – gavv

ответ

3

Аппликация в Go использует встроенный метод append. Например:

s := []byte{1, 2, 3} 
s = append(s, 4, 5, 6) 
fmt.Println(s) 
// Output: [1 2 3 4 5 6] 

Вы правильны, дольки в Go близко к списку Python, и, на самом деле, многие из той же индексации и нарезка операции над ними работать.

Когда вы делаете:

s[len(s)] = 100 

он паникует, потому что вы не можете получить доступ к значению за пределами длины среза. Здесь, похоже, возникает некоторая путаница, потому что в Python это работает точно так же. Попытка выше в Python (если вы уже расширили список) даст:

IndexError: list assignment index out of range 
Смежные вопросы