go语言顺序编程

一.变量

1.1声明

单变量声明

    var v1 int = 1
    var v2 = 2
    v3 := 3

多变量声明

var v1,v2,v3 int = 1,2,3
var(
        v1 int = 1
        v2 int = 2
        v3 int = 3
    )

1.2匿名变量

使用 ” _” 做为占位符

func getName() (string,string)  {
    return "a","b"
} 
name,_:= getName();
fmt.Println(name)

二.常量

2.1声明

常量声明和变量声明基本一致,只是将var变为const

const PI  = 3.14

2.2预定常量

预定常量除了true,false还有一个iota
const 出现时候iota为0,以后没出现一次+1

    const (
        v1 = iota*100; //0*100
        v2 = iota*100; //1*100
        v3 = iota*99  //2*99
    )

如果递增规则不变可以省略不写

    const (
        v1 = iota*100; //0*100
        v2   //1*100
        v3   //2*100
    )

2.3枚举

以上const声明方式即作为go语言中枚举使用

三.类型

3.1数组

func TestArr() {
    var arr [10]int;
    arr[1] = 1;
    arr[2] = 2;
    fmt.Println(arr)//[0 1 2 0 0 0 0 0 0 0]
}
func TestArr2() {
    var arr = [10]int{1, 2, 3, 4};
    arr[0] = 88;
    fmt.Println(arr)//[88 2 3 4 0 0 0 0 0 0]
}
func TestArr3() {
    var arr = []int{1, 2, 3, 4};
    arr[0] = 88;
    //arr[4] = 88;error:index out of range
    fmt.Println(arr)//[88 2 3 4]
}
//二维数组
func TestArr4() {
    var arr = [][]int{{1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
    fmt.Println(arr)
}

3.2数组切片

数组长度定义之后就无法更改,数组切片即是一个可变长度的数组
1.直接创建

    mySlice := make([]int, 5)    //创建一个初始个数5的切片[0 0 0 0 0]
    mySlice := make([]int, 5,10)    //创建一个初始个数5的切片,预留10个位置[0 0 0 0 0]
    mySlice := []int{}//初始化一个空切片
    mySlice := []int{1,2,3}

2.基于数组创建

    var arr = [4]int{1, 2, 3, 4};
    mySlice := arr[:]//[1 2 3 4]
    mySlice := arr[:3]//[1 2 3]
    mySlice := arr[3:]//[4]

3.2map

3.2.1初始化

    var mymap map[int]string = make(map[int]string);
    var mymap = make(map[int]string);

3.2.1删改查

    mymap := make(map[string]string);
    //赋值
    mymap["a0"] = "aaa";
    //删除
    delete(mymap, "a0");
    //查找
    value := mymap["a0"];
    value,error := mymap["a0"];

四.流程控制

4.1条件语句 if

注意:if语句条件没有括号!!

func test(a int) (bool) {
    if a < 5 {
        return true
    }
    return false
}

4.2选择语句switch

注意:
1.不需要写switch
2.只有添加fallthrough才会明确继续执行下一个case

func TestProcess4(num int) {
    switch num {
    case 1:
        fmt.Println("1111")
    case 0:
        fallthrough
    default:
        fmt.Println("xxx")
    }
}

4.3循环语句

1.普通循环

    for i := 0; i < 100; i++ {
        sum += i;
    }

2.无限循环

    for {
        sum ++;
        if (sum > 1000) {
            break
        }
    }

3.for-range循环

    for key, value := range collection {
        fmt.Println(key,value)
    }

五.函数

5.1.多返回值函数

//正常形式
func fu1() (int, string) {
    return 1, "结果";
}
//有名称的返回值
func fu2() (result1 int, result2 string) {
    result1 = 1
    result2 = "结果"
    return result1, result2;
}

//自动返回有名称结果
func fu3()(result1 int, result2 string){
    result1 = 1
    result2 = "结果"
    return ;
}

5.2不定参数

func fu4(arg ... int){
}
//任意类型的不定参数
func fu4(arg ... interface{}){
}

5.3匿名函数

//匿名函数
func fu6(){
    add := func(x,y int) int{
        return x+y;
    }
    fmt.Println(add(1,2))//3
}

六.其他

6.1defer

特点

1.defer是在return之前执行的
2.defer先进后出

用处

清理数据,释放锁

举例

func main() {
    defer test1();
    defer test2();
    test3();
}
func test1()  {
    fmt.Println("执行test1")
}
func test2()  {
    fmt.Println("执行test2")
}
func test3()  {
    fmt.Println("执行test3")
}

结果
执行test3
执行test2
执行test1

猜你喜欢

转载自blog.csdn.net/jin870132/article/details/81912684