GO学习笔记 | 刷leetcode中常用的go基础语法点
刷leetcode中常用的go基础语法点 基础声明123456789101112131415// 局部变量x := 0s := []int{1, 2, 3}m := map[int]string{1: "a"}// 空 slice / map(之后用 append 填)s := make([]int, 0) // nil slice 也能 append,但 make 意图更明确s := make([]int, 0, 10) // 预分配容量,知道大概长度时更高效m := make(map[int]string)// 二维 slicedp := make([][]int, n)for i := range dp { dp[i] = make([]int, m)} Slice 操作(每日必用)123456789101112131415161718192021222324// 追加s = append(s, x)// 末尾删除(模拟 pop)s = s[:len(s)-1]//...
GO学习笔记 | 安装和配置gorm过程中遇到的问题
安装和配置gorm过程中遇到的问题安装12go get -u gorm.io/gormgo get -u gorm.io/driver/sqlite 快速入门泛型 API (>= v1.30.0)12345678910111213141516171819202122232425262728293031323334353637383940package mainimport ( "context" "gorm.io/driver/sqlite" "gorm.io/gorm")type Product struct { gorm.Model Code string Price uint}func main() { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { ...
GO学习笔记 | 第四讲注册功能相关内容复盘
GO学习笔记 | 第四讲注册功能相关内容复盘1. Engine vs ContextEngine:gin.Default() 返回一个 *gin.Engine,它是整个 HTTP 服务器的抽象。一个 Engine = 一个逻辑服务器,绑定一个端口。可以启动多个 Engine 监听不同端口(比如 :8080 给用户,:8081 给后台管理)。 Context:*gin.Context 代表一次请求。每个 HTTP 请求到达时,Gin 创建一个 Context,把 Request(输入)和 Writer(输出)都包进去,然后传给路由处理函数。请求结束,Context 销毁。 一句话:Engine 是长生命周期(进程级),Context 是短生命周期(一次请求)。 2. 参数路由 vs 通配路由1234567891011// 参数路由:匹配路径中的一段server.GET("/users/:name", handler)// /users/zhangsan → 匹配,ctx.Param("name") =...
GO学习笔记 | CORS 跨域问题笔记
CORS 跨域问题笔记问题描述前端(localhost:3000)调用后端(localhost:8080)接口时,浏览器控制台报错: 1234Access to XMLHttpRequest at 'http://localhost:8080/users/signup' from origin'http://localhost:3000' has been blocked by CORS policy: Response to preflightrequest doesn't pass access control check: No 'Access-Control-Allow-Origin'header is present on the requested resource. Axios 返回 Network Error,请求被浏览器拦截。 原因浏览器同源策略:端口不同即为跨域。POST 请求会先发 OPTIONS 预检,后端未返回 CORS 头导致拦截。 注:Postman...
GO学习笔记 | Gin快速安装与入门
Gin快速安装与入门前置条件 Go 版本:Gin 需要 Go 1.25 或更高版本 确认 Go 在你的 PATH 中并且可以从终端使用。有关 Go 安装帮助,请参阅官方文档。 第一步:安装 Gin 并初始化项目首先创建一个新的项目文件夹并初始化 Go 模块: window123mkdir gin-quickstart && cd gin-quickstartgo mod init gin-quickstart 添加 Gin 作为依赖: window1go get -u github.com/gin-gonic/gin 第二步:创建你的第一个 Gin 应用创建一个名为 main.go 的文件: window1touch main.go 打开 main.go 并添加以下代码: 12345678910111213package mainimport "github.com/gin-gonic/gin"func main() { router := gin.Default() ...
LeetCode Hot100 | Day8 | 两数之和
LeetCode Hot100 | Day8 | 两数之和1.两数之和1. 两数之和 - 力扣(LeetCode) 还是老套路,哈希表里面存储nums[i]和下标i,然后去检查如果nums[i]作为第一个数字可行与否,也就是判断target-nums[i]的值在不在数组中,如果可行的话直接返回,如果不行的话就插入当前的nums[i]和其下标 CPP版本 1234567891011121314class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> s; for(int i=0;i<nums.size();i++) { if(s.find(target-nums[i])!=s.end()) return...
在golang中创建新项目并使用git将项目推送到github仓库中(新手向)
在golang中创建新项目并使用git将项目推送到github仓库中(新手向)虽然是新手向,但你起码要把git给学了才行,不能真的啥也不知道 1.创建github仓库 2.克隆项目复制下图的地址 打开git 输入以下命令 1git clone https://github.com/Darling-123456/go_learning.git 3.进入项目文件夹创建.gitignore文件绝不能把 IDE 的配置文件传上去!在你的项目最根目录下,新建一个名为 .gitignore 的文件,并在里面写上: 1.idea/ 原因:打开 GoLand 时会自动生成 .idea 文件夹,里面全是本地的编辑器缓存。如果不忽略,它会和你的代码一起上传,导致 GitHub 仓库非常杂乱。一旦你曾经不小心把它们 add 过,可以使用 git rm -r --cached .idea 命令将它从 Git 追踪列表中剔除。 4.在golang打开这个文件夹 5.写入第一个go文件并创建mod文件正常流程 写好后跳转到对应的位置然后打开终端输入以下命令创建go.mod 1go mod...
GO学习笔记 | 第四章节 用户基本功能与 Gin && GORM 入门 | Gin 框架入门与用户注册
GO学习笔记 | 第四章节 用户基本功能与 Gin|GORM 入门 | Gin 框架入门与用户注册核心内容:Gin 框架入门、路由注册、请求处理与绑定、参数校验、项目目录结构前置知识:Go 基础语法、接口、结构体、方法接收器 一、Gin 框架入门 1.1 什么是 GinGin 是 Go 语言中使用最广泛的 HTTP Web 框架,承担路由注册、中间件接入等核心职责。 学习新框架的正确姿势: 找到官网 / GitHub 看 Quick Start 文档 复制示例代码跑起来 在跑通的基础上逐步修改 1.2 最简示例 1234567891011package mainimport "github.com/gin-gonic/gin"func main() { server := gin.Default() server.GET("/hello", func(ctx *gin.Context) { ctx.String(200, "Hello Go!") ...
GO学习笔记 | 第二章节 GO语言基础| 方法(函数)&& 控制结构 && 内置类型
GO学习笔记 | 第二章节 GO语言基础 | 方法(函数)&& 控制结构 && 内置类型核心内容:方法声明、函数式编程、控制结构(if/for/switch) 、内置类型前置知识:变量声明、常量声明(iota)、包管理 一、两个注意点1.1 GOPATH 目录结构1234GOPATH/├── src/ ← 源代码放在这里├── bin/ ← go install 安装的命令└── pkg/ ← go get 下载的依赖包 注意事项: 项目代码放在 src 目录下 如果不在 src 目录下,需要显式指定模块名 依赖缓存问题:可以删除整个 pkg/mod 目录重新拉取 1.2 iota 回顾123456789101112const ( A = iota // 0 B // 1 C // 2)// 复杂用法(了解即可)const ( Flag1 = 1 << iota // 1 (二进制: 001) Flag2 ...
GO学习笔记 | 第三章节 GO语言基础 | 接口&&结构体&&方法接收器&&组合&&泛型
GO学习笔记 | 第三章节 GO语言基础 | 接口&&结构体&&方法接收器&&组合&&泛型核心内容:接口、结构体、方法接收器、组合、衍生类型与类型别名、泛型前置知识:方法声明、函数式编程、控制结构(if/for/switch)、内置类型 一、课前回顾:defer 与闭包1.1 for 循环中 defer 的经典问题12345for i := 0; i < 10; i++ { defer func() { fmt.Println(i) // 为什么输出的都是 10? }()} 原因:i 的地址始终是同一个,defer 延迟到函数返回前才执行,此时 i 已经是 10 了。 验证:打印地址确认 123456for i := 0; i < 10; i++ { fmt.Printf("i 的地址: %p\n", &i) // 每次循环地址相同! defer func()...








