- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GO程序设计语言
Go程序设计语言(一)
本文译自 HYPERLINK /wiki/Rob_Pike Rob Pike的 HYPERLINK Go语言PPT教程 – HYPERLINK /doc/GoCourseDay1.pdf The Go Programming Language Part 1(updated June 2011)。由于该教程的最新更新时间早于 HYPERLINK /doc/go1.html Go 1版本发布,因此该PPT中的一些内容与Go 1语言规范略有差异,到时我会在相应的地方做上注解。
谁发明了Go
Go语言的设计和实现工作是由Google的一个研发小组以及来自世界各地的大量贡献者共同完成的。
联系方式:
HYPERLINK :???????????????? 官网
HYPERLINK mailto:golang-nuts@ golang-nuts@:??? 用户讨论组
HYPERLINK mailto:golang-dev@ golang-dev@:???? 开发者讨论组
课程大纲
第一部分:基础第二部分:类型(type)、方法(method)以及接口(interface)第三部分:并发(concurrency)与通信(communication)
这个课程是关于Go程序设计语言的,而不是关于编程语言设计方法的,后者是一个单独的话题,不在此教程范围内。
第一部分大纲
动机
基础 -?简单、熟悉的内容
包与程序构建
动机
为什么要发明一门新语言?
在当今世界,编程语言在某些方面不够给力:
计算机运行速度快,但软件的构建慢。
为了速度和安全性需进行必要的依赖分析。
在类型上遇到了太多的阻碍。
对垃圾收集以及并发的支持太差。
多核被视为危机而不是机会。
积极应对
我们的目标是让编程重新回归快乐。
兼有动态语言的感觉以及静态类型系统的安全性;
编译成机器语言以获得更快的运行速度;
真正在运行时支持GC(垃圾收集)以及并发;
轻量级、灵活的类型系统;
拥有方法(method),但却不是传统的OO(面向对象)语言。
资源
关于Go语言的更多背景资料请参见文档:
文档包括:
语言规范
教程
Effective Go
标准库文档
安装和How-to文档
FAQs
一个语言联系游乐场(在浏览器中运行Go程序)
更多
现状:编译器
gc( HYPERLINK /wiki/Ken_Thompson Ken Thompson),又称6g,8g,5g??????? 继承自Plan 9项目的编译器模型??????? 生成代码速度非常快??????? 不支持gcc直接链接
gccgo(Ian Taylor)??????? 更为熟悉的体系架构??????? 生成代码的速度没有gc那样快??????? 支持gcc直接链接
支持32-bit和64-bit x86 (amd64,x86-64) 以及ARM。
垃圾收集器,并发等都已实现。优秀且正逐步完善的标准库。
基础
是时候上一些代码了
package main
import fmt
?
func main() {
? ? fmt.Print(Hello, 世界\n)
}
?
语言基础
假设熟悉其他C语言类的(C-like)编程语言,这里将快速浏览一些基础知识。
这里大部分内容是简单的且熟悉的,也可能因此而有些沉闷,这里先说声道歉。
接下来的两部分教程会包含很有趣的内容,不过我们首先需要打下良好基础。
词法结构
- 传统中蕴含新意。
- 源码采用UTF-8编码。空格包括:空白,tab,换行,回车。
- 标识符由字母和数字组成(外加_),字母和数字都是Unicode编码。
- 注释:
/* This is a comment; no nesting */
// So is this.
?
字面值(literals)
类似C语言中的字面值,但数值不需要符号以及大小标志(后续会有更多这方面内容):
?
23
0x0FF
1.234e7
?
类似C中的字符串,但字符串是Unicode/UTF-8编码的。同时,\xNN总是有2个数字;\012总是3;两个都是字节:
?
Hello, world\n
\xFF ? ? ??// 1 byte
\u00FF ? ? // 1 Unicode char, 2 bytes of UTF-8
?
原生字符串:`\n\.abc\t\` == \\n\\.abc\\t\\
语法概述
基本上就是类C的语法,但使用反转的类型和声明,并使用关键字作为每个声明的开头。
?
var a intvar b, c *int // 注意与C的不同var d []inttype S struct { a, b int }
?
基本的控制结构也十分熟悉:
?
i
文档评论(0)