这是我参与「第五届青训营 」笔记创作活动的第6天.
函数:
形式参数:定义函数时,用来接收外部传入数据的参数就是形式参数;
实际参数:调用函数时,传给形参的实际数据就是实际参数.
形参与实参要一一对应,顺序,个数,类型.
可变参数:一个参数的类型确定,但个数不确定,可以使用可变参数.
注意事项: 1.如果一个函数有可变参数还有其他参数,可变参数要放在列表的最后. 2.一个函数的参数列表中最多只能有一个可变参数.
import "fmt"
func main() {
fmt.Println(add(3, 2))
fmt.Println("学相伴", "狂神说")
adds(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
}
func swap(a, b string) (string, string) {
return b, a
}
func add(a, b int) int {
c := a + b
return c
}
func adds(nums ...int) {
sums := 0
for i := 0; i < len(nums); i++ {
fmt.Println(nums[i])
sums += nums[i]
}
fmt.Println(sums)
}
值传递:
传递的是数据的副本,修改数据对于原始的数据没有影响.
值类型的数据,默认都是值传递:基础类型(int,string,bool,float64..),array,struct;
arr2的数据是arr那复制过来的副本,所以是不同的空间.
所以修改arr2不会改变arr的值
import "fmt"
// arr2的数据是arr那复制过来的副本,所以是不同的空间.
// 所以修改arr2不会改变arr的值
func main() {
arr := [4]int{1, 2, 3, 4}
fmt.Println(arr)
update(arr)
}
func update(arr2 [4]int) {
fmt.Println("更新前的数组:", arr2)
arr2[0] = 100
fmt.Println("更新后的数组:", arr2)
}
引用传递:
传递的数据的地址,导致多个变量指向同一块内存.
引用数据类型的传递,默认都是引用传递:切片slice,map,chan...
切片:可以扩容的数组;
import "fmt"
func main() {
s := []int{1, 2, 3, 4}
fmt.Println("更新前的数据:", s)
update2(s)
fmt.Println("更新后的数据:", s)
}
func update2(s2 []int) {
fmt.Println("更新前的数据:", s2)
s2[0] = 100
fmt.Println("更新后的数据:", s2)
}
今天结束啦,明天继续加油~