gpt4 book ai didi

Golang学习笔记(三):控制流

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Golang学习笔记(三):控制流由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

控制结构分为: 条件+选择+循环 。

IF 。

1.说明 。

  。

复制代码 代码如下:

条件表达式没有括号 支持一个初始化表达式(可以是多变量初始化语句) 初始化语句中定义的都是只能在block级别中使用的局部变量,不能在block之外使用 左大括号必须和条件语句在同一行(必须与if/else在同一行) go没有三元运算符 。

  。

if判断语句条件不需要括号 在判断语句里卖弄允许声明一个变量,其作用域只在逻辑块内,其他地方不起作用 花括号一定存在,且必须与if/else在同一行 。

  。

2.语法 。

复制代码 代码如下:

//基本 if a > 0 {  //无括号      dosomething() } else if a == 0 { //必须用花括号      doothertings() } else {      donothing() } 。

  。

//单行模式 if a > 0 { a += 100 } else { a -= 100 } 。

  。

3.示例 。

复制代码 代码如下:

package main 。

  。

func main(){     a := 10 。

    if a > 0 {         a += 100     } else if a == 0 {         a = 0     } else {         a -= 100     }     println(a) 。

    b := 101     if b > 0 { b += 100 } else { b -= 100 }     println(b) } 。

//支持一个初始化语句 if a:=1; a<10 { //允许在条件之前执行一个简单语句,由此语句定义的变量作用域仅在if/else范围内     return a } if a, b := 1,2; a+b == 10 { } 。

if x := computedValue(); x > 10 { } else { } 。

  。

4.结果 。

复制代码 代码如下:

110
201

  。

注意,在有返回值的函数中,不允许将“最终的”return语句放到if ... else ... 结构中,否则编译失败 。

复制代码 代码如下:

func example(x int) int {
    if x == 0 {
        return 5
    } else {
        return x
    }
}

  。

FOR 。

for是go的"while", 只支持for关键字.有三种形式 。

1.语法 。

复制代码 代码如下:

for init; condition; post {     //init不支持逗号,只能平行赋值     //condition每次循环开始都会检查,不建议在里面使用函数,建议用计算好的变量/常量代替     //post后面必须跟花括号,每轮循环结束的时候调用 } 。

  。

for i:=0; i<10; i++ { } 。

----------------------------- 。

for condition {     dosomething() } 。

i:=1 for i<10 { } 。

----------------------------- 。

for { //无限循环     dosomething() } 。

for {     a++     if a > 10 {         break     } } 。

----------------------------- 。

  。

2.说明 。

复制代码 代码如下:

a. 初始化和步进表达式可以使多个值:必须使用平行赋值
    i, j:=0,len(a)-1; i<j; i,j=i+1,j-1
b.每次循环都会重新检查条件表达式

  。

3.示例 。

复制代码 代码如下:

package main 。

  。

func main(){     ss := "abcd"     for i:=0; i<len(ss); i++ {         println(ss[i])     } } 。

得到:

复制代码 代码如下:

97
98
99
100

  。

4.配合range 。

for循环和保留字range一起使用,完成迭代器iterator操作 。

string, array, slice, map, channel都可以用range进行迭代器操作 。

range返回序号和值,若是不想要,可以用_ 。

复制代码 代码如下:

  for i, c := range "abc" {
      fmt.Printf("s[%d] = %c\n", i, c)
  }

得到 。

复制代码 代码如下:

  s[0] = a
  s[1] = b
  s[2] = c

  。

SWITCH 。

python里面没有 。

1.语法 。

支持初始化表达式 。

复制代码 代码如下:

switch a:=5; a { //默认break,匹配成功后不会自动向下执行其他case,而是跳出整个switch     case 0:         //普通         println(a)     case 1, 2:      //多个分支,逗号分隔         println(a)     case 100:       //什么都不做     case 5:         println(a)         fallthrough   //进入后面的case 进行处理,而不是跳出block     default:         println(a)    //默认 } 注意,不需要break来明确退出一个case,一旦条件符合,自动终止,除非使用fallthough 。

  。

-------------- 。

可以不带表达式 switch sExpr {         case expr1: //sExpr和expr1必须类型一致,不限制为常量或者证书,可以用任何类型或表达式             ... } 。

switch {     case 0 <= Num && Num <= 3:         fmt.Printf("3") } 。

  。

几种形式

复制代码 代码如下:

a := 1 switch a {     case 0:         ... } 。

  。

a := 1 switch {     case a>=0:         ....     case a>1:         .... } 。

switch a:=1; {     case a>=0:         ...     case a>1:         ... } 。

2.替代if...else if…else… 。

  。

不指定switch 条件表达式(没有条件表达式,在case语句中有),或者直接为true 。

复制代码 代码如下:

  a := 5
  switch {     //两句可合并位 switch a:=5; {
      case a > 1:
          println("a")
      case a > 2:
          println("b")
      default:
          println("c")
  }
 

  。

goto break continue 。

均可配合标签使用(标签区分大小写,若声明了没有使用会导致编译错误) 。

break/continue可配合标签用于多重循环跳出 goto是调整执行位置,与其他两个执行结果并不相同 。

1.goto 。

支持函数内部goto跳转 。

请善用 。

必须跳转到当前函数内定义的标签,标签名大小写敏感 。

复制代码 代码如下:

func myFunc() {
    i := 0
Here:
    println(i)
    i++
    goto Here
}

2.continue 。

  。

进入下一次循环 。

3.break 。

终止循环 。

复制代码 代码如下:

for index := 10; index > 0; index -- {
    if index == 5 {
        break //continue
    }
}

示例 。

复制代码 代码如下:

package main func main(){     a := 1     LABEL1:         println("inc a=", a)         a += 1 。

  。

    LABEL2:         //println("here") 。

    for ; a < 6; {         println(a)         if a == 3 {             a += 1             continue LABEL2         }         if a == 5 {             break         }         goto LABEL1     } } 。

  。

结果

复制代码 代码如下:

inc a= 1
2
inc a= 2
3
4
inc a= 4
5

最后此篇关于Golang学习笔记(三):控制流的文章就讲到这里了,如果你想了解更多关于Golang学习笔记(三):控制流的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com