前言
写这篇文章是因为看golang源码的时候,经常会出现位运算。有时看着有点懵,所以写篇文章记录下。同时该文章也会探讨我们在生产中的哪些场景可以使用位运算。
写这篇文章是因为看golang源码的时候,经常会出现位运算。有时看着有点懵,所以写篇文章记录下。同时该文章也会探讨我们在生产中的哪些场景可以使用位运算。
平时写代码或者阅读代码的时候,经常会在方法内看到ctx context.Context这样的参数。本文就记录一下有关于context.Context的知识。
本文将介绍下golang源码里经常出现的东西: unsafe.Pointer和uintptr
本文将从golang的源码方面分析:如何启动http服务,这个服务是怎么对外提供服务的,以及为什么可以保证高性能。
本文将介绍slice的数据结构、常用操作的源码。
源码基于golang 1.18,位于runtime/slice.go
仅记录一些常用操作
// 创建切片
slice := make([]int, 1, 3) // 使用make可以创建切片的引用,第二个参数代表切片长度,第三个代表切片的容量,使用该种方法生成具有空值
// 创建切片
var slice []int // 直接对切片进行初始化操作
// 使用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])
}
slice := make([]int, 3)
for i := 0; i < 3; i++ {
slice = append(slice, i) // 该方式会在切片的末尾追加元素
}
slice1 := []int{1, 2, 3}
slice2 := make([]int, 3)
copy(slice2, slice1)
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中切片其实是值拷贝。 这里其实有一个疑问,如果切片元素内过多,那么每次传值不会特别特别慢吗?毕竟每次都要拷贝一个数组。别急,接下来介绍一下切片的数据结构。