美文网首页
golang 切片在函数传递

golang 切片在函数传递

作者: jojo1313 | 来源:发表于2020-06-03 10:17 被阅读0次

背景: 切片当参数传递时,无法append

package main
func test(a []int){
    a=append(a,1,2,3)  // print [89 4 5 6 1 2 3]
}
func main(){
    var s []int=[]int{89,4,5,6}
    test(s)
    fmt.Println(s)
}

原因: go语言中切片是地址传递,test函数添加的1,2,3后被分配了新的地址,s切片还是指向原来的地址,a和s内存地址不一样


image.png

解决方法:推荐方法2
1.在test函数返回新的切片,main函数接受返回结果

package main
import "fmt"
func test(a []int)(b []int){
    b=append(a,1,2,3)
    return
}
func main(){
    var s []int=[]int{89,4,5,6}
    s=test(s)
    fmt.Println(s)
}
  1. 在函数传递切片值(值的地址),&获取切片地址
package main
import "fmt"
func test(a *[]int){
    *a=append(*a,1,2,3,7)  // *对指针取值
    fmt.Printf("%p\n",&a)
}
func main(){
    var s []int=[]int{89,4,5,6}
        test(&s)  // &获取切片地址
    fmt.Printf("%p\n",&s)
    fmt.Println(s)
}
image.png

相关文章

  • golang 切片在函数传递

    背景: 切片当参数传递时,无法append 原因: go语言中切片是地址传递,test函数添加的1,2,3后被分配...

  • go interface{}

    在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类...

  • interface{}、类型断言

    在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类...

  • interface{}、类型断言

    在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类...

  • golang 从 map 获取值时的值拷贝问题

    实际场景 我们知道 golang 中,slice, map, channel 是引用类型,函数之间传递都是以值拷贝...

  • golang-101-hacks(12)——切片作为函数参数传递

    注:本文是对golang-101-hacks中文翻译。在Go语言中,函数参数是值传递。使用slice作为函数参数时...

  • golang 函数间数组传值

    问题: eg: out: [1 2 3 4 5] 虽然说数组切片在函数传递时是按照引用的语义传递的,比如说在 sl...

  • 关于 Golang 的参数传递

    这里我们着重讨论参数传递的方式以及在 Golang 中函数调用前后(当然包括参数传递)对实参的影响。先了解一些基...

  • golang 函数

     在golang中,函数不仅可以用于封装代码、分割功能、解耦逻辑,还可以化身为普通的值,在其他函数间传递、赋予变量...

  • Golang基础(五)——函数二

    Golang基础(五)——函数二 @([07] golang)[Go总结] 匿名函数 匿名函数就是将一个函数直接赋...

网友评论

      本文标题:golang 切片在函数传递

      本文链接:https://www.haomeiwen.com/subject/yelvzhtx.html