Go语言入门(2)Go语言基础

1. 基础数据类型

  • 数字类型: 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且原生支持复数
  • 布尔型: true、false
  • 派生类型:
    (a) 指针类型(Pointer)
    (b) 数组类型
    (c) 结构化类型(struct)
    (d) Channel 类型
    (e) 函数类型
    (f) 切片类型
    (g) 接口类型(interface)
    (h) Map 类型

2. 基础语法

2.1 循环

go语言里面没有while,所以实现循环都是使用for

无限循环

1
2
3
for {

}

条件循环

1
2
for i:=0; i <10 ; i++{
}

2.2 判断

跟其他语言一样,判断有大于(>) 、小于(<) 、等于(==)、不等于(!=)、大于等于(>=)、小于等于(<=)

1
2
if i>10 {
}

3.3 选择

1
2
3
4
5
6
7
8
switch a {

case 1: fmt.Println("a为1")
case 2: fmt.Println("a为2")
default:
fmt.Println("a不确定")

}

3. 基本语法

3.1 定义常量、全局变量、局部变量

定义常量使用 const 关键字

1
const a int = 1 //必须要赋初值

全局变量,全局变量是在函数外定义并且必须要有var关键字

1
var b int = 10 //可以不用赋初值

局部变量,也就是在函数中定义的变量,可以省略 var关键字

1
2
3
var c int = 1 //最保守的写法
var c = 1 // 省略类型,让编译器自己判断
c := 1 //省略var关键字和类型,比较方便

注意:在go中 _ 这个小下划线被称为废弃数,如果某个值赋值给它则此值就被废弃不再使用了

3.2 定义数组、切片、map

  • 定义数组,

    1
    2
    // 定义了一个大小为10的数组
    var ids [10]int // 初始全为 0
  • 定义切片

    1
    2
    3
    //切片与数组最大的不同就是,切片是变长的,它的容量可以自动扩充
    var splice = make([]int3) // 指定切片大小
    var splice = make([]int,3,10) // 指定切片大小和容量

len 是这个切片初始化时的大小
cap 是这个切片的容量,当len大于cap时,此切片就会扩容,扩容为此时的cap的2倍

  • 定义 map
1
2
3
4
// 定义一个map,key为string类型,value为int类型
var m = make(map[string]int)
// 使用
m["age"] = 18

3.3 定义派生类型

  • 定义结构体,也就是java中的bean对象
1
2
3
4
5
type person struct{
id int
name string
age int
}
  • 定义接口
1
2
3
type Ising interface {
sing()
}
  • 实现接口

go语言中只要一个实体实现了接口中的所有方法,那么这个实体就是实现了这个接口

1
2
3
4
5
6
7
8
9
10
11
12
13
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语言中一般都是把错误当成返回值给调用的函数

1
2
3
4
5
6
7
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() 来恢复它

1
2
3
4
5
6
7
8
	// 不让线程终止
defer func() {
if r :=recover(); r!=nil{
log.Println("hava a error")
}
}()

panic(err)

4.3 defer 函数

这个函数有点类似于java中的finally,都是在函数执行返回值之前做一些操作,一般都是执行一些关闭流的操作

1
defer reader.close()
-------------本文结束感谢您的阅读-------------