1. 基础数据类型
- 数字类型: 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且原生支持复数
- 布尔型: true、false
- 派生类型:
(a) 指针类型(Pointer)
(b) 数组类型
© 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
2. 基础语法
2.1 循环
go语言里面没有while,所以实现循环都是使用for
无限循环
for {
}
条件循环
for i:=0; i <10 ; i++{
}
2.2 判断
跟其他语言一样,判断有大于(>) 、小于(<) 、等于(==)、不等于(!=)、大于等于(>=)、小于等于(<=)
if i>10 {
}
3.3 选择
switch a {
case 1: fmt.Println("a为1")
case 2: fmt.Println("a为2")
default:
fmt.Println("a不确定")
}
3. 基本语法
3.1 定义常量、全局变量、局部变量
定义常量使用 const
关键字
const a int = 1 //必须要赋初值
全局变量,全局变量是在函数外定义并且必须要有var
关键字
var b int = 10 //可以不用赋初值
局部变量,也就是在函数中定义的变量,可以省略 var
关键字
var c int = 1 //最保守的写法
var c = 1 // 省略类型,让编译器自己判断
c := 1 //省略var关键字和类型,比较方便
注意:在go中 _
这个小下划线被称为废弃数,如果某个值赋值给它则此值就被废弃不再使用了
3.2 定义数组、切片、map
- 定义数组,
// 定义了一个大小为10的数组
var ids [10]int // 初始全为 0
- 定义切片
//切片与数组最大的不同就是,切片是变长的,它的容量可以自动扩充
var splice = make([]int,3) // 指定切片大小
var splice = make([]int,3,10) // 指定切片大小和容量
len 是这个切片初始化时的大小
cap 是这个切片的容量,当len大于cap时,此切片就会扩容,扩容为此时的cap的2倍
- 定义 map
// 定义一个map,key为string类型,value为int类型
var m = make(map[string]int)
// 使用
m["age"] = 18
3.3 定义派生类型
- 定义结构体,也就是java中的bean对象
type person struct{
id int
name string
age int
}
- 定义接口
type Ising interface {
sing()
}
- 实现接口
go语言中只要一个实体实现了接口中的所有方法,那么这个实体就是实现了这个接口
type person struct {
string name
}
// 让person 实现 Ising 接口
func (p *person) sing(){
fmt.Println(p.name+"在唱歌")
}
// 使用
p := new(person)
p.name = "pibigstar"
p.sing()
4. 异常
4.1 异常处理
go语言中一般都是把错误当成返回值给调用的函数
func test(name string)(int,error){
if string=="" {
return 0,eroors.New("name cannot is null")
}else {
return m[name],nil
}
}
4.2 中断程序
当调用panic() 函数,该出错线程就会停止,而有的时候我们不想让它停止,我们可以 使用recover() 来恢复它
// 不让线程终止
defer func() {
if r :=recover(); r!=nil{
log.Println("hava a error")
}
}()
panic(err)
4.3 defer 函数
这个函数有点类似于java中的finally,都是在函数执行返回值之前做一些操作,一般都是执行一些关闭流的操作
defer reader.close()