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 被修改
}