New Go
This commit is contained in:
		
							
								
								
									
										13
									
								
								BasicSyntax/Add/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								BasicSyntax/Add/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main(){
 | 
				
			||||||
 | 
					    var n int
 | 
				
			||||||
 | 
					    fmt.Scanf("%d", &n)
 | 
				
			||||||
 | 
					    js := 0
 | 
				
			||||||
 | 
					    for i := 1; i <= n; i++ {
 | 
				
			||||||
 | 
					        js += i
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    fmt.Println("%d", js)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										7
									
								
								BasicSyntax/Helloworld/hw.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								BasicSyntax/Helloworld/hw.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main(){
 | 
				
			||||||
 | 
						fmt.Println("Hello World ohyeah")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										40
									
								
								BasicSyntax/Vector/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								BasicSyntax/Vector/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
					    var n, m int
 | 
				
			||||||
 | 
					    fmt.Scanf("%d %d", &n, &m)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if m == 0 || n == 0 {
 | 
				
			||||||
 | 
					        fmt.Println(0)
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    arr := make([]int, n)
 | 
				
			||||||
 | 
					    result := make([]int, n)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 输入数组
 | 
				
			||||||
 | 
					    for i := 0; i < n; i++ {
 | 
				
			||||||
 | 
					        fmt.Scan(&arr[i])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 计算前缀和 + 滑动窗口
 | 
				
			||||||
 | 
					    result[0] = arr[0]
 | 
				
			||||||
 | 
					    for i := 1; i < n; i++ {
 | 
				
			||||||
 | 
					        if i < m {
 | 
				
			||||||
 | 
					            result[i] = result[i - 1] + arr[i]
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            result[i] = result[i - 1] + arr[i] - arr[i - m]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    min := result[m - 1]
 | 
				
			||||||
 | 
					    for i := m; i < n; i++ {
 | 
				
			||||||
 | 
					        if result[i] < min {
 | 
				
			||||||
 | 
					            min = result[i]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fmt.Printf("%d\n", min)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										115
									
								
								std/func.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								std/func.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					这个问题问得非常棒 👏,因为理解 **Go 的内置函数(builtin functions)** 是掌握这门语言的关键之一。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					在 Go 里,“函数”可以分为三大类:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. ✅ **内置函数(built-in)** —— 不需要导包,直接用;
 | 
				
			||||||
 | 
					2. 📦 **标准库函数** —— 比如 `math.*`、`fmt.*` 等;
 | 
				
			||||||
 | 
					3. 🧑💻 **用户自定义函数** —— 你自己写的。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🧩 一、内置函数(Built-in Functions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					这些是 Go 自带的核心函数,你可以在任何地方直接使用,不需要 `import`。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 函数                                        | 功能                             |
 | 
				
			||||||
 | 
					| ----------------------------------------- | ------------------------------ |
 | 
				
			||||||
 | 
					| **append(slice, elems...)**               | 向切片末尾添加元素,返回新切片                |
 | 
				
			||||||
 | 
					| **len(v)**                                | 返回长度(适用于字符串、数组、切片、map、channel) |
 | 
				
			||||||
 | 
					| **cap(v)**                                | 返回容量(主要用于数组、切片、channel)        |
 | 
				
			||||||
 | 
					| **make(t, ...)**                          | 创建切片、map 或 channel             |
 | 
				
			||||||
 | 
					| **new(T)**                                | 分配类型 `T` 的零值内存,返回指针 `*T`       |
 | 
				
			||||||
 | 
					| **copy(dst, src)**                        | 将 `src` 拷贝到 `dst`,返回复制的元素数     |
 | 
				
			||||||
 | 
					| **delete(m, key)**                        | 从 map 中删除指定 key                |
 | 
				
			||||||
 | 
					| **close(ch)**                             | 关闭一个 channel                   |
 | 
				
			||||||
 | 
					| **complex(r, i)**                         | 构造复数(real + imag)              |
 | 
				
			||||||
 | 
					| **real(c)**                               | 获取复数的实部                        |
 | 
				
			||||||
 | 
					| **imag(c)**                               | 获取复数的虚部                        |
 | 
				
			||||||
 | 
					| **panic(v)**                              | 触发运行时错误,立刻中止程序                 |
 | 
				
			||||||
 | 
					| **recover()**                             | 从 `panic` 中恢复(常在 `defer` 中使用)  |
 | 
				
			||||||
 | 
					| **print(args...)** / **println(args...)** | 简单打印调试(不建议用于正式输出)              |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🔍 举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```go
 | 
				
			||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
					    // 1️⃣ append
 | 
				
			||||||
 | 
					    a := []int{1, 2}
 | 
				
			||||||
 | 
					    a = append(a, 3, 4)
 | 
				
			||||||
 | 
					    fmt.Println(a) // [1 2 3 4]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 2️⃣ len / cap
 | 
				
			||||||
 | 
					    fmt.Println(len(a), cap(a)) // 4 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 3️⃣ make
 | 
				
			||||||
 | 
					    m := make(map[string]int)
 | 
				
			||||||
 | 
					    m["Alice"] = 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 4️⃣ delete
 | 
				
			||||||
 | 
					    delete(m, "Alice")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 5️⃣ new
 | 
				
			||||||
 | 
					    p := new(int)
 | 
				
			||||||
 | 
					    *p = 42
 | 
				
			||||||
 | 
					    fmt.Println(*p) // 42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 6️⃣ copy
 | 
				
			||||||
 | 
					    b := make([]int, 2)
 | 
				
			||||||
 | 
					    n := copy(b, a)
 | 
				
			||||||
 | 
					    fmt.Println(b, n) // [1 2] 2
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🧮 二、标准库函数(来自包)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					这些需要 `import`,例如:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 包         | 常用函数                                      |
 | 
				
			||||||
 | 
					| --------- | ----------------------------------------- |
 | 
				
			||||||
 | 
					| `fmt`     | `Println`, `Printf`, `Sprintf`            |
 | 
				
			||||||
 | 
					| `math`    | `Pow`, `Sqrt`, `Sin`, `Cos`, `Abs`        |
 | 
				
			||||||
 | 
					| `strings` | `Split`, `Join`, `Contains`, `ToUpper`    |
 | 
				
			||||||
 | 
					| `strconv` | `Itoa`, `Atoi`, `ParseFloat`, `FormatInt` |
 | 
				
			||||||
 | 
					| `time`    | `Now`, `Sleep`, `Since`                   |
 | 
				
			||||||
 | 
					| `sort`    | `Sort`, `Ints`, `Strings`                 |
 | 
				
			||||||
 | 
					| `os`      | `Open`, `Create`, `ReadFile`, `WriteFile` |
 | 
				
			||||||
 | 
					| `io`      | `Copy`, `ReadAll`                         |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					这些都不是语言级内置的,但在日常开发中使用频率极高。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🧑💻 三、你自己写的函数
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```go
 | 
				
			||||||
 | 
					func add(a, b int) int {
 | 
				
			||||||
 | 
					    return a + b
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
					    fmt.Println(add(3, 5)) // 8
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🧠 小结对比:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					| 类型    | 是否需 import | 示例                        | 是否可重定义 |
 | 
				
			||||||
 | 
					| ----- | ---------- | ------------------------- | ------ |
 | 
				
			||||||
 | 
					| 内置函数  | ❌          | `len`, `append`, `make`   | ❌      |
 | 
				
			||||||
 | 
					| 标准库函数 | ✅          | `math.Pow`, `fmt.Println` | ✅      |
 | 
				
			||||||
 | 
					| 自定义函数 | ✅ (你写的包)   | `add`, `calc`             | ✅      |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					要不要我帮你整理一份「Go 内置函数的源码级行为图」?
 | 
				
			||||||
 | 
					能清晰看到 `make`、`new`、`append` 这些在底层是怎么运作的(内存分配、指针传递、是否返回新切片等)。
 | 
				
			||||||
		Reference in New Issue
	
	Block a user