写了篇介绍红黑树删除算法的文章,发在 Medium 上
Go Error 的设计哲学
最近阅读了不少关于 Go 错误处理的材料和讨论,总结出 Go Error 的设计哲学主要有两点:
- 处理所有潜在的错误
- Errors Are Value
Go 对错误处理的最初设计和后续优化方案,以及编程过程中处理错误的各种方法,基本都是围绕着这些理念展开的。
Unix I/O 主要模型介绍
- 5 种 I/O 模型及一些示例
- 目前主流的 I/O 方案 epoll / kqueue
Go 网络编程的实现
提要:
- TCP 服务端、客户端示例
- Network system calls
- TCP 编程是如何实现的
Go 网络编程主要通过 net 包(package)实现,它支持 TCP/IP, UDP, domain name resolution, Unix domain sockets 等连接,此外,还通过 net/http ,net/rpc 等提供了 http,rpc 等主流应用层的连接协议。
Go 源码分析:scheduler 工作流程
注:本文涉及的源码为 go 1.13 版本
最近一直在看 Go 调度器的源码,查了不少资料,对 goroutine 的调度过程有了一些了解,也对 Go 如何支撑高并发、并行计算有个大概的认识。
Go 调度器(scheduler)负责把各个 goroutine 分配到相应的操作系统线程 (OS thread )上执行,是 Go runtime 的两大组成部分之一,另一个是内存分配/垃圾回收(memory allocator/garbage collector)1 。
调度器相关的代码主要在 runtime
的 proc.go
, runtime1.go
, runtime2.go
等几个文件,此外还有一些 Go 汇编代码,这些代码大部分在 2015 年成形,至今没有大的修改,目前看来还是比较稳定的。
一个错误洗牌算法的分析
将一个长度为 n 的有序数组,重新打乱,随机排序,它算法实现被称作洗牌算法,得名于它的典型应用,扑克牌洗牌。
利用 swagger 管理 API 开发
swagger 可以通过 yaml 文件自动生成 api 文档,客户端代码等,减少了许多繁琐的工作和前后端沟通,从而提高开发效率。
构建 Golang Web 应用的两种方法
对前后端分离的 web 项目,golang 后端可以以两种方式提供前端静态文件的访问:
- 使用
http.FileServer
提供静态文件服务 - 使用
go-bindata-assetfs
将前端静态文件打包成二进制数据,和后端构建到一起
gRPC 入门,如何用 go 开发 grpc 服务端/客户端应用
demo 的代码仓库:github.com/chasecs/grpc-sorter
一、基础知识
rpc
RPC 是一种用于主要用于服务器通讯的 API 协议,于 2005 年左右发布,在它出现之前,常用的服务器 API 协议是 REST 和 SOAP 。
go channel,buffered 与 unbuffered 的区别
go 通过 goroutine 实现并发,而不同的 goroutine 之间需要通过 channel 来通讯,否则就是两段各行其是的代码。