![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
小钢炮vv
这个作者很懒,什么都没留下…
展开
-
三色标记算法
【Golang三色标记、混合写屏障GC模式图文全分析】https://studygolang.com/articles/27243?fr=sidebar原创 2021-02-02 17:35:51 · 333 阅读 · 0 评论 -
golang隐式转换
定义类型与非定义类型在类型定义声明中定义的类型为定义类型,所有基本类型和type定义的类型都是定义类型,但是要注意类型别名的情况type A []string// 是定义类型type B = A// 是定义类型type C = []string// 不是定义类型非定义类型一定是一个组合类型,example:[]string底层类型基本类型的底层类型是本身类型声明中定义类型与源类型共享底层类型// 共享相同底层类型inttype ( MyInt int MyInt1 Myint原创 2021-01-23 19:26:36 · 873 阅读 · 1 评论 -
golang 内置print/println、fmt、log的区别
fmt.Println与fmt.Print区别换行区别不用多说,另外一个区别在于fmt.Print只有在参数间都不是字符串时才会产生间隔log.Print也相同、print则不管怎么样都不会产生间隔fmt与log的重要区别fmt没有做同步处理fmt标准输出、log标准错误输出print/println、fmt、log的区别print/println 标准错误输出print/println 不能打印数组、结构体(复合类型)print/println 对于组合类型(除了基本类型都是)原创 2021-01-11 10:02:48 · 2579 阅读 · 1 评论 -
golang recover、panic函数调用传播
golang中恐慌的恢复传播方式总是记不住,故此记载func main() { // 每个未恢复的恐慌与此协程调用栈中的一个尚未退出的函数相关联 go func() { defer func() { // 最终恢复的恐慌是恐慌2 fmt.Println(recover()) }() // 该函数调用退出时恐慌2将蔓延替换恐慌0与外层函数相关联 defer func() {原创 2021-01-11 10:01:31 · 305 阅读 · 0 评论 -
unsafe.Pointer与uintptr的区别
区别uintptr保存地址的整数值,就是一个值,不对内存含有引用关系,unsafe.Pointer是指针uintptr既然是地址整数值,那就可以参与地址运算uintptr与unsafe.Pointer可以相互转化任意类型安全指针可以转化为unsafe.Pointer,任意unsafe.Pointer也可以转化为任意类型安全指针例子:type S struct { A int B int}func main() { s := new(S)// &{0,0} *(*int)原创 2021-01-06 15:59:32 · 286 阅读 · 0 评论 -
内核级线程和用户级线程
内核空间和虚拟空间地址空间被分为内核空间和用户空间,为虚拟地址空间,内核维护虚拟地址空间到物理地址空间的映射。内核空间的访问比较严格,操作系统限制对其的访问,但是向外暴露了一些必要的接口访问。cpu权限被分为两种:内核态和用户态,如果需要调用内核接口就需要内核态权限,称为系统调用。系统调用就是操作系统内部定义的一些函数。用户级线程和内核级线程用户级线程用户级线程由应用级别的线程库进行生成和管理,其不属于内核部分,线程的存在是内核无法感知的,其优点在于不需要内核的参与,没有内核态切换的开销。但是也造成原创 2020-12-22 15:48:41 · 311 阅读 · 0 评论 -
go内存管理
golang内存管理前言golang实现了自己的内存管理,在研究切片扩容的时候,有一步roundsize调整内存大小方法,随后对golang中的内存管理深入学习了下,固记录。概念在程序启动的时候,golang会预先向处理器申请,如下虚拟地址空间(并没有真正的申请),主要将其规划给spans、bitmap、arena三部分+-----------------------------------------------------------+| spans | bitmap | are原创 2020-12-16 10:15:10 · 274 阅读 · 0 评论 -
golang内存对齐
内存对齐go属于c语言家族,很多概念与c语言相同。内存对齐也可以叫做内存地址的对齐。至于为什么需要内存对齐,主要有以下两个原因:高效,cpu每次读取一个自然字(取决于架构,32位架构上为4字节,64位架构上为8字节),如果地址都是对齐的,那么cpu一个周期就可读取需要数据,如果存在跨内存边界的情况则需要进行多次读取拼接操作,则就无形增加了cpu的负担跨平台,在某些硬件平台上仅能在特定地址上访问特定类型,从特定地址开始存取,如果没有内存保证硬件可能会报告错误go中的内存对齐保证golang对齐保原创 2020-12-14 19:16:17 · 230 阅读 · 0 评论 -
Go 表达式估值顺序规则
包级变量按依赖顺序进行估值包级变量的估值顺序按照依赖顺序进行估值,比如var a f[b]依赖于var b = n的初始化,那么a就较晚于b进行估值var ( f4 = print("f4", f3) f3 = print("f3", f1) f2 = print("f2") f1 = print("f1"))func print(s ...interface{}) string { fmt.Println(s...) return ""}以上初始化顺序为f2f1f3f4原创 2020-08-28 17:58:32 · 185 阅读 · 0 评论 -
golang七牛云上传demo
封装package qiniuimport ( "context" "io" "github.com/qiniu/api.v7/v7/auth/qbox" "github.com/qiniu/api.v7/v7/storage")const ( accessKey = "" secretKey = "" bucket = "")func config() (cfg storage.Config) { cfg = storage.Config{} // 设置机房原创 2020-08-18 08:53:18 · 997 阅读 · 0 评论 -
Go Context包的作用
https://zhuanlan.zhihu.com/p/58967892https://www.flysnow.org/2017/05/12/go-in-action-go-context.html转载 2020-07-29 14:29:01 · 439 阅读 · 0 评论 -
golang并发与并行
golang默认是使用单核单线程跑的,goroutine比线程更轻量,goroutine建立在线程中,当前线程阻塞时会将剩余的goroutine分配到其他线程(此时也是使用单核)。如果需要使用并行处理需要开启多核心,使用runtime.GOMAXPROCS()开启https://blog.csdn.net/kjfcpua/article/details/18265441https://blog.csdn.net/skh2015java/article/details/60330875...原创 2020-07-24 10:12:23 · 240 阅读 · 0 评论 -
Go语言圣经笔记
Go圣经i++是语句,而不是表达式,所以类似j=i++非法,并且++只能在后边常量目前只能是数值、字符串或者一个固定的布尔值变量基本类型:数值、字符串、布尔值引用类型:指针、接口、切片、map、函数、chan聚合类型:数组、结构体Go中声明变量不初始化的情况下都会默认零值,不会出现undefined的情况引用类型的零值为nil基本类型为其对应的零值聚合类型的元素或字段为其对应的零值短变量声明对已经声明过的变量只有赋值作用,但是多次变量声明必须要有一个是新的变量res,er原创 2020-07-21 17:58:32 · 185 阅读 · 0 评论 -
Go指南笔记
Go指南值类型:int、float、bool、string、数组和结构体引用类型:指针、切片、map、chan、interface包程序都由包构成,main包开始运行程序,包名必须与导入路径最后一个元素一致导出名一个名字以大写字母开头就是已导出的,导入包时只能引用其中已导出的名字函数当连续两个或多个已命名形参类型相同时,可以只写最后一个的参数func add(a ,b int) int{ return a+b;}多个返回值func swap(x,y string) (string原创 2020-07-17 17:29:19 · 596 阅读 · 0 评论 -
golang结构体方法隐式调用
方法方法是golang中的一个特性,方法可以看作是带有特殊接受者参数的函数,最常用的是为结构体定义方法,看起来就像面向对象里边的对象下的方法package mainimport ( "fmt")type Book struct{}func (b Book) SetPages() { fmt.Println("SetPages")}func (b *Book) Pages() { fmt.Println("Pages")}如示例,是为Book类型定义了SetPages方法、原创 2020-07-16 11:04:53 · 1889 阅读 · 0 评论