Go语言的if语句不需要括号,但必须有花括号。
package main
import "fmt"
func main() {
age := 18
if age >= 18 {
fmt.Println("你已成年")
}
// if-else
score := 85
if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
}
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
Go语言支持在if语句中进行初始化,变量作用域仅限于if块内。
// 在if中初始化变量
if num := 10; num > 0 {
fmt.Println("正数:", num)
} else if num < 0 {
fmt.Println("负数:", num)
} else {
fmt.Println("零")
}
// num在这里不可访问
// 实际应用:错误处理
if err := doSomething(); err != nil {
fmt.Println("错误:", err)
return
}
Go的switch语句更加灵活,不需要break,自动终止。
package main
import "fmt"
func main() {
day := 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
case 6, 7: // 多个条件
fmt.Println("周末")
default:
fmt.Println("无效的日期")
}
}
switch score := 85; {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
// 相当于if-else链
hour := 14
switch {
case hour < 12:
fmt.Println("上午")
case hour < 18:
fmt.Println("下午")
default:
fmt.Println("晚上")
}
// fallthrough会继续执行下一个case
num := 2
switch num {
case 1:
fmt.Println("一")
fallthrough
case 2:
fmt.Println("二")
fallthrough
case 3:
fmt.Println("三")
}
// 输出: 二 三
func checkType(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("整数: %d\n", v)
case string:
fmt.Printf("字符串: %s\n", v)
case bool:
fmt.Printf("布尔: %t\n", v)
default:
fmt.Printf("未知类型: %T\n", v)
}
}
func main() {
checkType(42)
checkType("Hello")
checkType(true)
checkType(3.14)
}
Go语言只有for循环,没有while和do-while。
// 基本for循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// 多变量
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Printf("i=%d, j=%d\n", i, j)
}
// 省略初始化和后置语句
count := 0
for count < 5 {
fmt.Println(count)
count++
}
// 无限循环
for {
fmt.Println("无限循环")
break // 需要break退出
}
// 实际应用:服务器循环
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go handleConnection(conn)
}
// 遍历数组/切片
nums := []int{1, 2, 3, 4, 5}
for index, value := range nums {
fmt.Printf("索引: %d, 值: %d\n", index, value)
}
// 只要索引
for i := range nums {
fmt.Println(i)
}
// 只要值(使用_忽略索引)
for _, v := range nums {
fmt.Println(v)
}
// 遍历字符串
str := "Hello"
for i, ch := range str {
fmt.Printf("%d: %c\n", i, ch)
}
// 遍历map
m := map[string]int{"a": 1, "b": 2, "c": 3}
for key, value := range m {
fmt.Printf("%s: %d\n", key, value)
}
// 跳出当前循环
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
// 跳出指定循环(标签)
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer // 跳出外层循环
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}
// 跳过偶数
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i) // 只打印奇数
}
// 使用标签
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if j == 1 {
continue outer // 继续外层循环
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}
Go支持goto,但应谨慎使用。
func main() {
i := 0
loop:
fmt.Println(i)
i++
if i < 5 {
goto loop
}
fmt.Println("结束")
}
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
target := rand.Intn(100) + 1
attempts := 0
fmt.Println("猜数字游戏(1-100)")
for {
attempts++
var guess int
fmt.Print("请输入你的猜测: ")
fmt.Scanln(&guess)
if guess < target {
fmt.Println("太小了!")
} else if guess > target {
fmt.Println("太大了!")
} else {
fmt.Printf("恭喜!你用了%d次猜中了!\n", attempts)
break
}
}
}
package main
import "fmt"
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d×%d=%d\t", j, i, i*j)
}
fmt.Println()
}
}
package main
import "fmt"
func isPrime(n int) bool {
if n <= 1 {
return false
}
if n == 2 {
return true
}
if n%2 == 0 {
return false
}
for i := 3; i*i <= n; i += 2 {
if n%i == 0 {
return false
}
}
return true
}
func main() {
fmt.Println("100以内的质数:")
count := 0
for i := 2; i <= 100; i++ {
if isPrime(i) {
fmt.Printf("%d ", i)
count++
if count%10 == 0 {
fmt.Println()
}
}
}
fmt.Printf("\n共有%d个质数\n", count)
}
package main
import "fmt"
func main() {
n := 10
a, b := 0, 1
fmt.Printf("前%d个斐波那契数:\n", n)
for i := 0; i < n; i++ {
fmt.Printf("%d ", a)
a, b = b, a+b
}
fmt.Println()
}
package main
import "fmt"
func main() {
scores := []int{95, 78, 85, 62, 45, 88, 92, 55, 73, 90}
var excellent, good, pass, fail int
for _, score := range scores {
switch {
case score >= 90:
excellent++
case score >= 80:
good++
case score >= 60:
pass++
default:
fail++
}
}
fmt.Println("成绩统计:")
fmt.Printf("优秀(>=90): %d人\n", excellent)
fmt.Printf("良好(80-89): %d人\n", good)
fmt.Printf("及格(60-79): %d人\n", pass)
fmt.Printf("不及格(<60): %d人\n", fail)
}
package main
import "fmt"
func main() {
for {
fmt.Println("\n=== 菜单系统 ===")
fmt.Println("1. 查看信息")
fmt.Println("2. 添加数据")
fmt.Println("3. 删除数据")
fmt.Println("4. 退出")
fmt.Print("请选择: ")
var choice int
fmt.Scanln(&choice)
switch choice {
case 1:
fmt.Println("查看信息...")
case 2:
fmt.Println("添加数据...")
case 3:
fmt.Println("删除数据...")
case 4:
fmt.Println("再见!")
return
default:
fmt.Println("无效选择,请重试")
}
}
}
package main
import "fmt"
func main() {
rows := 5
for i := 1; i <= rows; i++ {
for j := 0; j < rows-i; j++ {
fmt.Print(" ")
}
for k := 1; k <= 2*i-1; k++ {
fmt.Print(k)
}
fmt.Println()
}
}
package main
import "fmt"
func main() {
nums := []int{3, 7, 1, 9, 4, 6, 8, 2, 5}
target := 6
found := false
index := -1
for i, v := range nums {
if v == target {
found = true
index = i
break
}
}
if found {
fmt.Printf("找到了!%d在索引%d处\n", target, index)
} else {
fmt.Printf("未找到%d\n", target)
}
}