Golang 如何将切片传递给函数

Golang 如何将切片传递给函数

切片是一种变长序列,它存储相似类型的元素,您不允许在同一个切片中存储不同类型的元素。它就像一个具有索引值和长度的数组,但是切片的大小被调整,它们不是固定大小的,就像数组一样。在Go语言中,您可以将切片传递给函数,这意味着函数会获取切片的副本。

切片与其容量,长度一起按值传递给函数,切片的指针始终指向基础数组。因此,如果我们对通过值传递到函数中的切片进行了一些更改,则会反映在函数外部存在的切片中。让我们通过一个示例来讨论这个概念:

例1:

// Go程序演示如何
//将切片传递给函数
package main

import "fmt"

// 通过值传递切片的函数
func myfun(element []string) {

    // 修改给定的切片
    element[2] = "Java"
    fmt.Println("修改后的切片:", element)
}

// 主函数
func main() {

    //创建切片
    slc := []string{"C#","Python", "C", "Perl"}

    fmt.Println("初始切片:", slc)

    //将切片传递给函数
    myfun(slc)

    fmt.Println("最终切片:", slc)

} 
Go

输出:

初始切片:[C# Python C Perl]
修改后的切片:[C# Python Java Perl]
最终切片:[C# Python Java Perl]
Go

解释: 在上面的示例中,我们有一个名为slc的切片。将此切片传递给myfun()函数。我们知道,即使将它们传递到函数中,切片指针始终指向同一个引用。因此,当我们将值C更改为位于索引值2的Java时,此更改也反映在函数外部存在的切片中,因此修改后的最终切片为[C# Python Java perl]。

例2:

// Go程序演示如何
//将切片传递给函数
package main

import "fmt"

// 通过值传递切片的函数
func myfun(element []string) {

    // 在这里只修改了切片
    //使用append函数
    // 在此处,此函数只修改
    // 函数中存在的切片副本而不是原始切片
    element = append(element, "Java")
    fmt.Println("修改后的切片:", element)
}

// 主函数
func main() {

    //创建切片
    slc := []string{"C#","Python", "C", "Perl"}

    fmt.Println("初始切片:", slc)

    //将切片传递给函数

    myfun(slc)

    fmt.Println("最终切片:", slc)

} 
Go

输出:

初始切片: [C# Python C Perl]
修改后的切片: [C# Python C Perl Java]
最终切片: [C# Python C Perl]
Go

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册