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