企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 可变参数与内置函数 > 这块道理太多就不写了,讲的就是内置函数里面,可变参数 ### 可变参数的传递 ``` package main import "fmt" // 可变参数改成 切片 // func add(slices []int) func add(slices ...int) { sum := 0 fmt.Println("传入的切片变量", slices) // 传入的切片变量 [1 2 3 4 5 6 7 8 9 10] for _, value := range slices { // "_" 这个是可变参数 sum += value } fmt.Println(sum) // 55 } func addll(num ...int) { add(num...) //add(num) } func main() { addll(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) } ``` ### 匿名函数和闭包 ``` func (参数列表) (返回参数列表) { 函数体 } ``` 定义并调用函数 ``` package main import "fmt" func main() { // 匿名函数后 添加"()" 传入实参 func(data string) { fmt.Println("Hello " + data) }("world") // Hello world } ``` 将匿名函数赋值给变量 ``` package main import "fmt" func main() { result := func(data string) { fmt.Println("Hello " + data) // Hello world } result("world") } ``` 闭包 > **下面案例结构,同一函数环境内的匿名函数,修改变量不会改变地址,据说匿名函数形成了闭包,算引用?** ``` package main import "fmt" func main() { num := 1 fmt.Println("num值,地址", num, &num) // num值,地址 1 0xc000012098 func() { num++ fmt.Println("num值,地址", num, &num) // num值,地址 2 0xc000012098 }() func() { num++ fmt.Println("num值,地址", num, &num) // num值,地址 3 0xc000012098 }() } ``` ``` package main import "fmt" func add(i int) (adds int) { addes := func() int { i++ return i } adds = addes() return adds } func main() { a1 := add(0) // 0+1=1 a2 := add(10) // 10+1=11 fmt.Println("a1值,闭包地址", a1, &a1) fmt.Println("a2值,闭包地址", a2, &a2) } 结果: a1值,闭包地址 1 0xc000012098 a2值,闭包地址 11 0xc0000120b0 ``` 闭包这玩意,我也不是很懂,道理多。但是我操作下来发现,函数环境不同,闭包修改变量的值会影响地址。