seo做的好的网站,seo技术培训江门,web如何做网站,网站上做旅游卖家要学什么软件Python中的数组(这里指的是List类型)及其切片Slice基本相同#xff0c;但在Go语言中这两者差别很大。
1 数组
Go语言中的数组(Array)存放的是长度固定、类型固定并且存储位置连续的一系列元素。
1.1 声明
Go语言中数组的声明方式如下#xff1a; arr1 : [5]string{… Python中的数组(这里指的是List类型)及其切片Slice基本相同但在Go语言中这两者差别很大。
1 数组
Go语言中的数组(Array)存放的是长度固定、类型固定并且存储位置连续的一系列元素。
1.1 声明
Go语言中数组的声明方式如下 arr1 : [5]string{a, b, c, d, e}arr2 : [...]string{g, h, i} //自动推导出数组长度,省略号不可忽略arr3 : [5]string{1: j, 2: k} //指定索引为1和2的元素值其余默认为空arr4 : [100]int{} //创建一个保存1到100的整数的数组for i : 0; i len(arr4); i {arr4[i] i 1}1.2 遍历
Go语言中数组的遍历可以使用range。具体如下
package mainimport (fmtstrconv
)func main() {arr0 : [3]string{hello, nihao, dajiahao}for i, v : range arr0 {fmt.Println(数组arr0的第 strconv.Itoa(i) 个元素为: v)}arr1 : [100]int{} //创建一个保存1到100的整数的数组for i : 0; i len(arr1); i {arr1[i] i 1}sum1 : 0 //计算123……100for _, v : range arr1 {sum1 v}fmt.Println(1到100的相加总和为 strconv.Itoa(sum1))
}2 切片
Go语言的切片虽然也是基于数组来实现的但两者在使用上有些差别。
2.1 声明
Go语言中常用的切片的声明方法如下
package main
import (fmtstrconv
)
func main() {array : [7]int{1, 2, 3, 4, 5, 6, 7}slice0 : array[2:6] //利用数组生成切片fmt.Println(slice0更改前:, slice0)slice0[1] 10fmt.Println(slice0更改后:, slice0)fmt.Println(slice0更改后的array:, array)slice1 : []string{a, b, c} //中括号里面不要加...fmt.Println(切片slice1:, slice1)slice2 : make([]string, 4, 8) //声明一个长度为4容量为8的空切片fmt.Println(切片slice2:, slice2)fmt.Println(切片slice2,长度为: strconv.Itoa(len(slice2)) ,容量为: strconv.Itoa(cap(slice2)))
}其执行结果如下 slice0更改前: [3 4 5 6] slice0更改后: [3 10 5 6] slice0更改后的array: [1 2 3 10 5 6 7] 切片slice1: [a b c] 切片slice2: [ ] 切片slice2,长度为:4,容量为:8 关于切片有以下几点说明
利用数组生成的切片切片和原数组指向的是同一片内存空间所以对切片中的数据进行修改底层数组的值也会跟着修改。切片的长度和容量不是一回事。Go语言给slice2分配了一块容量为8的内存空间但目前只有4个内存空间有元素(“”)。切片的循环遍历方法与数组相同这里不再详细介绍。
2.2 append函数
Go语言中的切片可以看作是不定长数组可以通过append函数向切片中添加元素返回新切片。
package main
import fmt
func main() {slice2 : []string{2, 3, 3}slice3 : make([]string, 4, 8)fmt.Println(slice3的内存地址, slice3[0])slice4 : []string{f, g}slice3 append(slice3, slice4...)fmt.Println(slice3的内存地址, slice3[0])slice3 append(slice3, slice2...)fmt.Println(slice3的内存地址, slice3[0])fmt.Println(slice3)
}其执行结果如下 slice3的内存地址 0xc00011c000 slice3的内存地址 0xc00011c000 slice3的内存地址 0xc000122000 [ f g 2 3 3] 这里要注意以下几点
append()中的参数可以是单个字符也可以是切片类型但不可以是数组。当切片的容量未满时往切片内添加新的元素时新元素会追加在原切片元素的后面。若切片容量满了则会开辟一片新的内存空间。