Go基础知识点(四) | 青训营笔记

60 阅读1分钟

这是我参与「第五届青训营 」笔记创作活动的第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)
}
image.png

引用传递:

传递的数据的地址,导致多个变量指向同一块内存.

引用数据类型的传递,默认都是引用传递:切片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)
}
image.png

今天结束啦,明天继续加油~