Go函数
go 函数
概述
go函数示例
package main
import (
"fmt"
)
// f 的类型:接收一个 func(int,int)int 和一个 int,返回一个 int
func f(op func(int, int) int, x int) int {
// 这里随便举例,把 x 和 10 作为参数传给 op
return op(x, 10)
}
// 定义两个操作函数
func add(a, b int) int {
return a + b
}
func mul(a, b int) int {
return a * b
}
func main() {
// 使用 f,并传入不同的操作函数
result1 := f(add, 5) // add(5, 10) = 15
result2 := f(mul, 5) // mul(5, 10) = 50
fmt.Println("f(add, 5) =", result1)
fmt.Println("f(mul, 5) =", result2)
}
指针传递与值传递示例
package main
import "fmt"
// 1. 值传递:不会改变原值
func changeValue(a int) {
a = 100
}
// 2. 指针传递:可以修改原值
func changePointer(a *int) {
*a = 100
}
// 3. 结构体示例
type User struct {
Name string
Age int
}
// 值传递:不会修改原结构体
func updateUserValue(u User) {
u.Name = "ChangedByValue"
}
// 指针传递:会修改原结构体
func updateUserPointer(u *User) {
u.Name = "ChangedByPointer"
}
func main() {
fmt.Println("=== 基础类型示例 ===")
x := 10
fmt.Println("初始 x =", x)
changeValue(x)
fmt.Println("值传递后 x =", x) // 仍然是 10
changePointer(&x)
fmt.Println("指针传递后 x =", x) // 被改成 100
fmt.Println("\n=== 结构体示例 ===")
user := User{Name: "Tom", Age: 20}
fmt.Println("初始 user =", user)
updateUserValue(user)
fmt.Println("值传递后 user =", user) // Name 不变
updateUserPointer(&user)
fmt.Println("指针传递后 user =", user) // Name 被修改
}