随笔分类 - Go
摘要:benchmark测试入门 测试以Bnechmark为方法开头 运行测试的时候,形如普通的测试,但是需要加上-bench 选项 运行选项: -bench 选项:接受一个正则表达式,匹配上的才会执行 -benchmem:输出内存分配 -benchtime:运行时间,默认1s。可以是时间,也可以是次数,
阅读全文
摘要:Beego Controller抽象 Beego 是基于MVC(Model-View-Controller)的,所以它定义了一个核心接口ControllerInterface。 Controllerlnterface 定义了一个控制器必须要解决什么问题。 同时Contollerlnterface的默
阅读全文
摘要:作用 context 主要用来在 goroutine 之间传递上下文信息,包括: 取消信号 超时时间 截止时间 传值 原理: contex接口 Go 里并没有直接为我们提供一个统一的 context 对象,而是设计了一个接口类型的 Context。然后在接口上来实现了几种具体类型的context t
阅读全文
摘要:接口类型是由 type 和 interface 关键字定义的一组方法集合。其中,方法集合唯一确定了这个接口类型所表示的接口。 Go 语言要求接口类型声明中的方法必须是具名的,并且方法名字在这个接口类型的方法集合中是唯一的。 Go 1.14 版本以后,Go 接口类型允许嵌入的不同接口类型的方法集合存在
阅读全文
摘要:创建 声明 var ch chan int 赋值 无缓冲 channel:元素类型为 T ch1 := make(chan int) 带缓冲 channel:元素类型为 T、缓冲区长度为 capacity ch2 := make(chan int, 5) 发送与接收 ch1 <- 13 // 将整型
阅读全文
摘要:Goroutine 调度器 Goroutine 占用的资源非常小,每个 Goroutine 栈的大小默认是 2KB。而且,Goroutine 调度的切换也不用陷入(trap)操作系统内核层完成,代价很低。因此,一个 Go 程序中可以创建成千上万个并发的 Goroutine。而将这些 Goroutin
阅读全文
摘要:并发设计:将程序分成多个可独立执行的部分的结构化程序的设计方法 并发不是并行。并发是应用结构设计相关的概念,而并行只是程序执行期的概念,并行的必要条件是具有多个处理器或多核处理器,否则无论是否是并发的设计,程序执行时都有且仅有一个任务可以被调度到处理器上执行。 goroutine是由 Go 运行时(
阅读全文
摘要:相对于操作系统线程,Goroutine 的开销十分小,一个 Goroutine 的起始栈大小为 2KB,而且创建、切换与销毁的代价很低,可以创建成千上万甚至更多 Goroutine。所以和其他语言不同的是,Go 应用通常可以为每个新建立的连接创建一个对应的新 Goroutine,甚至是为每个传入的请
阅读全文
摘要:使用defer实现函数执行过程的跟踪 package main func Trace(name string) func() { println("enter:", name) return func() { println("exit:", name) } } func foo() { defer
阅读全文
摘要:阻塞 I/O 模型是对开发人员最友好的,也是心智负担最低的模型,而 I/O 多路复用的这种通过回调割裂执行流的模型,对开发人员来说过于复杂了 Go 选择了为开发人员提供阻塞 I/O 模型,在 Goroutine 中以最简单、最易用的“阻塞 I/O 模型”的方式,进行 Socket 操作。 网络轮询器
阅读全文
摘要:图书管理 API 服务 模拟真实世界的一个书店的图书管理后端服务。这个服务为平台前端以及其他客户端,提供针对图书的 CRUD(创建、检索、更新与删除)的基于 HTTP 协议的 API。API 采用典型的 RESTful 风格设计,这个服务提供的 API 集合如下: 客户端和服务端中请求与响应的数据,
阅读全文
摘要:创建一个基于 HTTP 协议的 Web 服务 构建一个最简单的 HTTP 服务,当收到一个 HTTP 请求后,给请求方返回包含“hello, world”数据的响应。 main.go package main import "net/http" func main() { http.HandleFu
阅读全文