【如何在Golang中将切片Slice传递给函数()】切片Slice是一个可变长度的序列,它存储类似类型的元素,不允许在同一个Slice中存储不同类型的元素。它就像一个数组有一个索引值和长度,但切片的大小是调整的——它们不像数组一样是固定大小的。在Go语言中,你可以将片传递给函数,这意味着函数获得片的副本。
切片通过值与切片容量、长度一起传递给函数,切片的指针总是指向底层数组。因此,如果我们在切片中做了一些改变,那么通过值传递给函数的切片将反映在函数外部的切片中。让我们通过一个例子来讨论这个概念:
范例1:
// Go program to illustrate how to
// pass a slice to the function
package mainimport "fmt"// Function in which slice
// is passed by value
func myfun(element []string) {// Modifying the given slice
element[2] = "Java"
fmt.Println( "Modified slice: " , element)
}// Main function
func main() {// Creating slice
slc := []string{ "C#" , "Python" , "C" , "Perl" }fmt.Println( "Initial slice: " , slc)// Passing the slice to the function
myfun(slc)fmt.Println( "Final slice:" , slc)}
输出如下:
Initial slice:[C# Python C Perl]
Modified slice:[C# Python Java Perl]
Final slice: [C# Python Java Perl]
说明:在上面的示例中, 我们有一个切片名为slc。该切片在myfun()功能。我们知道切片指针始终指向同一参考即使他们传入了一个函数。因此, 当我们将值C更改为索引值2处的Java时。此更改也反映了函数外部存在的片, 因此修改后的最终片为[C#Python Java perl].
范例2:
// Go program to illustrate how to
// pass a slice to the function
package mainimport "fmt"// Function in which slice
// is passed by value
func myfun(element []string) {// Here we only modify the slice
// Using append function
// Here, this function only modifies
// the copy of the slice present in
// the function not the original slice
element = append(element, "Java" )
fmt.Println( "Modified slice: " , element)
}// Main function
func main() {// Creating a slice
slc := []string{ "C#" , "Python" , "C" , "Perl" }fmt.Println( "Initial slice: " , slc)// Passing the slice
// to the functionmyfun(slc)
fmt.Println( "Final slice: " , slc)}
输出如下:
Initial slice:[C# Python C Perl]
Modified slice:[C# Python C Perl Java]
Final slice:[C# Python C Perl]
推荐阅读
- 如何为亚马逊软件开发工程面试做准备()
- 如何在Golang中将数组传递给函数()
- 如何使用Selenium Python在历史记录中来回移动()
- 如何测量C函数执行所花费的时间()
- 如何使对象有资格使用Java进行垃圾回收()
- Python如何使用Kivy制作计算器()
- linux 下 自动化跑压测脚本
- 百亿级监控场景大数据分位值计算实践
- #yyds干货盘点# 简单化MySQL优化小妙招