100天精通Golang(基础入门篇)——第8天:Go语言程序的流程结构和条件语句

简介: 100天精通Golang(基础入门篇)——第8天:Go语言程序的流程结构和条件语句

🌷 博主 libin9iOak带您 Go to Golang Language.✨

🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐥

100天精通Golang(基础入门篇)——第8天:程序的流程结构和条件语句

摘要:

本文是《100天精通Golang(基础入门篇)》系列的第8天,介绍了Golang中程序的流程结构和条件语句。通过学习程序的流程结构,包括顺序结构、分支结构和循环结构,以及条件语句如if语句和switch语句,读者可以进一步掌握Golang的基础知识和语法。

引言:

作为一门强大的编程语言,Golang提供了丰富的流程控制和条件判断的语法。在今天的学习中,我们将深入探讨程序的流程结构和条件语句,为编写更加灵活和可控的代码打下坚实的基础。

在程序的流程结构中,我们将学习顺序结构以及如何使用不同的控制结构来控制程序的执行流程。此外,我们还将重点介绍条件语句,包括if语句和switch语句,以及它们的变体。通过这些知识,您将能够根据不同的条件执行不同的代码块,使程序具备更强的逻辑和灵活性。

一、程序的流程结构

程序的流程结构是指程序的执行流程和代码的执行顺序。在Golang中,我们可以使用不同的控制结构来控制程序的流程,包括顺序结构、分支结构和循环结构。顺序结构是指代码按照从上到下的顺序执行,是最基本的程序流程结构。

程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。

顺序结构:从上向下,逐行执行。

选择结构:条件满足,某些代码才会执行。0-1次

分支语句:if,switch,select

循环结构:条件满足,某些代码会被反复的执行多次。0-N次

循环语句:for

二、条件语句

条件语句用于根据不同的条件执行不同的代码块。在Golang中,常用的条件语句包括if语句和switch语句。

2.1 if 语句

if语句是最基本的条件语句,用于根据条件是否满足来执行相应的代码块。在if语句中,如果条件为true,则执行if后面的代码块;如果条件为false,则跳过if语句继续执行下面的代码。

语法格式:

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
}
if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
  /* 在布尔表达式为 false 时执行 */
}
if 布尔表达式1 {
   /* 在布尔表达式1为 true 时执行 */
} else if 布尔表达式2{
   /* 在布尔表达式1为 false ,布尔表达式2为true时执行 */
} else{
   /* 在上面两个布尔表达式都为false时,执行*/
}

示例代码:

package main
import "fmt"
func main() {
   /* 定义局部变量 */
   var a int = 10
   /* 使用 if 语句判断布尔表达式 */
   if a < 20 {
       /* 如果条件为 true 则执行以下语句 */
       fmt.Printf("a 小于 20\n" )
   }
   fmt.Printf("a 的值为 : %d\n", a)
}

2.2 if 变体

除了基本的if语句,Golang还提供了一些if语句的变体,包括if-else语句和if-else if语句。通过这些变体,我们可以根据多个条件来执行不同的代码块。

如果其中包含一个可选的语句组件(在评估条件之前执行),则还有一个变体。它的语法是

if statement; condition {  
}
if condition{
}

示例代码:

package main
import (  
    "fmt"
)
func main() {  
    if num := 10; num % 2 == 0 { //checks if number is even
        fmt.Println(num,"is even") 
    }  else {
        fmt.Println(num,"is odd")
    }
}

需要注意的是,num的定义在if里,那么只能够在该if…else语句块中使用,否则编译器会报错的。

2.3 switch语句:“开关”

switch语句是一种根据表达式的值来选择执行哪个代码块的条件语句。它可以替代一系列if-else if语句,使代码更加简洁和可读。在switch语句中,我们使用case关键字来定义不同的情况,并在每个case后面跟随相应的代码块。

switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。

switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。

而如果switch没有表达式,它会匹配true

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

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

您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

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

示例代码:

package main
import "fmt"
func main() {
   /* 定义局部变量 */
   var grade string = "B"
   var marks int = 90
   switch marks {
      case 90: grade = "A"
      case 80: grade = "B"
      case 50,60,70 : grade = "C"  //case 后可以由多个数值
      default: grade = "D"  
   }
   switch {
      case grade == "A" :
         fmt.Printf("优秀!\n" )     
      case grade == "B", grade == "C" :
         fmt.Printf("良好\n" )      
      case grade == "D" :
         fmt.Printf("及格\n" )      
      case grade == "F":
         fmt.Printf("不及格\n" )
      default:
         fmt.Printf("差\n" );
   }
   fmt.Printf("你的等级是 %s\n", grade );      
}

