go slice study notes
前两天发现一个关于go slice赋值的问题,测试代码如下:
a := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
b := a[:5]
c := b[:10]
fmt.Println("a:", a, " b:", b, " c:", c)
结果:
a: [1 2 3 4 5 6 7 8 9 0] b: [1 2 3 4 5] c: [1 2 3 4 5 6 7 8 9 0]
//指针指向加len的拷贝
如果c赋值的语句改为c:=b[9]则直接panic。
slice的具体结构如下:
struct Slice
{ // must not move anything
byte* array; // actual data
uintgo len; // number of elements
uintgo cap; // allocated number of elements
};
这情况应该是len长度的检验问题