摘要: 在刚接触GO语言时候,我相信你也会有这种困惑,为什么有的函数名前面有输入参数,而一些却没有,它们是否有差别?确实有差别, 函数名前面没有输入参数,是一般的函数; 函数名前面有输入参数,是结构的方法,输入参数叫做“方法接收者”!GO语言没有类,方法都定义在结构上了!! 如代码所示,A和B是普通函数,而 阅读全文
posted @ 2019-06-20 18:11 maji233 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 1、定义一个结构体 2、初始化一个结构体 有两种情况,一是得到结构体的对象,一是得到结构的对象指针,分别有三种方式: 3、对象与对象指针的区别(更确切的说应该是值类型和指针类型) 与C/C++类似,GO语言也存在对象与对象的指针,但不同的是,GO语言中没有 -> 操作符来调用指针所属的成员,而与一般 阅读全文
posted @ 2019-06-20 17:43 maji233 阅读(3481) 评论(0) 推荐(0) 编辑
摘要: 定义一个struct,定义的时候是字段名与其类型一一对应,实际上Go语言支持只提供类型,而不写字段名的方式,也就是匿名字段,或称为嵌入字段。 当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段以及方法(指绑定在这个类型上的,见最后)都被隐式地引入了当前定义的这个struct。 阅读全文
posted @ 2019-06-20 16:31 maji233 阅读(2104) 评论(0) 推荐(0) 编辑
摘要: 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 阅读(24378) 评论(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) 编辑