1.3 语法基础
变量与常量声明
go
package main
import "fmt"
// 包级变量
var globalVar int = 10
var globalVar2 = 20 // 类型推断
var name, age = "go", 18 // 多变量声明
// 常量
const Pi = 3.14159
const (
StatusOK = 200
StatusNotFound = 404
StatusServerError = 500
)
// iota 枚举
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
// iota 表达式
const (
_ = iota // 0 (跳过)
KB = 1 << (10*iota) // 1 << 10 = 1024
MB // 1 << 20 = 1048576
GB // 1 << 30
)
func main() {
// 短变量声明 (最常用)
x := 42
name := "Go"
active := true
// 多变量声明
var a, b int = 1, 2
c, d := 3, 4
// 交换值
a, b = b, a
// 空白标识符 (忽略返回值)
_, val := getValue()
fmt.Println(x, name, active, a, b, c, d, val)
}
func getValue() (string, int) {
return "result", 100
}基本数据类型
go
package main
import (
"fmt"
"math"
"unicode/utf8"
)
func main() {
// 整数类型
var i8 int8 = 127
var i16 int16 = 32767
var i32 int32 = 2147483647
var i64 int64 = math.MaxInt64
var i int = 100
var u8 uint8 = 255
var u32 uint32 = 4294967295
var u64 uint64 = 18446744073709551615
// 浮点类型
var f32 float32 = 3.14
var f64 float64 = 3.141592653589793
// 布尔类型
var isTrue bool = true
var isFalse bool = false
// 字符串类型
var str string = "Hello, Go!"
fmt.Println(len(str)) // 12
fmt.Println(utf8.RuneCountInString("你好 Go")) // 4
// 类型别名
type (
Integer int
Text string
)
var num Integer = 42
fmt.Println(num)
}运算符
go
package main
import "fmt"
func main() {
// 算术运算符
a, b := 17, 5
fmt.Println(a + b) // 22
fmt.Println(a % b) // 2
// 自增自减
a++
b--
// 关系运算符
x, y := 10, 20
fmt.Println(x == y) // false
fmt.Println(x < y) // true
// 逻辑运算符
p, q := true, false
fmt.Println(p && q) // false
fmt.Println(p || q) // true
fmt.Println(!p) // false
// 位运算符
m, n := 12, 5
fmt.Println(m & n) // 4
fmt.Println(m | n) // 13
fmt.Println(m ^ n) // 9
fmt.Println(m << 2) // 48
// 类型转换
var f float64 = 3.9
i := int(f) // 3
fmt.Println(i)
}格式化输入输出
go
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// Print 系列
fmt.Print("Hello\n")
fmt.Println("World")
fmt.Printf("Name: %s, Age: %d\n", "Go", 13)
// 常用动词:%v, %d, %f, %s, %t, %p, %T
// Scan 输入
var input string
fmt.Print("Enter name: ")
fmt.Scan(&input)
// 读取整行
reader := bufio.NewReader(os.Stdin)
line, _ := reader.ReadString('\n')
line = strings.TrimSpace(line)
fmt.Println("Hello,", line)
}注释规范
go
// 单行注释
// 包注释
package main
// 函数注释
// FormatUser 格式化用户信息
// 参数:name - 姓名,age - 年龄
// 返回:格式化后的字符串
func FormatUser(name string, age int) string {
return fmt.Sprintf("%s (%d)", name, age)
}
// 结构体注释
// Config 配置结构
type Config struct {
// Name 应用名称
Name string
// Port 服务端口
Port int
}
// 待办标记
// TODO: 优化性能
// FIXME: 修复 bug
// NOTE: 重要说明