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