张不大的博客

Go基本数据类型

go基本数据类型

编程有感 这是一篇由浅入深介绍go 数据类型的笔记(自用) 对于新手,最快进入学习状态的方式莫过于,看别人的写的博客或者视频了。当然高手写的博客或者视频那就更好了。 这是比较好的切入点,我也看了 go 的官方文档,感觉写的很浅 学技术,最重要的是学权威内容,这个东西不能出现二义性,可是网上(内网)的很多“博客”都是半吊子水,这对于思维不活泛的同学(不比如我,要多走很多弯路😩😩),后面深入的话还是要看源码的

主要有以下内容,会由浅入深以及结合面试题总结(05-08)


常见的数据数据类型(参考c/c++、python、js)int、string、struct、slice、map

先添个小料,我问gpt go1.18中的切片扩容规则的时候,它直接讲 切片扩容阈值threshold 是1024,但是在go1.18以后的切片扩容阈值改成了256,而且扩容规则也调整了一些

int

string

struct

slice

切片 本质是一个数据结构,包含指向底层数组的首地址,切片大小以及切片容量 入门讲解

// 写几种 定义 方式
var tmp01 []int = make([]int, 2, 5)

tmp01 = append(tmp01, 1, 2, 3, 4, 5)


tmp02 := []int{1, 2, 3, 4, 5}

tmp03 := new([]int)
*tmp03 = append(*tmp03, 1, 2, 3, 4, 5)

注意采用的是左闭右开 demo

//切片的操作,截取切片指定范围      

tmp_01 := tem01[:2]

tmp_02 := tmp01[1:3]

切片扩容机制—go1.18版本

参考

alt text

扩容思路

预期新容量 是不是 大于 原来容量的两倍 ? 如果是,直接扩成预期新容量 : (不是,进行下一步判定 原始容量 是不是 小于 256 ? 是的,那么预期新容量大小为原来的2倍 : 不是[也就是大于等于256] 按照公式, 预期 = (原来的 + threshold * 3)/4 ) **注意:采用这种机制,“大的小点扩,小的往大扩”是为了平滑两者过渡。

切片扩容以后还要内存对齐

是的,和c/c++ 的 struct 内存对齐 是同一个思路 本质还是基本数据类型 和 操作系统架构 位数 对齐?

#go语法