This commit is contained in:
e2hang
2025-10-08 22:52:16 +08:00
parent cc17efc436
commit 86cb321978
4 changed files with 175 additions and 0 deletions

13
BasicSyntax/Add/main.go Normal file
View 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)
}

View File

@@ -0,0 +1,7 @@
package main
import "fmt"
func main(){
fmt.Println("Hello World ohyeah")
}

View 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
View 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` 这些在底层是怎么运作的(内存分配、指针传递、是否返回新切片等)。