1.3 控制语句、函数、指针 - hairyOwl/golangLearn GitHub Wiki

一 控制语句

1.1 条件语句、选择语句

1.1.1条件语句 if if...else if,else if

graph LR
    A(开始) --> C{条件a}
    C -->|true| D[代码块]
    D -->E
    C -->|false| E[结束]
    
    F[if if...else]
graph LR
    A(开始) --> C{条件a}
    C -->|true| D[if code]
    C -->|false| E[else code]
    D --> G(结束)
    E -->G
    F[if,else if]

1.1.2 选择语句 switch select

  • switch时从上到下执行的,每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止
  • switch语句还可以被用于type-switch来判断某个interface变量中实际存储的变量类型
graph LR
    A(开始) --> C{条件a}
    C -->|case 1| D[代码块1]
    C -->|case 2| E[代码块2]
    C -->|case 3| F[代码块3]
    C -->|default| G[代码块n]
    D --> H(结束)
    E --> H
    F  --> H
    G --> H
    Z[switch]

1.2循环语句、goto break continue

1.2.1 循环语句 for

graph LR
    A(开始) --> C{条件a}
    C -->|true| D[代码块]
    D -->C
    C -->|false| E[结束]
    
    F[循环基础流程]
graph LR
    A(开始) --> B[init]
    B --> C{条件a}
    C -->|true| D[代码块]
    D -->E[自增]
    E -->C
    C -->|false| H[结束]
    
    Z[for循环基础流程]

1.2.2 goto break continue

goto

graph 
    A(开始) --> B[code1]
    B -->|goto code3| D
    B -->C[code2]
    C -->D[code3]
    D --> G[结束]
    
    Z[goto]

break 跳出本次循环

graph 
    A(开始) --> B[code]
    B --> C{条件a}
    C -->|true| B[代码块]
    B -->  |break| E[结束]
    C --> |false| E
    
    F[break]

continue 跳出一次循环

graph 
    A(开始) --> B[code]
    B --> C{条件a}
    C -->|true| B[代码块]
    B -->  |continue| C
    C --> |false| E[结束]
    
    F[continue]

二 函数

  • 返回值类型写在最后面
  • 可返回多个值
    • 一般不致命多个值的名称,即使指定对调用者来说只是参考不强制
    • 多返回值常用于返回函数报错
  • 函数作为参数
    • 参数函数可以是已有函数
    • 参数函数可以是匿名函数
  • 只有可变参数列表 没有默认参数,可选参数

三 指针

Go语言指针不能运算 ,Go语言参数转递是值传递,但函数中通过指针的转递相当于引用转递,自定义类型要注意是作为值使用还是作为指针使用

  • 值传递 c c++

  • 引用传递 c++ java python

下面是c++的示例代码

//值传递 拷贝传进来的参数 a相当于n
void pass_by_val(int a){ 
    a++;
}

//引用传递 参数是变量地址 直接修改参数
void pass_by_ref(int& a){ 
    a++;
}

int main(){
    int a = 3;
    pass_by_val(a);
    printf("pass_by_val %d \n",a)  //3

    pass_by_ref(a);
    printf("pass_by_ref %d \n",a) //4
}

BUG 🐞

链接🔗