欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Go语言流程控制

Go语言流程控制

2025/5/1 16:45:00 来源:https://blog.csdn.net/Gherbirthday0916/article/details/142468138  浏览:    关键词:Go语言流程控制

Go语言流程控制

  • 1.IF-ELSE
  • 2.Switch-Case
    • switch 语句
    • Type Switch
  • 3.select 语句
  • 4.循环语句

1.IF-ELSE

Go 编程语言中 if 语句的语法如下:

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

例如:

package mainimport "fmt"func main() {var a int = 521if a == 521 {fmt.Println("我爱你")} else {fmt.Println("我不爱你")}
}

2.Switch-Case

switch 语句

Go 编程语言中 switch 语句的语法如下:

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

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。

例如:

package mainimport "fmt"func main() {var marks int = 90switch marks {case 90:fmt.Println("优秀")case 80:fmt.Println("良好")case 60:fmt.Println("及格")}
}

Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

Type Switch 语法格式如下:

switch x.(type){case type:statement(s);      case type:statement(s); /* 你可以定义任意个数的case */default: /* 可选 */statement(s);
}

例如:

package mainimport "fmt"func main() {var x interface{}switch i := x.(type) {case nil:  fmt.Printf(" x 的类型 :%T",i)                case int:  fmt.Printf("x 是 int 型")                      case float64:fmt.Printf("x 是 float64 型")          case func(int) float64:fmt.Printf("x 是 func(int) 型")                      case bool, string:fmt.Printf("x 是 bool 或 string 型" )      default:fmt.Printf("未知型")    }  
}

以上代码执行结果为:

x 的类型 :<nil>

3.select 语句

在 Go 语言中,select 语句用于处理多个通道(channel)的通信操作。它的功能类似于 switch 语句,但它专门用于处理异步的通道操作。select 会阻塞,直到其中的某个通道可以进行发送或接收操作。通过 select 语句,Go 可以方便地处理并发任务的多路复用

select 语句会监听所有指定的通道上的操作,一旦其中一个通道准备好就会执行相应的代码块。

如果多个通道都准备好,那么 select 语句会随机选择一个通道执行。如果所有通道都没有准备好,那么执行 default 块中的代码。

在下面这个示例中,chan1 在 1 秒后发送数据,chan2 在 2 秒后发送数据。select 会阻塞,直到某个通道有数据可接收:

package mainimport ("fmt""time"
)func main() {chan1 := make(chan string)chan2 := make(chan string)go func() {time.Sleep(1 * time.Second)chan1 <- "chan1 done"}()go func() {time.Sleep(2 * time.Second)chan2 <- "chan2 done"}()for i := 0; i < 2; i++ {select {case msg1 := <-chan1:fmt.Println(msg1)case msg2 := <-chan2:fmt.Println(msg2)}}
}

用select实现超时判断机制,在下面的场景中,使用全局resChan来接受response,如果时间超过3S,resChan中还没有数据返回,则第二条case将执行输出报错信息:

var resChan = make(chan int)
// do request
func test() {select {case data := <-resChan:doData(data)case <-time.After(time.Second * 3):fmt.Println("request time out")}
}func doData(data int) {//...
}

4.循环语句

for 循环是一个循环控制结构,可以执行指定次数的循环。

1、计算 1 到 10 的数字之和

package mainimport "fmt"func main() {sum := 0for i := 0; i <= 10; i++ {sum += i}fmt.Println(sum)  // 55
}

2、无限循环

package mainimport "fmt"func main() {sum := 0for {sum += 1}fmt.Println(sum)
}

要停止无限循环,可以在命令窗口按下ctrl-c

3、实例3:For-each range 循环

这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。

package mainimport ("fmt"
)func main() {strings := []string{"imustctf", "wode"}for i, s := range strings {fmt.Println(i, s)// 0 imustctf// 1 wode}
}

4、类似的while循环,在 sum 小于 10 的时候计算 sum 自相加后的值

package mainimport "fmt"func main() {sum := 1for sum <= 10 {sum += sum}fmt.Println(sum)  // 16
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词