go20/day01/pointer/README.md
yumaojun03 93c6350643 ```
docs(pointer): 更新指针教程
2025-12-28 17:36:27 +08:00

85 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 指针概念
## 场景
+ func sum(a, b) total 这种没有指针参与的
+ func sum(a, b, sum): sum 是一个变量, 用于接收函数的处理结果
+ fmt.Scan: 接收用户输入的参数
+ flag.Parse(): 接收命令行参数
+ Restful API Handler(req, *resp): resp 就是变量必须是指针,用于接收 请求处理后的结果
```go
var i int
fmt.Println("请输入一个整数:")
fmt.Scan(&i) // 把输入写入 i
var port int
flag.IntVar(&port, "port", 8080, "server port") // 命令行参数绑定到变量
flag.Parse()
```
## 概念
Go里面的参数 都是值传递, 不是引用传递(指针)
![alt text](image.png)
```go
import (
"fmt"
"unsafe"
)
func main() {
a := 10
b := 20
c := sum(a, b)
println("a + b =", c)
// 使用指针作为函数参数
// 0x14000108020
var result int
// &result (类型安全的指针) 东西叫指针 有类型约束首GC印象的 地址
fmt.Println("result 地址 =", &result)
sumWithPointer(a, b, &result)
println("a + b =", result)
// uintptr 是无类型指针,可以存放任意指针的地址值, 裸内存地址, 不安全指针, 可能随时被回事,成为一个无效地址
// 非法使用 uintptr 导致程序崩溃
fmt.Println("result 地址 uintptr =", uintptr(unsafe.Pointer(&result)))
}
func sum(a int, b int) int {
return a + b
}
// 这个函数没有Retrun
// *int 就是指针类型, 传递是 int这种类型的变量的地址
func sumWithPointer(a int, b int, c *int) {
*c = a + b
}
```
## 获取用户输入
```go
// 获取用户输入
var i int
fmt.Println("请输入一个整数:")
fmt.Scan(&i) // 把输入写入 i
fmt.Println("你输入的整数是:", i)
```
## 绑定CLI参数
```go
// 命令行参数解析
// --port 9090
var port int
flag.IntVar(&port, "port", 8080, "server port") // 命令行参数绑定到变量
flag.Parse()
fmt.Println("服务器端口号是:", port)
```