June's Studio.

June's Studio.

it's better to burn out than to fade away

Golang-框架选型
goframe、beego、iris、gin 突出优点 goframe主要以工程化和企业级方向为主,特别是模块化设计和工程化设计思想非常棒。 针对业务项目而言,提供了开发规范、项目规范、命名规范、设计模式、开发工具链、丰富的模块、高质量代码和文档,社区活跃 。作者也是资深的PHP开发者,PHP转Go的小伙伴会倍感亲切。 beego开源的比较早,最早的一款功能比较全面的Golang开发框架,一直在Golang领域有着比较大的影响力,作者谢大多年组织着国内影响力比较大GopherCN活动。 beego有着比较丰富的开发模块、开箱即用,提供了基于MVC设计模式的项目结构、开发工具链,主要定位为W
Golang-通道Channel
Do not communicate by sharing memory; instead, share memory by communicating. 不要通过共享内存来通信,而要通过通信来实现内存共享。 CSP(Communicating Sequential Processes)模型 数据结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 type hchan struct { qcount uint // chan 里元素数量 dataqsiz uint //
Golang-数组与切片
Go语言与鸭子类型的关系 鸭子类型 Duck Typing If it looks like a duck,swims like a duck ,and quacks like a duck ,then it probable is a duck Duck Typing,鸭子类型,是动态编程语言的一种对象推断策略,它更关注对象能如何被使用,而不是对象的类型本身。Go 语言作为一门静态语言,它通过通过接口的方式完美支持鸭子类型。 例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 typ
Golang-MESI协议
基于失效的缓存一致性协议 (invalid-based) 状态 MESI对应4种状态 * 已修改Modified(M) 缓存行是脏的 ,与主存值不同。如果别的CPU内核要读主存这块数据,该缓存行必须回写到主存,状态变为共享(S) * 独占Exclusive(E) 缓存行只在当前缓存中,但是干净的(clean),与主存中数据一致。当别的缓存读取它时,状态变为共享;当前写数据时,变为已修改状态。 * 共享Shared(S) 缓存行也存在于其它缓存中且是干净的。缓存行可以在任意时刻抛弃。 * 无效I
Golang-defer用法总结
引入 defer是Go语言中的一个关键字(延迟调用),一般用于释放资源和连接、关闭文件、释放锁等。和defer类似的有java的finally和C++的析构函数,这些语句一般是一定会执行的(某些特殊情况后文会提到),不过析构函数析构的是对象,而defer后面一般跟函数或方法。 1、 多个defer语句,按先进后出的方式执行 1 2 3 4 5 6 7 8 9 10 package main import "fmt" func main() { var whatever [5]struct{} for i := range whatever { defe
Golang-哈希表
map实现原理 Go语言采用哈希查找表,并且使用链表解决哈希冲突 内存模型: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 type hmap struct{ count int //K,V数目. 调用len()返回此值 flags uint8 //标志位,是否已有其他协程在执行写操作 B unit8 //桶的数量的对数 2^B noverflow uint16 //使用的溢出桶近似数 hash0 uint32
Golang-数组与切片
异同 slice 的底层数据是数组,slice 是对数组的封装,它描述一个数组的片段。两者都可以通过下标来访问单个元素。 组是定长的,长度定义好之后,不能再更改 而切片则非常灵活,它可以动态地扩容。切片的类型和长度无关 数组就是一片连续的内存, slice 实际上是一个结构体,包含三个字段:长度、容量、底层数组。 1 2 3 4 5 type slice struct{ array unsafe.Pointer //元素指针 len int //长度 cap int //容量 } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
Nginx 正向代理 &反向代理
正向代理:客户端 <一> 代理 一>服务端 客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 反向代理:客户端 一>代理 <一> 服务端 客户端向反向代理命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
avatar
June
witness me
FRIENDS
ddatsh