09 20, 2016

Go 开发 HTTP

Go 是一门新语言。很多人都是用 Go 来开发 Web 服务。Web 开发很多同学急于求成,直接使用 beego, echoiris 等知名框架。对标准库 net/http 的了解甚少。这里我就主要聊一下标准库 net/http 开发 Web 服务时的使用细节。

创建 HTTP 服务

在 Go 中,创建 HTTP 服务很简单:

package main

// in main.go

import (
    "fmt"
    "net/http"
)

func main(){
    if err := http.ListenAndServe(":12345",nil); err != nil{
        fmt.Println("start http server fail:",err)
    }
}

这样就会启动一个 HTTP 服务在端口 12345。浏览器输入 http://localhost:12345/ 就可以访问。当然从代码看出,没有给这个 HTTP 服务添加实际的处理逻辑,所有的访问都是默认的 404 Not Found

06 24, 2016

Go 语言入门资料

Go 语言,自2012年发布 1.0,至今 1.7 ,历经5年。Go 的相关工具和生态已经逐渐完善,这里综述一下 Go 语言学习开发可以找到的入门资料。

入门教程

  • 官方文档

第一步,学习基本语法和命令操作。Go 的官方文档是第一选择。但因为众所周知的原因,官网无法访问。可以访问 godoc.golangtc.com 镜像网站查看。或者下载安装好 Go 语言后执行 godoc 命令:

godoc -http=:6060

访问 http://localhost:6060 浏览内置的官网镜像站点。另外,godoc 会自动分析 GOPATH 中的源码生成文档,可以在网站访问 /pkg 直接查看。

  • 视频教程

推荐 无闻《Go 编程基础》。无闻的视频教程简单直接的介绍 Go 的基本语法的命令操作,简单的介绍一些标准库的使用方法。学好基础语法和操作是入门必需,来不得半点敷衍。实际开发实践时,自己再去深入了解使用的标准库和第三方库细节。

如果偏向 Web 方面的开发者,看完《Go 编程基础》 后可以再去学习无闻的 《Go Web 基础》 。里面以开发博客程序为例子,对 Go 语言开发 Web 的过程有比较详细的说明。但是因为已经是比较早的视频,可能所使用的类库已经发生较大的版本更新,需要自己根据库类的相关文档实践修正。

05 5, 2016

搭建 React , Babel 和 Webpack

公司打算用 React 做一个微信项目。我以前玩过一阵子 React,就被安排给 PHP 和前端指导入门 React。当时玩 React 的时候还是 0.11.x 的时代,如今已经是 15.0.x (0.15.x)。Webpack 和 Babel 也改进许多,搭建和使用变得方便。

React 已经成为前端很流行的工具,很多公司都在使用。根据官网的介绍,React是将界面组件化开发的工具,只是 MVC 中 V 的角色。通过 Flux 的概念,维持和传递数据状态给对应的组件,完成数据流动。

随着 ECMAScript 6 (ES6,ES2015) 标准的发布,越来越多开发者使用新的语法。由于浏览器的跟进速度略慢,ES6 的 JavaScript 代码还是需要翻译到 ES5 才能在浏览器正确的运行。Babel 就是翻译 ES6 到 ES5 代码的工具。同时还可以处理 React 的 JSX 格式到一般 JS 代码。

前端项目除了 JavaScript 还有 CSS 等内容。Webpack 是一套各种前端工具协调工作的总工具。整合 Babel 和很多别的工具以实现。

04 19, 2016

第二届 Gopher China 大会

又一次,和同事去参加 GopherChina 2016 大会,了解 Go 语言相关的最新动态。和一年前不同,Go 语言已经受到许多企业青睐。一些知名企业开始使用 Go 语言开发。因而,本届大会更多的内容注重在 Go 实现的业务场景和架构上。

Go 与 高并发服务

Go 语言的 goroutine 特性,非常适合开发高并发网络服务。大会有几个题目聊起相关的内容。

百度前端接入团队分享了《Go在百度BFE的应用》。相关的内容其实在InfoQ有过分享。百度的服务体量太过巨大(日均千亿),代码优化手段 + Go的版本更新 对服务整体的提升作用不大,只能用特殊的措施 ———— 车轮大战。关闭 runtime 的GC,由代码根据目前程序的运行情况判断是否手动 runtime.GC()。以 master-worker的模式轮换正在服务和正在GC的程序。这种架构估计只有百度这种规模才用得上吧。但是私下的交流来说,小伙伴还是觉得 nginx + C 模块更适合。况且BFE之前那套也就是C写的,有足够的技术实力。

对比的来看是,吴小伟(skoo)的《Go在阿里云CDN系统的应用》。阿里 CDN 的网络接入系统还是 C 语言写的。CDN 的日志系统、调度系统和刷新系统是 Go 写的。这些业务对 Go 语言的 GC 不敏感,加上 Go 比 C 更简洁的语法特性,更快的开发效率,开发周围系统是很适合的。这里可以看到,同样是大流量系统,思考的角度也有不同。顺便说一下,skoo 是比较早研究 Go 语言的技术大神之一,博客有一些关于 Go 核心原理的文章。

更新的 以前的