golang源码分析-Context

前言

平时写代码或者阅读代码的时候,经常会在方法内看到ctx context.Context这样的参数。本文就记录一下有关于context.Context的知识。

git submodules

git submodules介绍

来自git官方的介绍

1
2
3
4
$ git help submodules

NAME
       git-submodule - Initialize, update or inspect submodules

这个命令可以用于初始化、更新、检查子模块。

golang slice原理

切片使用

仅记录一些常用操作

  • 创建切片:
1
2
3
4
	// 创建切片
	slice := make([]int, 1, 3) // 使用make可以创建切片的引用,第二个参数代表切片长度,第三个代表切片的容量,使用该种方法生成具有空值
	// 创建切片
	var slice []int // 直接对切片进行初始化操作
  • 切片遍历:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
	// 使用foreach遍历
	slice := []int{1, 2, 3}
	for _, val := range slice {
		fmt.Println(val)
	}
	// 直接使用索引进行遍历
	slice := []int{1, 2, 3}
	for i := 0; i < len(slice); i++ {
		fmt.Println(slice[i])
	}
  • 使用append追加切片元素:
1
2
3
4
	slice := make([]int, 3)
	for i := 0; i < 3; i++ {
		slice = append(slice, i)	// 该方式会在切片的末尾追加元素
	}
  • 切片拷贝:
1
2
3
	slice1 := []int{1, 2, 3}
	slice2 := make([]int, 3)
	copy(slice2, slice1)
  • 切片索引取值:
1
2
3
	slice := []int{1, 2, 3}
	fmt.Println(slice[0:2])	// 输出内容:[1 2], slice[0:2]代表去slice第[0]个元素,一直取到第[2]元素(不包括[2])
	fmt.Println(slice[0:1:2]) // 输出内容:[1], slice[0:1:2]第三个数字表示新切片容量为(2-0=2)

切片的数据结构

刚刚在切片特性内介绍到了golang中切片其实是值拷贝。 这里其实有一个疑问,如果切片元素内过多,那么每次传值不会特别特别慢吗?毕竟每次都要拷贝一个数组。别急,接下来介绍一下切片的数据结构。