golang-101-hacks(12)——切片作为函数参数传递注go语言slice截?。罕疚氖嵌?golang-101-hacks 中文翻译 。
在Go语言中go语言slice截取 , 函数参数是值传递 。使用slice作为函数参数时go语言slice截?。?函数获取到go语言slice截取的是slice的副本:一个指针,指向底层数组的起始地址,同时带有slice的长度和容量 。既然各位熟知数据存储的内存的地址 , 现在可以对切片数据进行修改 。让go语言slice截取我们看看下面的例子:
In Go, the function parameters are passed by value. With respect to use slice as a function argument, that means the function will get the copies of the slice: a pointer which points to the starting address of the underlying array, accompanied by the length and capacity of the slice. Oh boy! Since you know the address of the memory which is used to store the data, you can tweak the slice now. Let's see the following example:
运行结果如下
由此可见,执行modifyValue函数,切片s的元素发生了变化 。尽管modifyValue函数只是操作slice的副本,但是任然改变了切片的数据元素,看另一个例子:
You can see, after running modifyValue function, the content of slice s is changed. Although the modifyValue function just gets a copy of the memory address of slice's underlying array, it is enough!
See another example:
The result is like this:
而这一次 , addValue函数并没有修改main函数中的切片s的元素 。这是因为它只是操作切片s的副本 , 而不是切片s本身 。所以如果真的想让函数改变切片的内容 , 可以传递切片的地址:
This time, the addValue function doesn't take effect on the s slice in main function. That's because it just manipulate the copy of the s, not the "real" s.
So if you really want the function to change the content of a slice, you can pass the address of the slice:
运行结果如下
golang中数组和slice作为参数的区别最主要的区别是:slice支持负数的下标(代表从字符串结尾开始算位置),substring不支持
substring() 方法用于提取字符串中介于两个指定下标之间的字符 。主要用于字符串截取
stringObject.substring(start,stop)
start:必需 。一个非负的整数 , 规定要提取的子串的第一个字符在 stringObject 中的位置 。
end:可选 。一个非负的整数 , 比要提取的子串的最后一个字符在 stringObject 中的位置多 1 。
如果省略该参数 , 那么返回的子串会一直到字符串的结尾 。
例如:"abcdefg".substring(3,5)返回de,字符串的第3个字符是d(从0开始,即a是第0个字符),截取到第5个字符前(不包括第5个)
与 slice()方法不同的是 , substring() 不接受负的参数 。
slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分 。
stringObject.slice(start,end)
start:要抽取的片断的起始下标 。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置 。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推 。
end:紧接着要抽取的片段的结尾的下标 。若未指定此参数 , 则要提取的子串包括 start 到原字符串结尾的字符串 。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置 。
slice() 比 substring() 要灵活一些,因为它允许使用负数作为参数 。
go语言中数组使用的注意事项和细节1、数组是多个 相同类型 的数据的组合,一个数组一旦声明/定义了,其 长度是固定的,不能动态变化。
2、var arr []int这时arr就是一个slice 切片。
3、数组中的元素可以是任何数据类型,包括值类型和引用类型,但是 不能混用。
4、数组创建后,如果没有赋值,有默认值如下:
数值类型数组:默认值为 0
字符串数组:默认值为 ""
【go语言slice截取 golang slice操作】bool数组:默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的 。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型 ,在默认情况下是 值传递,因此会进行值拷贝 。数组间不会相互影响 。
9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式) 。
10、长度是数组类型的一部分 , 在传递函数参数时,需要考虑数组的长度 , 看以下案例:
题1:编译错误,因为不能把[3]int类型传递给[]int类型 , 前者是数组,后者是切片;
题2:编译错误,因为不能把[3]int类型传递给[4]int类型;
题3:编译正确,因为[3]int类型传给[3]int类型合法 。
substring截取字符串有时候截取不到substring截取字符串有时候截取不到是因为substring的参数设定错误所导致的 。例如,如果两个参数的值相同,或者第一个参数的值大于第二个参数的值,那么就会截取不到子字符串 。此外,如果参数的值超出字符串的长度,也会出现截取不到的情况 。
go语言中实现切片(slice)的三种方式定义一个切片,然后让切片去引用一个已经创建好的数组 。基本语法如下:
索引1:切片引用的起始元素位
索引2:切片只引用该元素位之前的元素
例程如下:
在该方法中,我们未指定容量cap,这里的值为5是系统定义的 。
在方法一中,可以用arr数组名来操控数组中的元素,也可以通过slice切片来操控数组中的元素 。切片是直接引用数组 , 数组是事先存在的,程序员是可见的 。
通过 make 来创建切片,基本语法如下:
make函数第三个参数cap即容量是可选的,如果一定要自己注明的话,要注意保证cap≥len 。
用该方法可以 指定切片的大小(len)和容量(cap)
例程如下:
由于未赋值系统默认将元素值置为0,即:
数值类型数组:默认值为 0
字符串数组:默认值为 ""
bool数组:默认值为 false
在方法二中,通过make方式创建的切片对应的数组是由make底层维护,对外不可见 , 即只能通过slice去访问各个元素 。
定义一个切片,直接就指定具体数组,使用原理类似于make的方式 。
例程如下:
go语言slice截取的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于golang slice操作、go语言slice截取的信息别忘了在本站进行查找喔 。
推荐阅读
- pdf是什么格式图片,pdf是什么jpg
- 虚拟机无法挂载软件,虚拟机无法挂载软件怎么解决
- go语言图片壁纸 go语言路线图
- 打麻将前期如何推广广告,打麻将广告文案
- 路由器二维码怎么删除掉,路由器二维码怎么删除掉啊
- sqlserver设置宽表,sqlplus设置显示宽度
- oracle怎么安装装 oracle 安装
- 首播选视频号怎么选,视频号怎么入选上热门
- 策略益智休闲小游戏大全,休闲益智小游戏,超多玩法,开心一整天!