go语言学习--3.常用语句

目录

1.条件语句

1.1 if语句

1.2 if-else语句

1.3 switch语句

1.4 select语句

2.循环语句

2.1循环处理语句

2.2循环控制语句

 3.go语言关键字


1.条件语句

和c语言类似,相关的条件语句如下表所示:

1.1 if语句

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
}

1.2 if-else语句

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
	/* 在布尔表达式为 false 时执行 */
}

1.3 switch语句

其中的变量v可以是任何类型,val1val2可以是同类型的任意值,类型不局限为常量或者整数,或者最终结果为相同类型的表达式。

switch v {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

1.4 select语句

select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。它将会随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s);
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}

注意:

  • 每个case必须都是一个通信
  • 所有channel表达式都会被求值,所有被发送的表达式都会被求值
  • 如果任意某一个通信都可以,它就执行,其他就忽略
  • 如果有多个case都可以运行,select就会随机挑选一个来执行。
  • 如果没有一个case可以被运行:如果有default子句,就执行default子句,select将被阻塞,直到某个通信可以运行,从而避免饥饿问题。
package main

import (
    "fmt"
    "time"
)

func main() {
    ch1 := make(chan string)
    ch2 := make(chan string)

    go func() {
        time.Sleep(2 * time.Second)
        ch1 <- "one"
    }()

    go func() {
        time.Sleep(3 * time.Second)
        ch2 <- "two"
    }()

    select {
    case msg1 := <-ch1:
        fmt.Println("Received", msg1)
    case msg2 := <-ch2:
        fmt.Println("Received", msg2)
    }
}

 

在这个示例中,select 语句会等待 ch1ch2 中的任意一个 channel 接收到数据。由于 ch1ch2 前被写入,所以 "Received one" 会被打印出来。

select 语句非常适合用于多路复用 channel,例如在并发编程中处理多个 channel 的情况下。通过 select 语句,可以实现并发代码中的异步通信和超时处理,以及其他复杂的并发模式。

2.循环语句

2.1循环处理语句

go中时使用for实现循环的,共有三种形式:

语法
和c语言中的for相同 for init; condition; post {}
和c语言中的while相同 for condition{}
和c语言中的for(;;)相同 for{}

除此以外,for循环还可以直接使用range对slice、map、数组以及字符串等进行迭代循环,格式如下:

for key, value := range oldmap {
	newmap[key] = value
}

2.2循环控制语句

控制语句 详解
break 中断跳出循环或者switch语句
continue 跳过当前循环的剩余语句,然后继续下一轮循环
goto语句 将控制转移到被标记的语句
  • break

break主要用于循环语句跳出循环,和c语言中的使用方式是相同的。且在多重循环的时候还可以使用label标出想要break的循环。

a := 0
for a<5 {
	fmt.Printf("%d\n", a)
	a++
	if a==2 {
		break;
	}
}
/* output
0
1
2
*/
  •  continue

Go 语言的 continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。在多重循环中,可以用标号 label 标出想 continue 的循环。

 

    // 不使用标记
    fmt.Println("---- continue ---- ")
    for i := 1; i <= 3; i++ {
        fmt.Printf("i: %d\n", i)
            for i2 := 11; i2 <= 13; i2++ {
                fmt.Printf("i2: %d\n", i2)
                continue
            }
    }

/* output
i: 1
i2: 11
i2: 12
i2: 13
i: 2
i2: 11
i2: 12
i2: 13
i: 3
i2: 11
i2: 12
i2: 13
*/

    // 使用标记
    fmt.Println("---- continue label ----")
    re:
        for i := 1; i <= 3; i++ {
            fmt.Printf("i: %d", i)
                for i2 := 11; i2 <= 13; i2++ {
                    fmt.Printf("i2: %d\n", i2)
                    continue re
                }
        }

/* output
i: 1
i2: 11
i: 2
i2: 11
i: 3
i2: 11
*/
  • goto

goto语句主要是无条件转移到过程中指定的行。goto语句通常和条件语句配合使用,可用来实现条件转移、构成循环以及跳出循环体等功能。但是并不主张使用goto语句,以免造成程序流程混乱。

var a int = 0
LOOP: for a<5 {
	if a == 2 {
		a = a+1
		goto LOOP
	}
	fmt.Printf("%d\n", a)
	a++
}

/*
output:
0
1
2
3
4
*/

 3.go语言关键字

直接列表供大家了解go中的关键字如下:

相关推荐

  1. go语言-字符串处理函数

    2024-04-09 18:54:02       25 阅读
  2. go语言基础 -- 字符串及其函数

    2024-04-09 18:54:02       33 阅读
  3. Go语言变量类型的创建

    2024-04-09 18:54:02       31 阅读
  4. go语言-字符串处理的函数

    2024-04-09 18:54:02       27 阅读
  5. MySQL语句

    2024-04-09 18:54:02       40 阅读
  6. MySQL语句

    2024-04-09 18:54:02       49 阅读
  7. SQL语句

    2024-04-09 18:54:02       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 18:54:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 18:54:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 18:54:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 18:54:02       18 阅读

热门阅读

  1. 力扣经典150题第九题:跳跃游戏

    2024-04-09 18:54:02       17 阅读
  2. K8S Deployment HA

    2024-04-09 18:54:02       12 阅读
  3. 查找同一个进程显示在任务栏上的多个窗口

    2024-04-09 18:54:02       14 阅读
  4. Qt 翻译工具:使用 tr() 函数实现多语言支持

    2024-04-09 18:54:02       20 阅读
  5. Vue中Suspense组件详细介绍

    2024-04-09 18:54:02       12 阅读
  6. 特权账号怎么管?企业真的很为难!

    2024-04-09 18:54:02       13 阅读
  7. NIO与BIO

    2024-04-09 18:54:02       10 阅读
  8. 蓝桥杯 算法训练 藏匿的刺客

    2024-04-09 18:54:02       11 阅读
  9. MySQL 常见和不常见的所有查询语句

    2024-04-09 18:54:02       16 阅读