package mainimport ( "fmt" "reflect" "errors")/*使用append函数增加slice元素slice可以实现栈注意:1.超过slice容量后,会为底层函数重新开辟更大内存空间2.开辟新的内存空间,需手动更新slice的指针 */func main() { //append myslice := make([]int, 1, 1) for i := 0 ; i < 10 ; i++ { //更新slice myslice = append(myslice, i + 1) fmt.Println(i,": 当前容量为", cap(myslice), myslice) } /* 0 : 当前容量为 2 [0 1] 1 : 当前容量为 4 [0 1 2] 2 : 当前容量为 4 [0 1 2 3] 3 : 当前容量为 8 [0 1 2 3 4] 4 : 当前容量为 8 [0 1 2 3 4 5] 5 : 当前容量为 8 [0 1 2 3 4 5 6] 6 : 当前容量为 8 [0 1 2 3 4 5 6 7] 7 : 当前容量为 16 [0 1 2 3 4 5 6 7 8] 8 : 当前容量为 16 [0 1 2 3 4 5 6 7 8 9] 9 : 当前容量为 16 [0 1 2 3 4 5 6 7 8 9 10] */ //rune实质为int32 byte实质为uint8 myrunes := []rune("你好") mybytes := []byte("世界") fmt.Println(reflect.TypeOf(myrunes), reflect.TypeOf(mybytes)) //stack mys := stackint{} //入栈 for i := 0; i < 10 ; i++ { mys.stackPush(i) } mys.showMystack() //出栈 for i := 0; i < 11 ; i++ { mys.stackPop() } mys.showMystack() //入栈 for i := 0; i < 10 ; i++ { mys.stackPush(i) } mys.showMystack()}type stackint struct { s []int}//入栈func (mystack *stackint)stackPush(x int) { mystack.s = append(mystack.s, x)}//出栈func (mystack *stackint)stackPop() (int,error) { if len(mystack.s) != 0 { tempint := mystack.s[len(mystack.s) - 1] mystack.s = mystack.s[:len(mystack.s) - 1] return tempint, nil } else { return 0, errors.New("栈为空") }}func (mystack *stackint)showMystack() { fmt.Println(mystack.s)}