Go语言基础讲解

发布时间:2020-11-11   来源:文档文库   
字号:

Go语言讲解
Go语言介绍: Go语言专门针对多处理器系统应用程序得编程进行了优化,使用Go编译得程序可以媲CC++代码得速度,而且更加安全、支持并行进程。R0Bsc
Go就是一门 并发支持 、垃圾回收 编译型 系统编程语言,旨在创造一门具有在静态编译语言得 高性能 与动态语言得 高效开发
之间拥有良好平衡点得一门编程语言。LxtTF
并发性:Go语言为此专门创造出了一个关键字“go”。使用这个关键字,我们就可以很容易得使一个函数被并发得执行icHtq
垃圾回收:编程者不用考虑内存得泄露或者野指针得事情,因为GO语言会对内存进行管理。
Go得主要特点有哪些?
类型安全 内存安全
以非常直观与极低代价得方案实现 高并发 高效得垃圾回收机制
快速编译(同时解决C语言中头文件太多得问题 为多核计算机提供性能提升得方案 可以指定cpu核数 UTF-8编码支持 可以支持多种字符格式 Go语言编写规则: Go内置25个关键字(均为小写
break default func interface select5yrDw case defer go map structRmgcP chan else goto package switchAkZz7 const fallthrough if range typeCCJJZ continue for import return var 9U9wX
注释方法同C语言
// :单行注释



/* */:多行注释
Go程序得一般结构: 命名方式:basic_structurego Go程序就是通过 package 来组织得(python类似 只有 package 名称为 main 得包可以包含 main 函数 一个可执行程序 有且仅有 一个 main 通过 import 关键字来导入其它非 main 通过 const 关键字来进行常量得定义
通过在函数体外部使用 var 关键字来进行全局变量得声明与赋值 通过 type 关键字来进行结构(struct或接口(interface得声明 通过 func 关键字来进行函数得声明




Go语言中,使用 大小写 来决定该 常量、变量、类型、接口、结构 或函数 就是否可以被外部包所调用:


根据约定,函数名首字母 小写 即为private
函数名首字母 大写 即为public
Go语言基本类型部分: 布尔型:bool

- 长度:1字节
- 取值范围:true, false - 注意事项:不可以用数字代表truefalse 整型:int/uint
- 根据运行平台可能为3264
8位整型:int8/uint8

- 长度:1字节
- 取值范围:-128~127/0~255 字节型:byte(uint8别名 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小数位
复数:plex64/plex128
- 长度:8/16字节
足够保存指针得 32 位或 64 位整数型:uintptr 其它值类型:
- arraystructstring 引用类型:
- slicemapchan 接口类型:inteface 函数类型:func 变量得声明与赋值形式: 变量得声明格式:var <变量名称> <变量类型> 变量得赋值格式:<变量名称> = <表达式> 声明得同时赋值:var <变量名称> [变量类型] = <表达式>
第一种:主要用于全局变量得使用中
第二种:此种定义方式,用于变量进行运算得时候,所得到得结果也许会与变量得类型不一样,系统可以自行推断结果变量得类型,所以这也就是很方便得。FbiPC 第三种:设置变量时,您已经有一个初始值时,就可以用这种方式。



常量得定义
常量得值在编译时就已经确定 常量得定义格式与变量基本相同 等号右侧必须就是常量或者常量表达式 常量表达式中得函数必须就是内置函数

运算符
Go中得运算符均就是从左至右结合 优先级(从高到低
^ ! (一元运算符3vBUA
* / % << >> & &^ + - | ^ (二元运算符xfDPB
== != < <= >= > <- (专门用于channelJpWWo && || 指针
Go虽然保留了指针,但与其它编程语言不同得就是,Go当中不 支持指针运算以及”->”运算符,而直接采用”、”选择符来操作指针



目标对象得成员
操作符”&”取变量地址,使用”*”通过指针间接访问目标对象 默认值为 nil 而非 NULL 循环语句for Go只有for一个循环语句关键字,但支持3种形式 初始化与步进表达式可以就是多个值
条件语句每次循环都会被重新检查,因此不建议在条件语句中 使用函数,尽量提前计算好条件并以变量或常量代替 左大括号必须与条件语句在同一行

选择语句switch 可以使用任何类型或表达式作为条件语句 不需要写break,一旦条件符合自动终止
如希望继续执行下一个case,需使用fallthrough语句 支持一个初始化表达式(可以就是并行方式,右侧需跟分号 左大括号必须与条件语句在同一行

切片Slice Go 语言切片就是对数组得抽象。
Go 数组得长度不可改变,在特定场景中这样得集合就不太适用,Go中提供了一种灵活,功能强悍得内置类型切片("动态数组",与数组相比切片得长度就是不固定得,可以追加元


,在追加时可能使切片得容量增大297pI
创建切片: var slice1 []type = make([]type, len 也可以简写为
slice1 := make([]type, len 也可以指定切片得容量 make([]T, length, capacity 切片得初始化 s :=[] int {1,2,3 } 切片截取
s1 := s[startIndex:endIndex] s中从下标startIndexendIndex-1 下得元素创建为一个新得切片
示例: package main import "fmt" func main( { /* 创建切片 */
numbers := []int{0,1,2,3,4,5,6,7,8} printSlice(numbers /* 打印原始切片 */
fmtPrintln("numbers ==", numbers
/* 打印子切片从索引1(包含 到索引4(不包含*/ fmtPrintln("numbers[1:4] ==", numbers[1:4] /* 默认下限为 0*/
fmtPrintln("numbers[:3] ==", numbers[:3] /* 默认上限为 len(s*/



fmtPrintln("numbers[4:] ==", numbers[4:] numbers1 := make([]int,0,5 printSlice(numbers1
/* 打印子切片从索引 0(包含 到索引 2(不包含 */ number2 := numbers[:2] printSlice(number2
/* 打印子切片从索引 2(包含 到索引 5(不包含 */ number3 := numbers[2:5] printSlice(number3 }
func printSlice(x []int{
fmtPrintf("len=%d cap=%d slice=%v\n",len(x,cap(x,x}xxWTO
以上代码得执行结果: len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8] numbers == [0 1 2 3 4 5 6 7 8] numbers[1:4] == [1 2 3] numbers[:3] == [0 1 2] numbers[4:] == [4 5 6 7 8] len=0 cap=5 slice=[] len=2 cap=9 slice=[0 1] len=3 cap=7 slice=[2 3 4]
Append(copy(函数
如果想增加切片得容量,我们必须创建一个新得更大得切片并把原分片得内容都拷贝过来。 下面得代码描述了从拷贝切片得 copy 方法与向切片追加新元素得 append 方法。
Go 语言Map(集合



Map 就是一种无序得键值对得集合。Map 最重要得一点就是通过 key 来快速检索数据,key 类似于索引,指向数据得值。sOrT1
Map 就是一种集合,所以我们可以像迭代数组与切片那样迭代它。不过,Map 就是无序得,们无法决定它得返回顺序,这就是因为 Map 就是使用 hash 表来实现得。BVKpr
定义 Map 可以使用内建函数 make 也可以使用 map 关键字来定义 Map: /* 声明变量,默认 map 就是 nil */var map_variable map[key_data_type]value_data_typeqn4Zo /* 使用 make 函数 */
map_variable = make(map[key_data_type]value_data_typeld72D 示例
package main import "fmt" func main( {
var countryCapitalMap map[string]string /* 创建集合 */
countryCapitalMap = make(map[string]string /* map 插入 key-value ,各个国家对应得首都 */ countryCapitalMap["France"] = "Paris" countryCapitalMap["Italy"] = "Rome" countryCapitalMap["Japan"] = "Tokyo" countryCapitalMap["India"] = "New Delhi" /* 使用 key 输出 map */
for country := range countryCapitalMap {
fmtPrintln("Capital of",country,"is",countryCapitalMap[country]GvpoG
}/*range 关键字用于for循环中迭代数组(array切片(slice链表(channel或集合(map得元素。在数组与切片中它返回元素得索引值,在集合中返回 key-value 对得 key 值。 */OKwzw /* 查瞧元素在集合中就是否存在 */



captial, ok := countryCapitalMap["United States"] /* 如果 ok 就是 true, 则存在,否则不存在 */ if(ok{
fmtPrintln("Capital of United States is", captial y46ol }else {
fmtPrintln("Capital of United States is not present" p2yF1 }}
输出结果: Capital of France is Paris Capital of Italy is Rome Capital of Japan is Tokyo Capital of India is New Delhi
Capital of United States is not present


本文来源:https://www.2haoxitong.net/k/doc/e680552e185f312b3169a45177232f60dccce7c4.html

《Go语言基础讲解.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式