十条有用的 GoLang技术

这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情都会有影响。所有这些都仅仅是建议,具体情况具体对待,并且如果有帮助的话务必告诉我。随时留言:) 1...阅读全文

2014-11-11 10:51 maliro
阅读:4690 评论:3

goroutine与调度器

我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。 这个调度器的原理以及实现值得我们去深入研究一下。支撑整个调度器的主要有4个重要结构,分别是M、G、P、Sched,...阅读全文

阅读:13295 评论:5

Go语言的Web框架比较

原文链接:http://www.jdon.com/47016 这是Square工程师对几个Go语言的Web框架比较:A Comparison of Go Web Frameworks推荐使用net/http作为入门起步的标准库,如果你需要路由方面功能,可使用Gorilla和Gocraft/web,Revel 和 Martini有太多的依赖注入和其他魔术让人感觉舒服,Gorilla是最小的。所有的Web框架都是基于net/http包构建的。路由功能比较路由是一种将Web请求映射到一个处理器函数的机...阅读全文

2016-03-21 16:22 luckstone
阅读:4533 评论:1

进程、线程、轻量级进程、协程和go中的Goroutine

一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。 二、线程 书中的定义:线程是进程的一个执行流,独立执行它...阅读全文

2016-06-02 16:44 tangchuanyang
阅读:1916 评论:0

golang 判断是否实现interface接口的方法

由于golang的interface使用很灵活,不需要显示的实现接口interface的方法, 有点动态化的感觉, 缺点:如果没有实现interface的方法,强行转换成interface,运行时候异常报错 解决办法:在编译的时候就把这种错误抛出来,上代码: package main import ( "fmt" ) type value interface { Show() } type test_value struct{} // func (value *test_value) Show(...阅读全文

2017-01-22 18:00:08 golang_yh
阅读:8598 评论:0

Go 语言的数据结构 :栈与队列

在[先前的博文](https://studygolang.com/articles/12686)中,我们探讨了链表以及如何将它应用于实际应用。在这篇文章中,我们将继续探讨两个相似且功能强大的数据结构。 ## 建模操作和历史 让我们看看 Excel 或 Google 文档,他们是人类发明的最普遍的构成文件的应用程序。我们都使用过它们。 正如你可能知道的,这些应用程序有各种各样对文本的操作。 比如在文本中添加颜色、下划线、各种字体和大小,或者在表格中组织内容。这个列表很长,我们期望从这...阅读全文

2018-05-10 21:46:45 SergeyChang
阅读:4614 评论:0