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