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语言中的参数传递可以通过值传递和引用传递来实现,根据参数的类型来确定传递方式。在值传递中,函数对参数的修改不会影响原始值,而在引用传递中,函数对参数的修改会影响原始值。

相关文章
|
5月前
|
编译器 Go
Golang底层原理剖析之函数调用栈-传参和返回值
Golang底层原理剖析之函数调用栈-传参和返回值
48 0
|
1月前
|
Go
Golang语言基础之常量和字面量
这篇文章讲解了Go语言中常量和字面量的概念、声明方式以及使用场景,特别对常量生成器iota的使用进行了详细说明和示例演示。
16 2
|
1月前
|
Go
Golang语言基础之标识符和变量定义
这篇文章详细介绍了Go语言中标识符和变量的定义、命名规则、关键字、变量类型、声明方式、作用域等基础知识。
16 3
|
11月前
|
缓存 Java Serverless
Golang中的闭包详解
Golang中的闭包详解
|
5月前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
77 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
12月前
|
存储 安全 Go
Golang 语言 method 接收者使用值类型和指针类型的区别
Golang 语言 method 接收者使用值类型和指针类型的区别
48 0
|
5月前
|
存储 机器学习/深度学习 程序员
Golang数据类型之基本数据类型
Golang数据类型之基本数据类型
56 1
|
12月前
|
存储 安全 Go
Golang 语言中的非类型安全指针
Golang 语言中的非类型安全指针
39 0
|
12月前
|
存储 编译器 Go
100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用
100天精通Golang(基础入门篇)——第4天: Go语言中的变量与常量详解:声明、赋值和使用
68 0
|
算法 Go 调度