2.4 fallthrough

fallthrough是一个可选的关键字,用于在switch语句中执行下一个case的代码块,而不论下一个case的条件是否满足。

如需贯通后续的case,就添加fallthrough

package main
import (
  "fmt"
)
type data [2]int
func main() {
  switch x := 5; x {
  default:
    fmt.Println(x)
  case 5:
    x += 10
    fmt.Println(x)
    fallthrough
  case 6:
    x += 20
    fmt.Println(x)
  }
}

运行结果:

15
35

case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。

示例代码:

package main
import (  
    "fmt"
)
func main() {  
    num := 75
    switch { // expression is omitted
    case num >= 0 && num <= 50:
        fmt.Println("num is greater than 0 and less than 50")
    case num >= 51 && num <= 100:
        fmt.Println("num is greater than 51 and less than 100")
    case num >= 101:
        fmt.Println("num is greater than 100")
    }
}

switch的注意事项

  1. case后的常量值不能重复
  2. case后可以有多个常量值
  3. fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。

2.5 Type Switch

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

switch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    /* 你可以定义任意个数的case */
    default: /* 可选 */
       statement(s);
}
package main
import "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>

今日学习总结:

在今天的学习中,我们深入了解了Golang中的程序流程结构和条件语句。我们学习了顺序结构、分支结构和循环结构,以及如何使用它们控制程序的执行流程。特别地,我们探讨了条件语句,包括if语句和switch语句,以及它们的变体。

通过if语句,我们可以根据条件的真假执行相应的代码块。而switch语句则提供了一种更简洁和可读性更好的方式来处理多个条件情况。我们还学习了fallthrough关键字,它可以在switch语句中执行下一个case的代码块。

通过今天的学习,我们对Golang的流程控制和条件判断有了更深入的理解。这些基础知识将为我们编写更复杂和灵活的程序奠定坚实的基础。在接下来的学习中,我们将进一步探索Golang的高级特性和应用场景。

结语

通过今天的学习,您已经踏上了Golang的学习之旅。在未来的日子里,您将探索Golang的各个方面,从基础概念到高级技巧,从实际应用到性能优化。

学习一门编程语言是一个持续的过程,每一天都是您向Golang的精通迈进的重要一步。我鼓励您坚持每天学习,保持热情和好奇心,解决挑战并享受成功的喜悦。

在您的学习旅程中,不要忘记参与社区和与其他Golang开发者交流。分享您的见解和经验,向他人学习,并在开源项目或实际应用中展示您的技能。

如果您在学习过程中遇到困难或有任何问题,不要犹豫向社区和专家寻求帮助。持续学习,勇敢探索,您将在Golang领域取得令人瞩目的成就。

最后,感谢您的阅读和支持!祝愿您在未来的每一天中都能够成为一名精通Golang的开发者!

期待听到您在学习过程中的进展和成就。如果您需要进一步的帮助,请随时告诉我。祝您在学习Golang的旅程中取得巨大成功!

如果您在学习过程中有任何疑惑,请点击下方名片,带您一对一快速入门 Go语言 的世界 ~

目录
相关文章
|
10天前
|
存储 安全 测试技术
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
25 3
|
10天前
|
存储 监控 Go
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
23 3
|
10天前
|
设计模式 安全 Go
【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
12 2
|
10天前
|
存储 安全 Go
【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
15 2
|
13天前
|
Go
The “gopls“ command is not available. Run “go get -v golang.org/x/tools/gopls“ to install.【已解决】
The “gopls“ command is not available. Run “go get -v golang.org/x/tools/gopls“ to install.【已解决】
11 3
|
13天前
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
12 1
|
22天前
|
Unix Shell 编译器
Go 中空结构有什么用法
在 Go 语言中,空结构体 struct{} 是一个非常特殊的类型,它不包含任何字段并且不占用任何内存空间。虽然听起来似乎没什么用,但空结构体在 Go 编程中实际上有着广泛的应用。本文将详细探讨空结构体的几种典型用法,并解释为何它们在特定场景下非常有用。
|
30天前
|
Java 测试技术 Go
使用go的内置运行时库调试和优化程序
【5月更文挑战第18天】在本文中,作者探讨了如何为运行时程序添加剖析支持以优化性能。他们面临的问题是一个程序需要找出平方根为整数且逆序平方等于其逆序的数字。他们首先展示了原始代码,然后使用`runtime`库进行优化,将计算和调用功能分离,同时记录CPU和内存使用情况。
37 4
|
5天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
2天前
|
Go
go语言map、实现set
go语言map、实现set
9 0