- 博客(4)
- 收藏
- 关注
原创 切片传递与指针传递到底有啥区别
提出疑问在Go的源码库或者其他开源项目中,会发现有些函数在需要用到切片入参时,它采用是指向切片类型的指针,而非切片类型。这里未免会产生疑问:切片底层不就是指针指向底层数组数据吗,为何不直接传递切片,两者有什么区别?例如,在源码log包中,Logger对象上绑定了formatHeader方法,它的入参对象buf,其类型是*[]byte,而非[]byte。func (l *Logger) formatHeader(buf *[]byte, t time.Time, file string, line in
2020-11-27 14:00:19 454 1
原创 一文读懂Channel设计
在Go中,要理解channel,首先需要认识goroutine。一、为什么会有goroutine现代操作系统中为我们提供了三种基本的构造并发程序的方法:多进程、I/O多路复用和多线程。其中最简单的构造方式当属多进程,但是多进程的并发程序,由于对进程控制和进程间通信开销巨大,这样的并发方式往往会很慢。因此,操作系统提供了更小粒度的运行单元:线程(确切叫法是内核线程)。它是一种运行在进程上下文中的逻辑流,线程之间通过操作系统来调度,其调度模型如下图所示。多线程的并发方式,相较于多进程而言要快得多。但是
2020-11-25 20:44:38 1631
原创 万字长文全面解析Go是如何设计Map的
由于本文篇幅较长,故将目录整理如下什么是Map维基百科的定义In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection.说明:在计
2020-11-04 22:11:05 601 1
原创 切片传递的隐藏危机
提出疑问在Go的源码库或者其他开源项目中,会发现有些函数在需要用到切片入参时,它采用是指向切片类型的指针,而非切片类型。这里未免会产生疑问:切片底层不就是指针指向底层数组数据吗,为何不直接...
2020-11-04 18:30:39 109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人