GOLANG的参数传递、引用类型

简介: GOLANG的参数传递、引用类型

在Go语言中,参数传递可以分为值传递和引用传递,这取决于参数的类型。

  1. 值传递(Pass by Value):当传递基本类型(如整数、浮点数、布尔值等)或结构体(struct)作为参数时,实际上是将参数的副本传递给函数或方法。在函数内部对参数的修改不会影响原始值。

示例:

func modifyValue(x int) {
   
    x = 100
}

func main() {
   
    num := 10
    modifyValue(num)
    fmt.Println(num) // 输出:10
}

在上述示例中,将num作为参数传递给modifyValue函数,但函数内部对x的修改不会影响到num的值。

  1. 引用传递(Pass by Reference):当传递切片(slice)、映射(map)、通道(channel)或指针(pointer)作为参数时,实际上是传递引用,函数内部对参数的修改会影响原始值。

示例:

func modifySlice(s []int) {
   
    s[0] = 100
}

func main() {
   
    numbers := []int{
   1, 2, 3}
    modifySlice(numbers)
    fmt.Println(numbers) // 输出:[100, 2, 3]
}

在上述示例中,将切片numbers作为参数传递给modifySlice函数,函数内部修改了切片中的第一个元素,这也影响了原始切片的值。

需要注意的是,即使通过引用传递传递了指针类型的参数,也不能修改指针本身的指向,因为指针本身也是值传递的。但通过指针可以修改指针指向的值。

示例:

func modifyPointer(ptr *int) {
   
    *ptr = 100
}

func main() {
   
    num := 10
    modifyPointer(&num)
    fmt.Println(num) // 输出:100
}

在上述示例中,通过指针将num的地址传递给modifyPointer函数,函数内部通过指针修改了num的值。

总结而言,Go语言中的参数传递可以通过值传递和引用传递来实现,根据参数的类型来确定传递方式。在值传递中,函数对参数的修改不会影响原始值,而在引用传递中,函数对参数的修改会影响原始值。

相关文章
|
9月前
|
编译器 Go
Golang底层原理剖析之函数调用栈-传参和返回值
Golang底层原理剖析之函数调用栈-传参和返回值
72 0
|
5月前
|
Go C语言
golang的类型转换
【9月更文挑战第28天】本文介绍了Go语言中的基本数据类型转换,包括数值类型之间的转换及字符串与数值类型的互转,提供了具体代码示例说明如何使用如`float64(a)`和`strconv.Atoi`等方法。同时,文章还讲解了接口类型转换,包括类型断言和类型开关的使用方法,并展示了如何在运行时获取具体类型。最后,提到了指针类型转换的注意事项及其应用场景。
|
缓存 Java Serverless
Golang中的闭包详解
Golang中的闭包详解
|
5月前
|
Go
Golang语言基础之常量和字面量
这篇文章讲解了Go语言中常量和字面量的概念、声明方式以及使用场景,特别对常量生成器iota的使用进行了详细说明和示例演示。
41 2
|
存储 安全 Java
|
存储 安全 Go
Golang 语言中的非类型安全指针
Golang 语言中的非类型安全指针
63 0
|
存储 编译器 Go
100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用
100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用
80 0
|
算法 Go 调度
Golang面向对象编程之构造函数【struct&new】
Golang面向对象编程之构造函数【struct&new】
|
存储 程序员 Go
Golang-变量和常量
Golang 中的变量和常量
72 0