摘要: Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives)。对于初学者,这两者的区别也挺容易让人迷糊的。简单的说,new只分配内存,make用于slice,map,和channel的初始化。 1. new 这是一个用来分配内存的内建函数,但是与C++不 阅读全文
posted @ 2019-06-18 21:51 maji233 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 我怎么知道一个变量是分配在堆上还是栈上? 正确的观点是,你不需要知道。go语言中的每一个变量,它的生命周期和引用它的周期一样长。该语言的语义和实现时选择的存储位置,是没有关系的。 在编写高效率的程序时,存储位置的确会有影响。如果可以,go语言编译器将会分配函数的局部变量到函数的栈帧上。然而,如果编译 阅读全文
posted @ 2019-06-18 21:48 maji233 阅读(2939) 评论(0) 推荐(0) 编辑
摘要: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变 阅读全文
posted @ 2019-06-18 16:32 maji233 阅读(1142) 评论(0) 推荐(1) 编辑
摘要: import后面的是目录 包名和目录名没有关系,但是包名最好等于目录名 同一个目录下只能有一种包名。 转自:http://tonybai.com/2015/03/09/understanding-import-packages/ Golang使用包(package)这种语法元素来组织源码,所有语法可 阅读全文
posted @ 2019-06-18 14:57 maji233 阅读(24379) 评论(1) 推荐(1) 编辑
摘要: 默认情况下,所有的goroutine都在同一个原生线程里跑,也就是只使用了一个CPU核。但是,通过runtime.GOMAXPROCS(4)设定,可以将goroutine调度到多个CPU上运行。 在同一个原生线程里,若当前goroutine不发生阻塞,那么不会主动让出CPU给其他同一线程的gorou 阅读全文
posted @ 2019-06-18 14:16 maji233 阅读(588) 评论(0) 推荐(1) 编辑
摘要: 线程与协程的区别 切换开销的区别 线程太重,资源占用太高,频繁创建销毁会带来严重的性能问题; 协程切换远比线程小 切换开销的区别 线程太重,资源占用太高,频繁创建销毁会带来严重的性能问题; 协程切换远比线程小 2. 协程的好处: 一个协程几乎就是一个普通的对象,因此可以放心阻塞,一旦阻塞那么让当前线 阅读全文
posted @ 2019-06-18 14:05 maji233 阅读(1827) 评论(0) 推荐(1) 编辑
摘要: 1. Docker for Mac 是运行在 Hypervisor 上的 一个 HyperKit 实现,毕竟还是虚拟化加容器的实现方式,而不是内核级别的实现。(虚拟机) Docker for Mac不使用VirtualBox,而是使用HyperKit,一个轻量级的macOS虚拟化解决方案,它在Mac 阅读全文
posted @ 2019-06-18 00:45 maji233 阅读(2514) 评论(0) 推荐(0) 编辑