1450 字
7 分钟
260714GO基础语法
GO语言基础语法
一、标准输出
fmt.Println:打印后自动换行,多个参数之间用空格分隔fmt.Print:打印后不换行fmt.Printf:格式化输出,和 C 语言的printf类似,需手动加\n换行
常用格式化占位符
%d:整数%s:字符串%f:浮点数- 示例:
fmt.Printf("pi = %.2f\n", pi)保留2位小数
- 示例:
%c:打印字符%v:万能占位符,适配任意类型
fmt.Println(10, 20, "hello") // 自动换行,参数间空格分隔fmt.Print(10, 20, "hello") // 不换行,参数间空格分隔fmt.Printf("a = %d, b = %d\n", 10, 20) // 格式化模板输出二、读取输入
1. fmt.Scan
- 以空格/换行作为分隔符读取输入
- ✅ 变量前必须加
&传地址
var name stringvar age intfmt.Scan(&name, &age)fmt.Println("姓名:", name)fmt.Println("年龄:", age)- 返回值:
(n int, err error)n:成功读取的变量个数err:读取错误(正常为nil)_:空白标识符,用于丢弃不需要的返回值
循环读取直到 EOF
package mainimport "fmt"
func main() { var a, b int for { n, err := fmt.Scan(&a, &b) if n != 2 || err != nil { break } fmt.Println(a + b) }}2. 读取整行(含空格)bufio.Scanner
package mainimport ( "bufio" "fmt" "os")
func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Scan() // 读取一整行 line := scanner.Text() fmt.Println(line)}三、& 和 * 运算符
1. & 取地址运算符
&变量:获取变量内存地址,生成指针- 例:
var a int; p := &a,p类型为*int - 作用:传递原始变量地址,允许函数修改原变量(不是副本)
- 关键:
fmt.Scan需要指针参数才能正确写入值,不能直接传变量本身
- 例:
2. * 解引用运算符
-
*指针变量:访问/修改指针指向的原始变量var a intp := &a*p = 100 // 通过指针修改原变量 afmt.Println(a) // 输出 100- 类型声明写法:
var p *int表示int指针类型(和表达式解引用语法不同)
- 类型声明写法:
&x:取 x 的地址 → 生成指针*p:顺着指针地址访问原值
四、变量与数据类型
1. 基础类型
bool:布尔(true/false)string:UTF-8 字符串- 整数:
int/int8/int16/int32/int64/uint/uint8(byte)/uint16/uint32/uint64/uintptr rune:int32别名,用于 Unicode 字符- 浮点数:
float32/float64 - 复数:
complex64/complex128
2. 复合类型
- 数组
[N]T:固定长度,值类型 - 切片
[]T:动态数组,引用类型(需 make) - Map
map[KeyType]ValueType:哈希映射,引用类型(需 make) - Struct:结构体,自定义聚合类型
- Channel
chan T:通道,goroutine 通信(需 make) - Pointer
*T:指针类型 - Function:函数类型
- Interface:接口类型
3. 变量规则
- Go 强制要求:声明变量必须使用,否则编译报错
- 临时忽略值:用空白标识符
_
4. 常量 const
const MaxSize = 100const Pi = 3.14159- 常量定义后不可修改
5. 显式类型转换
Go 无隐式自动类型转换,必须显式转换
a := 42b := float64(a)fmt.Println(b)
c := 3.99d := int(c) // 截断小数,不是四舍五入 → 结果 3fmt.Println(d)
// 整数除法坑x, y := 1, 2fmt.Println(x / y) // int除法:0fmt.Println(float64(x) / float64(y))// 浮点数除法:0.5
var e int = 100var f int64 = int64(e)fmt.Println(f)
// 数值转字符串num := 42s := fmt.Sprintf("%d", num)fmt.Printf("%s (string)\n", s)五、运算符
1. 算术运算符
a, b := 17, 5fmt.Println(a + b) // 加法fmt.Println(a - b) // 减法fmt.Println(a * b) // 乘法fmt.Println(a / b) // 整数除法,截断小数fmt.Println(a % b) // 取余
// 自增/自减:只能独立语句,不能嵌入表达式c := 10c++fmt.Println(c)c--fmt.Println(c)
// 复合赋值c += 5c *= 22. 比较 & 逻辑运算符
a, b := 10, 20// 比较fmt.Println(a == b)fmt.Println(a != b)fmt.Println(a < b)
// 逻辑fmt.Println(a > 5 && b > 15) // && 并且fmt.Println(a > 100 || b > 15) // || 或者fmt.Println(!(a > 5)) // ! 取反- ❗ Go 没有三元运算符
?:,只能用 if-elsevar max intif a > b {max = a} else {max = b}
3. 位运算
a := 10 // 1010b := 12 // 1100
fmt.Println(a & b) // 按位与fmt.Println(a | b) // 按位或fmt.Println(a ^ b) // 按位异或fmt.Println(a << 1) // 左移(×2)fmt.Println(a >> 1) // 右移(÷2)
// 判断奇偶n := 7if n&1 == 1 { fmt.Printf("%d 是奇数\n", n)}六、控制流
1. if / else 条件判断
- 条件不用括号
(),左大括号{必须和 if 同行 - 支持前置局部变量声明
score := 85if score >= 90 { fmt.Println("优秀")} else if score >= 60 { fmt.Println("及格")} else { fmt.Println("不及格")}
// 前置变量写法if num := 10; num%2 == 0 { fmt.Println("偶数")}2. for 循环(Go 唯一循环语句)
// 写法1:经典forfor i := 0; i < 5; i++ { fmt.Print(i, " ")}fmt.Println()
// 写法2:类whilesum := 0i := 1for i <= 100 { sum += i i++}fmt.Println(sum)
// 写法3:无限循环count := 0for { count++ if count >= 3 { break }}fmt.Println(count)3. range 遍历
返回:索引 i, 元素值 v
nums := [5]int{10, 20, 30, 40, 50}
// 完整接收索引和值for i, v := range nums { fmt.Printf("索引 %d:值 %d\n", i, v)}
// 只取值,用 _ 忽略索引for _, v := range nums { fmt.Print(v, " ")}fmt.Println()
// 只取索引for i := range nums { fmt.Print(i, " ")}fmt.Println()4. break / continue
break:跳出整个循环continue:跳过本轮循环,直接进入下一轮
// break 示例for i := 1; i <= 100; i++ { if i%7 == 0 { fmt.Println("第一个能被7整除的数:", i) break }}
// continue 示例for i := 1; i <= 10; i++ { if i%2 == 0 { continue } fmt.Print(i, " ")}5. switch
- 默认自动 break,不会穿透 case
- 可多值匹配,也可无表达式作为 if-else 链使用
var day intfmt.Scan(&day)switch day {case 1: fmt.Println("星期一")case 2: fmt.Println("星期二")case 3: fmt.Println("星期三")case 6, 7: fmt.Println("周末")default: fmt.Println("其他工作日")}
// 无表达式 switchscore := 85switch {case score >= 90: fmt.Println("优秀")case score >= 60: fmt.Println("及格")default: fmt.Println("不及格")} 260714GO基础语法
https://fuwari.vercel.app/posts/260714go基础语法/