golang基础语法
如有笔误,欢迎留言指正或讨论!
一、了解Golang
1.1、为什么用go?
Go是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。其次就和其它常用几个编程语言做个比较,如下:
vs | 一次编码 | 一次编译 | 无需运行环境 | 没有虚拟损失 | 无需自行处理GC | 面向对象 | 并发能力 |
---|---|---|---|---|---|---|---|
C | 否 | 是 | 否 | 是 | 否 | 否 | 否 |
C++ | 否 | 是 | 否 | 是 | 否 | 是 | 否 |
Java | 是 | 否 | 是 | 否 | 是 | 是 | 否 |
Golang | 是 | 否 | 是 | 是 | 是 | 是 | 是 |
1.2、go用途
优秀的Go项目:docker(虚拟化)、kubernetes(管理虚拟化)、etcd(强一致的kv数据库)、codis(redis集群的解决方案)、 falcon(小米公司开源的系统检测)、bilibili、tidb(上海开发强大的关系型数据库)
二、25个关键字
- 关键字
func 定义函数 interface 定义接口 select 监听和channel有关的IO操作 switch 选择结构 case 选择结构标签 break 跳出循环 default 选择结构体的默认选项 chan 定义channel continue 跳过本次循环 const 定义常量 defer 延迟执行(先入后出) go 并发执行(定义协程) map 定义map struct 定义结构体 if 选择结构 else 选择结构 goto 跳转语句 package 包 fallthrough 强制执行后面的case代码 range 从slice、map等结构中取出元素 type 定义类型 for 循环 import 导入包 return 返回 var 定义变量(a:=1 定义变量简写)
三、36个预定义标识符
- 内建常量
true false iota:常量计数器 nil
- 内建类型
整数有符号:int int8 int16 int32 int64 整数无符号:uint uint8 uint16 uint32 uint64 uintpat 浮点类型:float32 float64 复数:complex64 complex128 数据类型:bool byte rune string error
- 内建函数
make:堆上分配内存,初始化内存,返回引用类型本身 new:堆上分配内存,没有初始化内存,返回指向类型的指针 len:返回参数的长度 cap:返回参数的容量 append:在原切片的末尾添加元素 copy:复制切片到另一个切片 close:用于关闭通道 delete:用于删除集合的某个元素 complex:创建一个复数 real:获取一个复数的实部 imag:获取一个复数的虚部 painc:程序崩溃抛出错误 recover:捕获程序中抛出的panic,recover函数只能在defer延迟函数中调用
四、数据定义及错误处理
4、1 各个数据类型定义
- 变量、常量、函数
//定义变量 a := 1 var a int var ( a int b sting ) //定义常量 const a = 1 //定义函数 func 函数名(参数)(返回值){ 函数体 }
- 数组及切片(Slice)
//定义数组 var arr [10]int //定义切片 var arr_s []int //两者的去区别: //1、切片值传递是指针传递,是引用类型;数组值传递是将整个数组拷贝一份,是值类型 //2、切片称之为动态数组;数组是内置类型,是一组同类型的集合,初始化长度固定无法修改
- 集合(Map)
//注意:map是k/v键值对的无序集合,是引用类型,必须初始化才能使用! //KeyType:表示键的类型 //ValueType:表示键对应的值的类型 var map[KeyType]ValueType make(map[KeyType]ValueType, [cap]) //cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量,当你的容量超过时会自动扩充 data := make(map[int][sting], 3) //遍历:range //读取值:data[2] //删除值:dalate(data, 2)
4、2 捕获错误处理
- defer+recover
// 利用 defer+recover 来获取错误,defer后加上匿名函数的调用 defer func() { err := recover() if err != nil { fmt.printn("捕获到错误了, err = ", err) } }()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rain!
评论