golang slice index out of range错误
2017-02-24 18:17
323 查看
直接上代码
编译正常,运行报错如下
index越界,于是改了一下代码
输出如下
也就是说,slice声明的时候如果不同时初始化数据,默认长度和容量都是0,下标0意味着长度是1,所以index越界了。
第一,声明的时候初始化数据,例如
第二,从已经初始化数据的slice‘切’出来
第三,append方法,会默认扩容,
输出
append方法在slice长度不足的时候,会进行扩容,注释如下
var group []string group[0]="abc" fmt.Println(group[0])
编译正常,运行报错如下
panic: runtime error: index out of range goroutine 1 [running]: panic(0x47a880, 0xc42000a110) /opt/tools/go1.7.3/src/runtime/panic.go:500 +0x1a1 main.main() /opt/IdeaProjects/test-embeded-struct/main.go:11 +0x14 exit status 2
index越界,于是改了一下代码
var group []string fmt.Println(len(group)) fmt.Println(cap(group)) group[0]="abc" fmt.Println(group[0])
输出如下
0 0 panic: runtime error: index out of range goroutine 1 [running]: panic(0x48fec0, 0xc42000a110) /opt/tools/go1.7.3/src/runtime/panic.go:500 +0x1a1 main.main() /opt/IdeaProjects/test-embeded-struct/main.go:13 +0x10a exit status 2
也就是说,slice声明的时候如果不同时初始化数据,默认长度和容量都是0,下标0意味着长度是1,所以index越界了。
那么,使用slice的时候有下面几种方式
,第一,声明的时候初始化数据,例如
test:=[]string{"a","b","c"}
第二,从已经初始化数据的slice‘切’出来
test:=[]string{"a","b","c"} your_string=test[0:1]
第三,append方法,会默认扩容,
var group []string fmt.Println(len(group)) fmt.Println(cap(group)) group=append(group,"hahaha") group[0]="abc" fmt.Println(len(group)) fmt.Println(cap(group)) fmt.Println(group[0])
输出
0 0 1 1 abc
append方法在slice长度不足的时候,会进行扩容,注释如下
// The append built-in function appends elements to the end of a slice. If // it has sufficient capacity, the destination is resliced to accommodate the // new elements. If it does not, a new underlying array will be allocated. // Append returns the updated slice. It is therefore necessary to store the // result of append, often in the variable holding the slice itself: // slice = append(slice, elem1, elem2) // slice = append(slice, anotherSlice...) // As a special case, it is legal to append a string to a byte slice, like this: // slice = append([]byte("hello "), "world"...) func append(slice []Type, elems ...Type) []Type
相关文章推荐
- python PIL, 错误:IndexError: string index out of range
- IndexError: list index out of range的错误原因
- mybatis错误Parameter index out of range (1 > number of parameters, which is 0)
- DataGridView绑定Ilist对象,出现IndexOutOfRangeException错误的解决方法
- Android Studio 2.0+发布APK出现ExternalSystemException: String index out of range: -123错误
- IndexError: list index out of range的错误原因 和python sorted函数以及operator.itemgetter函数
- Mabatis错误提示Parameter index out of range的处理方法
- 错误:list assignment index out of range 和list index out of range
- Hibernate query.list()查询发生java.lang.StringIndexOutOfBoundsException: String index out of range: 0错误
- DataGridView绑定Ilist对象,出现IndexOutOfRangeException错误的解决方法
- 解决java.lang.IllegalArgumentException: pointerIndex out of range 或者 arrayindexoutofboundsexception的错误
- IndexError: list index out of range的错误原因
- Mybatis 错误信息:Parameter index out of range
- java.lang.StringIndexOutOfBoundsException: String index out of range: 0错误的原因 3ff0
- 解决SSO客户端验证错误String index out of range
- 解决java.lang.IllegalArgumentException: pointerIndex out of range 或者 arrayindexoutofboundsexception的错误
- Lucene.Net 的“System.IndexOutOfRangeException: 索引超出了数组界限”错误
- Android 多点触控错误处理(java.lang.IllegalArgumentException: pointerIndex out of range)
- **Python错误记录:IndexError: list index out of range**
- IndexError: list index out of range的错误原因