下载APP 随时随地学编程
返回 首页

Go教程

开始阅读
手册说明:

Go概述

Go语言是谷歌2009年发布的第二款开源编程语言,它专门针对多处理器系统应用程序的编程进行了优化,它是一种系统语言其非常有用和强大,其程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能。

Go可以在不损失应用程序性能的情况下降低代码的复杂性。


发表时间: 2009年  

类    型:  开源编程语言  

公    司:  谷歌

官网:http://golang.org

API文档:https://golang.org/doc/

教程:http://www.w3cschool.cn/go/go-tutorial.html

下载:https://golang.org/dl/

技术社区:https://gocn.io/


目标

Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。


功能特点

  • Go语言设计是让软件充分发挥多核心处理器同步多工的优点,它可解决面向对象程序设计面临的麻烦。
  • Go的速度也非常快,几乎和C或C++程序一样快,且能够快速制作程序。
  • Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能。
  • Go语言可以在不损失应用程序性能的情况下降低代码的复杂性。
  • Go语言的另一项与网络相关的特色,是服务器和用户端设备,如PC或手机,可以分担工作。因此,使用Go的服务便可轻松适应不同的用户端处理性能。
  • Go可以和Native Client配合使用,Go可以让应用完美的运行在浏览器内。例如,使用Go可以更高效的实现Wave,无论是在前端还是后台。
  • Go 同时具有两种编译器,一种是建立在GCC基础上的Gccgo,另外一种是分别针对64位x64和32位x86计算机的一套编译器(6g和8g)。谷歌目前正在研发其对ARM芯片和Android设备的支持。


Go有什么优势

  • 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。
  • 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
  • 语言层面支持并发,这个就是Go最大的特色,天生的支持并发,Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。
  • 内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。
  • 简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。
  • 丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大
  • 内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。
  • 跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。
  • 内嵌C支持,前面说了作者是C的作者,所以Go里面也可以直接包含c代码,利用现有的丰富的C库。


Go适合用来做什么

  • 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
  • 分布式系统,数据库代理器等
  • 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用、
  • 内存数据库,前一段时间google开发的groupcache,couchbase的部分组建
  • 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。


Go成功的项目

  • nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息
  • docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。
  • packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者
  • skynet:分布式调度框架
  • Doozer:分布式同步工具,类似ZooKeeper
  • Heka:mazila开源的日志处理系统
  • cbfs:couchbase开源的分布式文件系统
  • tsuru:开源的PAAS平台,和SAE实现的功能一模一样
  • groupcache:memcahe作者写的用于Google下载系统的缓存系统
  • god:类似redis的缓存系统,但是支持分布式和扩展性
  • gor:网络流量抓包和重放工具

团队成员

Thompson:1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言。

Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。


Robert Griesemer:曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。


此外还有Plan 9开发者Russ Cox、和曾改善已广泛使用之开源码编译器GCC的Ian Taylor。


Go语言简史

  • 2007年,谷歌工程师Rob Pike, Ken Thompson和Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。
  • 2009年11月10日,Go语言以开放源代码的方式向全球发布。
  • 2010年1月10日 , Go语言摘得了TIOBE公布的2009年年度大奖。
  • 2011年3月16日,Go语言的第一个稳定(stable)版本r56发布。
  • 2012年3月28日,Go语言的第一个正式版本Go1发布
  • 2013年4月04日,Go语言的第一个Go 1.1beta1测试版发布。
  • 2013年4月08日,Go语言的第二个Go 1.1beta2测试版发布。
  • 2013年5月02日,Go语言Go 1.1RC1版发布。
  • 2013年5月07日,Go语言Go 1.1RC2版发布。
  • 2013年5月09日,Go语言Go 1.1RC3版发布。 
  • 2013年5月13日,Go语言Go 1.1正式版发布。
  • 2013年9月20日,Go语言Go 1.2RC1版发布。
  • 2014年6月19日,Go语言Go 1.3版发布。
  • 2015年8月20日,Go语言Go 1.5版发布,本次更新中移除了”最后残余的C代码”。
  • 2016年2月17日 , Go语言Go 1.6版本发布,本次开始全面支持 HTTP/2 国际标准。
  • 2016年8月15日 , Go语言Go 1.7版本发布。


 

支持平台

硬件架构

Go语言设计支持主流的32位和64位的x86平台,同时也支持32位的ARM架构。


操作系统

Go语言在Go1版本上支持Windows, 苹果Mac OS X, Linux和FreeBSD操作系统。


开发工具
LiteIDE

LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由QT编写。


Sublime Text

Sublime Text 3(以下简称Sublime)+ GoSublime + gocode + MarGo的组合。


Vim

Vim是从vi发展出来的一个文本编辑器,享有“编辑器之神”的称号。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。


Emacs

Emacs是由GNU开源组织开发出来的一个文本编辑器,同时更是一个整合环境,曾被人戏称“一个伪装成编辑器的操作系统”。


Eclipse

Eclipse也是非常常用的开发利器,可以使用Eclipse来编写Go程序。


IntelliJ IDEA

熟悉Java的读者应该对于idea不陌生,idea是通过一个插件来支持go语言的高亮语法,代码提示和重构实现



问答

1.Go的学习曲线是怎样的?

   Go不是针对编程初学者设计的,不过Go与Java类似,对于Java开发者来说,应该能够轻松学会 Go。

2.Go语言为什么开源?

   Go之所以开源目的是开源社区能够创建更好的GO程序库和工具。


目录
Go 语言教程
Go 语言环境安装
Go 语言结构
Go 语言基础语法
Go 语言数据类型
Go 语言变量
Go 语言常量
Go 语言运算符
Go 语言条件语句
Go 语言循环语句
Go 语言函数
Go 语言变量作用域
Go 语言数组
Go 语言指针
Go 语言结构体
Go 语言切片(Slice)
Go 语言范围(Range)
Go 语言Map(集合)
Go 语言递归函数
Go 语言类型转换
Go 语言接口
Go 错误处理
Go 语言开发工具

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }