• 1. Go编程基础讲师:无闻什么是Go? Go是一门 并发支持 、垃圾回收 的 编译型 系统编程语言,旨在创 造一门具有在静态编译语言的 高性能 和动态语言的 高效开发 之间拥有 良好平衡点的一门编程语言。 Go的主要特点有哪些? 类型安全 和 内存安全 以非常直观和极低代价的方案实现 高并发 高效的垃圾回收机制 快速编译(同时解决C语言中头文件太多的问题) 为多核计算机提供性能提升的方案 UTF-8编码支持
  • 2. Go编程基础讲师:无闻Go存在的价值是什么? Go在谷歌:以软件工程为目的的语言设计 Go是记事本编程吗? 包括VIM,IDEA,Sublime Text,Eclipse等众多知名IDE均已支持 Go目前有多少实际应用和资源? 全球最大视频网站 Youtube(谷歌) 七牛云储存以及旗下网盘服务(Q盘) 爱好者开发的Go论坛及博客 已用Go开发服务端的著名企业:谷歌、盛大、七牛、360 其它海量开源项目:go-wiki、GoDoc、Go Language Resources
  • 3. Go编程基础讲师:无闻Go发展成熟了吗? 作为一门2009年才正式发布的编程语言,Go是非常年轻的,因此 不能称为一门成熟的编程语言,但开发社区每天都在不断更新其核心代 码,给我们这些爱好者给予了很大的学习和开发动力。 Go的爱好者多吗? 以Google Group为主的邮件列表每天都会更新10至20帖,国内 的Go爱好者QQ群和论坛每天也在进行大量的讨论,因此可以说目前 Go爱好者群体是足够壮大。 Golang相关QQ群
  • 4. Go编程基础讲师:无闻安装Go语言 Go源码安装:参考链接 Go标准包安装:下载地址 第三方工具安装 Go环境变量与工作目录 根据约定,GOPATH下需要建立3个目录: bin(存放编译后生成的可执行文件) pkg(存放编译后生成的包文件) src(存放项目源码)
  • 5. Go编程基础讲师:无闻Go命令 在命令行或终端输入go即可查看所有支持的命令 Go常用命令简介 go get:获取远程包(需 提前安装 git或hg) go run:直接运行程序 go build:测试编译,检查是否有编译错误 go fmt:格式化源码(部分IDE在保存时自动调用) go install:编译包文件并编译整个程序 go test:运行测试文件 go doc:查看文档(CHM手册)
  • 6. Go编程基础讲师:无闻程序的整体结构
  • 7. Go编程基础讲师:无闻Go开发工具安装及配置 本套教程主要使用 Sublime Text 其它IDE安装方案:参考链接 Sublime Text 下载Sublime Text:官方网站 安装gosublime(破解版可能无法安装):安装指令 Sublime Text 2 入门及技巧
  • 8. Go编程基础讲师:无闻Go语言版”Hello world!”输出:hello.go
  • 9. Go编程基础讲师:无闻课堂笔记的使用方法 课程大纲给出了知识点讲解的时间点,方便快速定位 补充说明在教程录制完成后根据反馈进行修正或补充 相关链接给出了课件中所有用到的链接,方便在看视频的同时打开
  • 10. Go编程基础讲师:无闻Go内置关键字(25个均为小写) break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var Go注释方法 // :单行注释 /* */:多行注释
  • 11. Go编程基础讲师:无闻Go程序的一般结构:basic_structure.go Go程序是通过 package 来组织的(与python类似) 只有 package 名称为 main 的包可以包含 main 函数 一个可执行程序 有且仅有 一个 main 包 通过 import 关键字来导入其它非 main 包 通过 const 关键字来进行常量的定义 通过在函数体外部使用 var 关键字来进行全局变量的声明与赋值 通过 type 关键字来进行结构(struct)或接口(interface)的声明 通过 func 关键字来进行函数的声明
  • 12. Go编程基础讲师:无闻Go导入 package 的格式- 导入包之后,就可以使用格式. 来对包中的函数进行调用 如果导入包之后 未调用 其中的函数或者类型将会报出编译错误:
  • 13. Go编程基础讲师:无闻package 别名 当使用第三方包时,包名可能会非常接近或者相同,此时就可以使用 别名来进行区别和调用 省略调用 不建议使用,易混淆 不可以和别名同时使用
  • 14. Go编程基础讲师:无闻可见性规则 Go语言中,使用 大小写 来决定该 常量、变量、类型、接口、结构 或函数 是否可以被外部包所调用: 根据约定,函数名首字母 小写 即为private 函数名首字母 大写 即为public
  • 15. Go编程基础讲师:无闻课堂作业 既然导入多个包时可以进行简写,那么声明多个 常量、全局变量 或一般类型(非接口、非结构)是否也可以用同样的方法呢? 请动手验证。
  • 16. Go编程基础讲师:无闻Go基本类型 布尔型:bool - 长度:1字节 - 取值范围:true, false - 注意事项:不可以用数字代表true或false 整型:int/uint - 根据运行平台可能为32或64位 8位整型:int8/uint8 - 长度:1字节 - 取值范围:-128~127/0~255 字节型:byte(uint8别名)
  • 17. Go编程基础讲师:无闻Go基本类型 16位整型:int16/uint16 - 长度:2字节 - 取值范围:-32768~32767/0~65535 32位整型:int32(rune)/uint32 - 长度:4字节 - 取值范围:-2^32/2~2^32/2-1/0~2^32-1 64位整型:int64/uint64 - 长度:8字节 - 取值范围:-2^64/2~2^64/2-1/0~2^64-1 浮点型:float32/float64 - 长度:4/8字节 - 小数位:精确到7/15小数位
  • 18. Go编程基础讲师:无闻Go基本类型 复数:complex64/complex128 - 长度:8/16字节 足够保存指针的 32 位或 64 位整数型:uintptr 其它值类型: - array、struct、string 引用类型: - slice、map、chan 接口类型:inteface 函数类型:func
  • 19. Go编程基础讲师:无闻类型零值 零值并不等于空值,而是当变量被声明为某种类型后的默认值, 通常情况下值类型的默认值为0,bool为false,string为空字符串类型别名
  • 20. Go编程基础讲师:无闻单个变量的声明与赋值 变量的声明格式:var <变量名称> <变量类型> 变量的赋值格式:<变量名称> = <表达式> 声明的同时赋值:var <变量名称> [变量类型] = <表达式>
  • 21. Go编程基础讲师:无闻多个变量的声明与赋值 全局变量的声明可使用 var() 的方式进行简写 全局变量的声明不可以省略 var,但可使用并行方式 所有变量都可以使用类型推断 局部变量不可以使用 var() 的方式简写,只能使用并行方式
  • 22. Go编程基础讲师:无闻变量的类型转换 Go中不存在隐式转换,所有类型转换必须显式声明 转换只能发生在两种相互兼容的类型之间 类型转换的格式: [:]= ()
  • 23. Go编程基础讲师:无闻课堂作业 请尝试运行以下代码,看会发生什么,并思考为什么。string() 表示将数据转换成文本格式,因为计算机中存储的任何东西 本质上都是数字,因此此函数自然地认为我们需要的是用数字65表示 的文本 A。
  • 24. Go编程基础讲师:无闻常量的定义 常量的值在编译时就已经确定 常量的定义格式与变量基本相同 等号右侧必须是常量或者常量表达式 常量表达式中的函数必须是内置函数
  • 25. Go编程基础讲师:无闻常量的初始化规则与枚举 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式 使用相同的表达式不代表具有相同的值 iota是常量的计数器,从0开始,组中每定义1个常量自动递增1 通过初始化规则与iota可以达到枚举的效果 每遇到一个const关键字,iota就会重置为0
  • 26. Go编程基础讲师:无闻运算符 Go中的运算符均是从左至右结合 优先级(从高到低) ^ ! (一元运算符) * / % << >> & &^ + - | ^ (二元运算符) == != < <= >= > <- (专门用于channel) && ||
  • 27. Go编程基础讲师:无闻课堂作业 请尝试结合常量的iota与<<运算符实现计算机储存单位的枚举
  • 28. Go编程基础讲师:无闻指针 Go虽然保留了指针,但与其它编程语言不同的是,在Go当中不 支持指针运算以及”->”运算符,而直接采用”.”选择符来操作指针 目标对象的成员 操作符”&”取变量地址,使用”*”通过指针间接访问目标对象 默认值为 nil 而非 NULL 递增递减语句 在Go当中,++ 与 -- 是作为语句而并不是作为表达式
  • 29. Go编程基础讲师:无闻判断语句if 条件表达式没有括号 支持一个初始化表达式(可以是并行方式) 左大括号必须和条件语句或else在同一行 支持单行模式 初始化语句中的变量为block级别,同时隐藏外部同名变量 1.0.3版本中的编译器BUG
  • 30. Go编程基础讲师:无闻循环语句for Go只有for一个循环语句关键字,但支持3种形式 初始化和步进表达式可以是多个值 条件语句每次循环都会被重新检查,因此不建议在条件语句中 使用函数,尽量提前计算好条件并以变量或常量代替 左大括号必须和条件语句在同一行
  • 31. Go编程基础讲师:无闻选择语句switch 可以使用任何类型或表达式作为条件语句 不需要写break,一旦条件符合自动终止 如希望继续执行下一个case,需使用fallthrough语句 支持一个初始化表达式(可以是并行方式),右侧需跟分号 左大括号必须和条件语句在同一行
  • 32. Go编程基础讲师:无闻跳转语句goto, break, continue 三个语法都可以配合标签使用 标签名区分大小写,若不使用会造成编译错误 Break与continue配合标签可用于多层循环的跳出 Goto是调整执行位置,与其它2个语句配合标签的结果并不相同
  • 33. Go编程基础讲师:无闻课堂作业 将下图中的continue替换成goto,程序运行的结果还一样吗? 请尝试并思考为什么。Goto是调整执行位置
  • 34. Go编程基础讲师:无闻数组Array 定义数组的格式:var [n],n>=0 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 注意区分指向数组的指针和指针数组 数组在Go中为值类型 数组之间可以使用==或!=进行比较,但不可以使用<或> 可以使用new来创建数组,此方法返回一个指向数组的指针 Go支持多维数组 Go语言版冒泡排序
  • 35. 相关资源Go Web编程交流QQ群:259316004 Go语言学习交流论坛:http://mygolang.com Go语言学习园地:http://studygolang.com/