多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
切片 1、定义 var 变量名 [] type 与数组的区别,在括号中没有定义长度 引用类型:值是内存地址的值 2、举例 var a[]int var a[]string 默认值 a=0 3、切片初始化 var a[]int=a[0:2] 0和2都是下标 4、举例 var a[5] int var b[]int=a[0:1] var b[]int=a[0:] 0至末尾 var b[]int=a[:4] 5、切片初始化 var b[]int=[]int[1,2,3,4,5] 6、遍历 a、下标遍历 b、for....range 7、思考题 var a [5]int var b = a[1:3] a[0] = 100 a[1] = 200 b[0] = ? b[1] = ? var a [5]int var b = a[1:3] b[0] = 100 b[1] = 200 a[0] = ? a[1] = ? 切片类型 8. 切⽚片的内存布局 ![](https://box.kancloud.cn/37d9ce98b525c68e92d5e05c29fa4489_700x154.png) func Test3(){ var a[5]int b := a[1:3] //越界访问会panic b[100] = 100 fmt.Printf("b:%#v\n",a) } 9. 切片的好处 func Test4(b []int)(int) { var sum int for i:=0;i<len(b);i++ { sum = sum + b[i] } b[0]=100 return sum } func main (){ result = Test4(a[:]) fmt.Printf("sum:%d\n",result) fmt.Printf("a:%#v\n",a) } 10、切片创建 只能用make内置函数来创建切片 make([]type,len,cap) 类型,长度,容量 make([]type,len) 容量就是等于长度 var b[]int b = make([]int,5,10) 底层创建一个数组 ![](https://box.kancloud.cn/1d019c112d20a02b02089b0d1aec1c9c_709x228.png) 11、make参数len和cap的理解 package main import "fmt" func main() { var a []int = make([]int, 5, 10) a[4] = 100 b := a[0:10] b[9] = 100 fmt.Printf("%v", a) fmt.Printf("%v", b) } 12、切片的copy和append操作 package main import "fmt" func main() { sl := []int{1,2,3} s2 := make([]int, 10) copy(s2, s1) } 将s1的值拷贝至s2里面 package main import "fmt" func main() { sl := []int{1,2,3} s1 = append(s1, 1, 2,3) } append只接收单个元素 s5 := append(s3,s4...) 此种方式可以将s4的值追加到s3后面 s4... 省略号是将s4的切片展开 13、字符串的内存布局 字符串的底层是切片 ,byte类型的数组 ![](https://box.kancloud.cn/3d14364a2f25ff532c232ad468ea2eeb_480x285.png) 字符串是只读的。修改字符串需要将字符串转换成切片,然后将切片下标的值进行定义,再重新定义字符串。 ~~~ func tstrslice() { var str = "hello world" var b []byte = []byte(str) b[0] = 'a' str1 := string(b) fmt.Printf("str1:%s\n",str1) } ~~~ 将一个字符串进行首尾互换 ~~~ func testStrReverse2() { str := "hello world" b := []byte(str) for i:=0;i<len(b)/2;i++ { b[i],b[len(b)-i-1] = b[len(b)-i-1],b[i] } str1 := string(b) fmt.Printf("%v\n",str1) } ~~~ 对中文的处理 ~~~ func testStrReverse2utf8() { str := "hello world我爱你" b := []rune(str) for i:=0;i<len(b)/2;i++ { b[i],b[len(b)-i-1] = b[len(b)-i-1],b[i] } str1 := string(b) fmt.Printf("%v\n",str1) } ~~~ rune 类型是表示一个utf8的字符