for _, v := range(numbers) {
fmt.Println(v)
}
}
```
1 2 3 4 5
再看一个指针传递的例子go语言中切片如何作参数:
```
package main
import "fmt"
func processSlice(x *[]int) {
*x = append(*x, 6)
}
func main() {
var numbers = []int{1, 2, 3, 4, 5}
processSlice(numbers)
for _, v := range(numbers) {
fmt.Println(v)
}
}
```
1 2 3 4 5 6
slice for 循环中删除元素
方法1:
```
chars:=[]string{"a","a","b"}
fori:=0;ilen(chars);i++{
if chars[i]=="a" {
chars=append(chars[:i],chars[i+1:]...)
i--// form the remove item index to start iterate next item
}
}
fmt.Printf("%+v",chars)
```
方式2:
```
p := []int{1, -13, 9, 6, -21, 125}
j := 0
for _, n := range p {
if n0 {
p[j] = n//删除小于零的元素
j++
}
}
```
不改原slice
```
p := []int{1, -13, 9, 6, -21, 125}
j := 0
q := make([]int, len(p))
for _, n := range p {
if n0 {
q[j] = n//删除小于零的元素
j++
}
}
q = q[:j]
```
golang 切片在函数传递背景: 切片当参数传递时,无法append
原因: go语言中切片是地址传递,test函数添加的1,2 , 3后被分配了新的地址,s切片还是指向原来的地址,a和s内存地址不一样
解决方法:推荐方法2
1.在test函数返回新的切片,main函数接受返回结果
Golang 中数组(Array)和切片(Slice)的区别 Go 中数组的长度是不可改变的,而 Slice 解决的就是对不定长数组的需求 。他们的区别主要有两点 。
数组:
切片:
注意 1
虽然数组在初始化时也可以不指定长度,但 Go 语言会根据数组中元素个数自动设置数组长度 , 并且不可改变 。切片通过 append 方法增加元素:
如果将 append 用在数组上,你将会收到报错:first argument to append must be slice 。
注意 2
切片不只有长度(len)的概念,同时还有容量(cap)的概念 。因此切片其实还有一个指定长度和容量的初始化方式:
这就初始化了一个长度为3 , 容量为5的切片 。
此外 , 切片还可以从一个数组中初始化(可应用于如何将数组转换成切片):
上述例子通过数组 a 初始化了一个切片 s 。
当切片和数组作为参数在函数(func)中传递时,数组传递的是值,而切片传递的是指针 。因此当传入的切片在函数中被改变时,函数外的切片也会同时改变 。相同的情况,函数外的数组则不会发生任何变化 。
golang-101-hacks(12)——切片作为函数参数传递注:本文是对 golang-101-hacks 中文翻译 。
在Go语言中,函数参数是值传递 。使用slice作为函数参数时 , 函数获取到的是slice的副本:一个指针,指向底层数组的起始地址,同时带有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的副本,但是任然改变了切片的数据元素,看另一个例子:
推荐阅读
- jquery中文版,jquery 中文
- 下载迷你.,下载迷你世界恐龙版本
- 区块链技术趋势存储,区块链存储的技术
- 浩方cs服务器,浩方平台cs设置路径不对
- python反函数精度 python怎么求反三角函数
- 怎么把电脑u盘启动,如何使电脑u盘启动
- unity3.0游戏开发,unity游戏开发技术详解与典型案例
- 关于经营军舰游戏,关于经营军舰游戏的电影
- linux写入网口命令 linux给网口配地址