From 243907d045a14e23a64356ae68d2ed3f7b989e72 Mon Sep 17 00:00:00 2001 From: yumaojun03 <719118794@qq.com> Date: Sun, 28 Dec 2025 17:26:05 +0800 Subject: [PATCH] =?UTF-8?q?```=20docs(day01):=20=E5=AE=8C=E5=96=84Go?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=9F=BA=E7=A1=80=E6=95=99=E7=A8=8B=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加指针概念章节,包含指针的基本概念、使用场景和示例代码 - 补充基础类型章节的零值说明,解释各种基础类型的默认值 - 扩展运算符章节,增加逻辑运算符和位运算符的详细说明 - 更新README目录结构,添加新章节的导航链接 - 添加指针相关的演示图表和示例代码文件 ``` --- day01/README.md | 1 + day01/base_type/README.md | 9 ++- day01/operate/README.md | 23 +++++- day01/pointer/README.md | 70 ++++++++++++++++++ day01/pointer/main.go | 49 +++++++++++++ day01/pointer/pointer.drawio | 133 +++++++++++++++++++++++++++++++++++ 6 files changed, 283 insertions(+), 2 deletions(-) create mode 100644 day01/pointer/README.md create mode 100644 day01/pointer/main.go create mode 100644 day01/pointer/pointer.drawio diff --git a/day01/README.md b/day01/README.md index 27197b5..cf441df 100644 --- a/day01/README.md +++ b/day01/README.md @@ -22,3 +22,4 @@ + [基础类型](./base_type/README.md) + [变量作用域](./scope/README.md) + [运算符](./operate/README.md) ++ [指针概念](./pointer/README.md) diff --git a/day01/base_type/README.md b/day01/base_type/README.md index 16dd0ef..cf547d6 100644 --- a/day01/base_type/README.md +++ b/day01/base_type/README.md @@ -155,4 +155,11 @@ const ( STATUS_OFFLINE Status = "offline" STATUS_UNKNOW Status = "unknow" ) -``` \ No newline at end of file +``` + +## 零值 + +所有的基础类型,没有被赋值都有一个 零值: +整数:0 +小数:0 +bool: false diff --git a/day01/operate/README.md b/day01/operate/README.md index cbbb27e..b334ab2 100644 --- a/day01/operate/README.md +++ b/day01/operate/README.md @@ -71,6 +71,12 @@ a, b := 20, 10 if a > b { a, b = b, a } + +// if a > b { +// // +// } else { +// /// +// } ``` ## 逻辑运算符 @@ -82,6 +88,19 @@ if a > b { + ! 非(NOT), 如果条件为 True,则逻辑 NOT 条件 False,否则为 True ```go + +// if age <= 35 && IsX && condtion3 { + +// } + +// online true -> offline +// if !online { + +// } +// if offline { +// } + + age := 90 gender := "male" @@ -128,7 +147,7 @@ fmt.Println("a << 2 = %d", a<<2) // 1111 0000 240 byte 0x17 表示什么? (十进制: 23, 二进制: 0001 0111) -## 赋值运算符 +## 赋值运算符(=) 最基本用法: @@ -156,6 +175,8 @@ a += 5 // a = a + 5 ## 其他运算符 +指针相关(稍后将) + + & 返回变量存储地址 + \* 取出地址对应的值 diff --git a/day01/pointer/README.md b/day01/pointer/README.md new file mode 100644 index 0000000..ff0c1e7 --- /dev/null +++ b/day01/pointer/README.md @@ -0,0 +1,70 @@ +# 指针概念 + + +## 场景 + ++ 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里面的参数 都是值传递, 不是引用传递(指针) + +```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 +} +``` + +## 获取用户输入 + + + + +## 绑定CLI参数 + diff --git a/day01/pointer/main.go b/day01/pointer/main.go new file mode 100644 index 0000000..51ca0e9 --- /dev/null +++ b/day01/pointer/main.go @@ -0,0 +1,49 @@ +package main + +import ( + "flag" + "fmt" +) + +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))) + + // 获取用户输入 + // var i int + // fmt.Println("请输入一个整数:") + // fmt.Scan(&i) // 把输入写入 i + // fmt.Println("你输入的整数是:", i) + + // 命令行参数解析 + // --port 9090 + var port int + flag.IntVar(&port, "port", 8080, "server port") // 命令行参数绑定到变量 + flag.Parse() + fmt.Println("服务器端口号是:", port) +} + +func sum(a int, b int) int { + return a + b +} + +// 这个函数没有Retrun +// *int 就是指针类型, 传递是 int这种类型的变量的地址 +func sumWithPointer(a int, b int, c *int) { + *c = a + b +} diff --git a/day01/pointer/pointer.drawio b/day01/pointer/pointer.drawio new file mode 100644 index 0000000..2a6107a --- /dev/null +++ b/day01/pointer/pointer.drawio @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file