Go语言基础讲解.doc_第1页
Go语言基础讲解.doc_第2页
Go语言基础讲解.doc_第3页
Go语言基础讲解.doc_第4页
Go语言基础讲解.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Go语言讲解Go语言介绍:Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C+代码的速度,而且更加安全、支持并行进程。Go是一门 并发支持 、垃圾回收 的 编译型 系统编程语言,旨在创造一门具有在静态编译语言的 高性能 和动态语言的 高效开发 之间拥有良好平衡点的一门编程语言。并发性:。Go语言为此专门创造出了一个关键字“go”。使用这个关键字,我们就可以很容易的使一个函数被并发的执行垃圾回收:编程者不用考虑内存的泄露或者野指针的事情,因为GO语言会对内存进行管理。Go的主要特点有哪些?类型安全 和 内存安全以非常直观和极低代价的方案实现 高并发高效的垃圾回收机制快速编译(同时解决C语言中头文件太多的问题)为多核计算机提供性能提升的方案 可以指定cpu核数UTF-8编码支持 可以支持多种字符格式Go语言编写规则:Go内置25个关键字(均为小写)break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return var 注释方法同C语言/ :单行注释/* */:多行注释Go程序的一般结构:命名方式:basic_structure.goGo程序是通过 package 来组织的(与python类似)只有 package 名称为 main 的包可以包含 main 函数一个可执行程序 有且仅有 一个 main 包通过 import 关键字来导入其它非 main 包通过 const 关键字来进行常量的定义通过在函数体外部使用 var 关键字来进行全局变量的声明与赋值通过 type 关键字来进行结构(struct)或接口(interface)的声明通过 func 关键字来进行函数的声明Go语言中,使用 大小写 来决定该 常量、变量、类型、接口、结构或函数 是否可以被外部包所调用:根据约定,函数名首字母 小写 即为private函数名首字母 大写 即为publicGo语言基本类型部分:布尔型:bool- 长度:1字节- 取值范围:true, false- 注意事项:不可以用数字代表true或false整型:int/uint- 根据运行平台可能为32或64位8位整型:int8/uint8- 长度:1字节- 取值范围:-128127/0255字节型:byte(uint8别名)16位整型:int16/uint16- 长度:2字节- 取值范围:-3276832767/06553532位整型:int32(rune)/uint32- 长度:4字节- 取值范围:-232/2232/2-1/0232-164位整型:int64/uint64- 长度:8字节- 取值范围:-264/2264/2-1/0264-1浮点型:float32/float64- 长度:4/8字节- 小数位:精确到7/15小数位复数:complex64/complex128- 长度:8/16字节足够保存指针的 32 位或 64 位整数型:uintptr其它值类型:- array、struct、string引用类型:- slice、map、chan接口类型:inteface函数类型:func变量的声明和赋值形式:变量的声明格式:var 变量的赋值格式: = 声明的同时赋值:var 变量类型 = 第一种:主要用于全局变量的使用中第二种:此种定义方式,用于变量进行运算的时候,所得到的结果也许会和变量的类型不一样,系统可以自行推断结果变量的类型,所以这也是很方便的。第三种:设置变量时,你已经有一个初始值时,就可以用这种方式。常量的定义常量的值在编译时就已经确定常量的定义格式与变量基本相同等号右侧必须是常量或者常量表达式常量表达式中的函数必须是内置函数运算符Go中的运算符均是从左至右结合优先级(从高到低) ! (一元运算符)* / % & &+ - | (二元运算符)= != = ”运算符,而直接采用”.”选择符来操作指针目标对象的成员操作符”&”取变量地址,使用”*”通过指针间接访问目标对象默认值为 nil 而非 NULL循环语句forGo只有for一个循环语句关键字,但支持3种形式初始化和步进表达式可以是多个值条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量代替左大括号必须和条件语句在同一行选择语句switch可以使用任何类型或表达式作为条件语句不需要写break,一旦条件符合自动终止如希望继续执行下一个case,需使用fallthrough语句支持一个初始化表达式(可以是并行方式),右侧需跟分号左大括号必须和条件语句在同一行切片SliceGo 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片(动态数组),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。创建切片:var slice1 type = make(type, len)也可以简写为slice1 := make(type, len)也可以指定切片的容量make(T, length, capacity)切片的初始化s := int 1,2,3 切片截取s1 := sstartIndex:endIndex 将s中从下标startIndex到endIndex-1 下的元素创建为一个新的切片示例:package mainimport fmtfunc main() /* 创建切片 */ numbers := int0,1,2,3,4,5,6,7,8 printSlice(numbers) /* 打印原始切片 */ fmt.Println(numbers =, numbers) /* 打印子切片从索引1(包含) 到索引4(不包含)*/ fmt.Println(numbers1:4 =, numbers1:4) /* 默认下限为 0*/ fmt.Println(numbers:3 =, numbers:3) /* 默认上限为 len(s)*/ fmt.Println(numbers4: =, numbers4:) numbers1 := make(int,0,5) printSlice(numbers1) /* 打印子切片从索引 0(包含) 到索引 2(不包含) */ number2 := numbers:2 printSlice(number2) /* 打印子切片从索引 2(包含) 到索引 5(不包含) */ number3 := numbers2:5 printSlice(number3)func printSlice(x int) fmt.Printf(len=%d cap=%d slice=%vn,len(x),cap(x),x)以上代码的执行结果:len=9 cap=9 slice=0 1 2 3 4 5 6 7 8numbers = 0 1 2 3 4 5 6 7 8numbers1:4 = 1 2 3numbers:3 = 0 1 2numbers4: = 4 5 6 7 8len=0 cap=5 slice=len=2 cap=9 slice=0 1len=3 cap=7 slice=2 3 4Append()和copy()函数如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。下面的代码描述了从拷贝切片的 copy 方法和向切片追加新元素的 append 方法。Go 语言Map(集合)Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。定义 Map可以使用内建函数 make 也可以使用 map 关键字来定义 Map:/* 声明变量,默认 map 是 nil */var map_variable mapkey_data_typevalue_data_type/* 使用 make 函数 */map_variable = make(mapkey_data_typevalue_data_type)示例package mainimport fmtfunc main() var countryCapitalMap mapstringstring /* 创建集合 */ countryCapitalMap = make(mapstringstring) /* map 插入 key-value 对,各个国家对应的首都 */ countryCapitalMapFrance = Paris countryCapitalMapItaly = Rome countryCapitalMapJapan = Tokyo countryCapitalMapIndia = New Delhi /* 使用 key 输出 map 值 */ for country := range countryCapitalMap fmt.Println(Capital of,country,is,countryCapitalMapcountry) /*range 关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。在数组和切片中它返回元素的索引值,在集合中返回 key-value 对的 key 值。 */ /* 查看元素在集合中是否存在 */ captial, ok := countryCapitalMapUnited States /* 如果 ok 是 true, 则存在,否则不存在 */ if(ok) fmt.Println(Capital of United States

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论