Golang基础
2020-08-06 09:54:14 120 举报
AI智能生成
Golang,又称Go语言,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它的语法与C相近,但功能上有:内存安全,GC(垃圾回收),结构形态及CSP-style并发计算。Go语言的吉祥物是名为“Go”的小鸟,寓意着迅速和高效。Go语言在软件构建、网络编程、并发处理等领域表现出色,被广泛应用于云计算、大数据处理、微服务架构等场景。
作者其他创作
大纲/内容
Golang基础
环境安装
下载地址: https://studygolang.com/dl
设置环境变量
Windows :GOROOT 安装路径 GOPATH 代码工作区路径 GOPROXY 包下载代理地址
Linux : export GOPROXY=https://goproxy.cnexport GOROOT=/data/goexport GOPATH=/data/gocodeexport PATH=$GOROOT/bin:$GOPATH/bin:$PATH
测试环境
执行命令: go env
基础语法
Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号
变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字: var xxx 数据类型 = xxx
常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。常量的定义格式: const identifier [type] = value
iotaiota,特殊常量,可以认为是一个可以被编译器修改的常量。iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
数据类型
数字类型
整型
uint8无符号 8 位整型 (0 到 255)
uint16无符号 16 位整型 (0 到 65535)
uint32无符号 32 位整型 (0 到 4294967295)
uint64无符号 64 位整型 (0 到 18446744073709551615)
int8有符号 8 位整型 (-128 到 127)
int16有符号 16 位整型 (-32768 到 32767)
int32有符号 32 位整型 (-2147483648 到 2147483647)
int64有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
浮点型
float32IEEE-754 32位浮点型数
float64IEEE-754 64位浮点型数
complex6432 位实数和虚数
complex12864 位实数和虚数
其他数字类型
byte 类似 uint8
rune 类似 int32
uint 32 或 64 位
int 与 uint 一样大小
uintptr 无符号整型,用于存放一个指针
布尔型
常量 true 或 false
字符串类型
字符串就是一串固定长度的字符连接起来的字符序列
派生类型
(a) 指针类型(Pointer)(b) 数组类型(c) 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型
运算符
算术元运算符
+\t相加\tA + B 输出结果 30-\t相减\tA - B 输出结果 -10*\t相乘\tA * B 输出结果 200/\t相除\tB / A 输出结果 2%\t求余\tB % A 输出结果 0++\t自增\tA++ 输出结果 11--\t自减\tA-- 输出结果 9
关系运算符
==\t检查两个值是否相等,如果相等返回 True 否则返回 False。\t(A == B) 为 False!=\t检查两个值是否不相等,如果不相等返回 True 否则返回 False。\t(A != B) 为 True>\t检查左边值是否大于右边值,如果是返回 True 否则返回 False。\t(A > B) 为 False<\t检查左边值是否小于右边值,如果是返回 True 否则返回 False。\t(A < B) 为 True>=\t检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。\t(A >= B) 为 False<=\t检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。\t(A <= B) 为 True
逻辑运算符
&&\t逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。\t(A && B) 为 False||\t逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。\t(A || B) 为 True!\t逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。\t!(A && B) 为 True
位运算符
&\t按位与运算符\"&\
赋值运算符
=\t简单的赋值运算符,将一个表达式的值赋给一个左值\tC = A + B 将 A + B 表达式结果赋值给 C+=\t相加后再赋值\tC += A 等于 C = C + A-=\t相减后再赋值\tC -= A 等于 C = C - A*=\t相乘后再赋值\tC *= A 等于 C = C * A/=\t相除后再赋值\tC /= A 等于 C = C / A%=\t求余后再赋值\tC %= A 等于 C = C % A<<=\t左移后赋值\tC <<= 2 等于 C = C << 2>>=\t右移后赋值\tC >>= 2 等于 C = C >> 2&=\t按位与后赋值\tC &= 2 等于 C = C & 2^=\t按位异或后赋值\tC ^= 2 等于 C = C ^ 2|=\t按位或后赋值\tC |= 2 等于 C = C | 2
其他运算符
&\t返回变量存储地址\t&a; 将给出变量的实际地址。*\t指针变量。\t*a; 是一个指针变量
运算符优先级
优先级\t运算符5\t* / % << >> & &^4\t+ - | ^3\t== != < <= > >=2\t&&1\t||
流程控制
switch 语句\tswitch 语句用于基于不同条件执行不同动作。select 语句\tselect 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
for
Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。1、和 C 语言的 for 一样: for init; condition; post { }2、和 C 的 while 一样: for condition { }3、和 C 的 for(;;) 一样: for { }init: 一般为赋值表达式,给控制变量赋初值;condition: 关系表达式或逻辑表达式,循环控制条件;post: 一般为赋值表达式,给控制变量增量或减量。
for语句执行过程如下:1、先对表达式 1 赋初值;2、判别赋值表达式 init 是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。
break 语句\t经常用于中断当前 for 循环或跳出 switch 语句continue 语句\t跳过当前循环的剩余语句,然后继续进行下一轮循环。goto 语句\t将控制转移到被标记的语句。
函数 Func
函数是基本的代码块,用于执行一个任务。Go 语言最少有个 main() 函数。
Go 语言函数定义格式如下:func function_name( [parameter list] ) [return_types] { 函数体}函数定义解析:func:函数由 func 开始声明function_name:函数名称,函数名和参数列表一起构成了函数签名。parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。函数体:函数定义的代码集合。
函数参数函数如果使用参数,该变量可称为函数的形参;形参就像定义在函数体内的局部变量。调用函数,可以通过两种方式来传递参数:值传递\t值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。引用传递\t引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
变量作用域 Go 语言中变量可以在三个地方声明:函数内定义的变量称为局部变量函数外定义的变量称为全局变量函数定义中的变量称为形式参数
局部变量: 在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。
全局变量在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。全局变量可以在任何函数中使用
形式参数形式参数会作为函数的局部变量来使用
数组 Array
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
声明数组Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:var variable_name [SIZE] variable_type以上为一维数组的定义方式。例如以下定义了数组 balance 长度为 10 类型为 float32:var balance [10] float32
切片 Slice
Go 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片(\"动态数组\
len() 和 cap() 函数切片是可索引的,并且可以由 len() 方法获取长度。切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。
append() 和 copy() 函数如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。下面的代码描述了从拷贝切片的 copy 方法和向切片追加新元素的 append 方法。
集合 Map
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。
结构体 Struct
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
错误处理 Error
并发编程 goroutine
通道 Channel
0 条评论
回复 删除
下一页