这段笔记详细讲解了Go语言中的基本程序结构、变量和常量的声明与用法、循环控制结构(包括for循环的不同形式)、条件判断结构(if-else)以及选择控制语句(switch),提供了核心知识点、基本语法和典型应用场景的解释,请根据目录快速检索和入门。
走进 Go 语言基础语法
01-hello
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
核心知识点:
这段代码展示了Go语言的基本程序结构。Go语言的程序通常从 main 包中的 main 函数开始执行,fmt 是一个标准库包,用于格式化输入和输出。
基本语法:
package main: 表示当前文件所属的包为main。Go程序的入口必须是main包。import "fmt": 引入fmt包用于输入输出操作。func main(): 定义程序的入口函数main,无参数也无返回值。fmt.Println("hello world"): 使用fmt包中的Println函数向标准输出打印并换行。
应用场景:
这种简单的打印“Hello, World!”程序是常见的编程语言入门示例。它用于验证开发环境的设置是否正确,同时可以理解程序的基本结构与标准输出方法。
02-var
package main
import (
"fmt"
"math"
)
func main() {
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
fmt.Println(g) // initialapple
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}
核心知识点:
这段代码展示了Go语言中的变量和常量声明方法。Go支持显式的类型定义以及通过自动推断类型的变量声明方式。var 关键字用于声明变量,const 关键字用于声明常量。Go也支持短变量声明 := 来简化变量赋值操作。
基本语法:
var a = "initial": 使用var关键字定义变量a,并由赋值的表达式自动推断类型为string。var b, c int = 1, 2: 定义多个变量并显式指定它们的类型为int。var d = true: 定义布尔变量。var e float64: 声明一个浮点型变量e,默认值为0。f := float32(e): 使用短声明语法:=进行变量声明和初始化,类型由float32(e)确定。g := a + "foo": 字符串连接。const s string = "constant": 使用const关键字声明一个常量,值不可变。const h = 500000000: 常量支持没有显式类型。const i = 3e20 / h: 常量可以参与常量级的表达式运算,编译时计算结果。
应用场景:
var用于声明需要被修改或在不同作用域中访问的变量,适合管理程序状态。- 常量
const通常用于定义不可变值,如配置参数、常用常量(如π)等。 - 通过
:=进行简洁的变量声明和初始化在临时变量和简化代码时非常有用。
03-for
package main
import "fmt"
func main() {
i := 1
for {
fmt.Println("loop")
fmt.Println(i)
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
for i <= 3 {
fmt.Println(i)
i = i + 1
}
}
核心知识点:
这段代码展示了Go语言中的 for 循环的多种用法。Go语言中只有一种循环结构——for,但它可以像 while、do-while、for-each 等方式灵活使用。for 循环支持多种控制结构,包括无限循环、带条件的循环和带初始语句的循环。
基本语法:
for { ... }: 表示无限循环。循环体内通常会包含break语句来终止循环,或者其他逻辑条件控制跳出。for j := 7; j < 9; j++ { ... }: 带初始值、条件判断和后置递增的for循环,类似于其他语言中的for语句。if n%2 == 0 { continue }:continue跳过当前循环的剩余部分并开始下一次迭代。for i <= 3 { ... }: 在for循环中使用条件判断,这种形式可以替代传统的while循环。
应用场景:
- 无限循环(
for { ... })通常用于需要持续运行的程序,例如服务器或后台任务,但一般配合break和条件逻辑使用。 - 带初始值和递增的
for结构适用于明确次数的迭代操作,如数组遍历或计数循环。 - 使用条件判断的
for可灵活处理不同条件下的循环执行。 continue用于跳过当前循环的某些情况,适合过滤和条件判断。
04-if
package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
核心知识点:
这段代码展示了Go语言中 if-else 语句的用法。if 语句用于条件判断,可以和 else 和 else if 组合使用来控制代码的执行路径。此外,Go语言中的 if 语句支持在条件表达式前定义一个短声明变量,这种方式使得变量的作用域只存在于 if-else 代码块内。
基本语法:
if condition { ... }: 基本if语句结构,用于在条件为true时执行代码块。else { ... }: 可选的else子句,只有if条件为false时才执行。else if condition { ... }: 结合多个条件分支的中间检查条件。允许扩展条件判断的范围。if num := 9; num < 0 { ... } else if ... { ... }:if语句中包含短声明。这里的num变量仅在if-else语句的作用域内有效。
应用场景:
if-else语句用于条件逻辑判断,是控制程序流的核心结构之一。- 短声明的
if语法适用于需要临时变量的逻辑判断,可以避免在更大的作用域中引入不必要的变量。 - 多条件判断通常通过
else if处理,适用于多步骤检查和分支路径选择。
05-switch
package main
import (
"fmt"
"time"
)
func main() {
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
}
核心知识点:
这段代码展示了Go语言中的 switch 语句的用法。Go的 switch 是一种控制语句,用于简洁地选择代码执行路径。与许多其他语言不同,Go中的 switch 语句在匹配一个 case 后会自动终止,而无需显式使用 break 语句。它支持简单条件和无表达式的 switch 语法,非常灵活。
基本语法:
switch variable { case value: ... }: 基本的switch语句结构。它会比较variable和case语句中的值。case 4, 5:: 支持多个值匹配,可以在同一个case子句中匹配多个值。default:: 类似else子句,当没有匹配的case时执行default子句。switch { case condition: ... }: 无表达式switch,用于在case子句中编写条件表达式,非常适合区间和布尔判断。
应用场景:
switch语句用于替代多个if-else语句,可以更简洁地处理值匹配和条件判断。- 无表达式的
switch语法允许更灵活的条件控制,适用于复杂条件分支判断,如时间、布尔表达式或特定条件的检查。 - 支持多个值的
case匹配,适合处理多个可能值共享同一个逻辑块的情况。