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学习笔记 | GO面试要点笔记(持续更新)
GO面试要点笔记(持续更新)第一周 1.问题回答1. 什么是闭包?闭包有什么缺陷? 什么是闭包:闭包是指一个函数(在 Go 中通常指匿名函数)引用了其外部作用域中的变量。即使该外部函数已经返回,这个匿名函数依然可以访问并修改这些外部变量。 缺陷(注意事项): 内存泄漏:如果闭包长期存活(例如作为全局变量或长期运行的协程),其捕获的外部变量将一直无法被 GC 回收,导致内存占用过高。 共享变量副作用:在循环中使用闭包非常容易出错。例如 for i:=0; i<10; i++ { go func() { println(i) }() } 会打印多个 10,因为所有闭包共享了同一个变量 i。 性能开销:闭包本质上是通过指针访问外部变量,底层涉及逃逸分析,有一定的性能开销。 2. 什么情况下会出现栈溢出? 无限递归:函数直接或间接地无限调用自身,导致调用栈无限堆积。 分配过大的局部变量:在函数内部声明了非常大且不能逃逸到堆上的数组或结构体,导致单个栈帧过大。 Go 特定情况:Go 的协程(Goroutine)初始栈很小(约...
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学习笔记 | 第四讲注册功能相关内容复盘代码仓库地址:Darling-123456/go_learning: 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...
GO学习笔记 | 第六章节 用户基本功能与 Gin|GORM 入门| 分层架构、密码加密与登录校验
GO学习笔记 | 第六章节 用户基本功能与 Gin|GORM 入门| 分层架构、密码加密与登录校验核心内容:项目分层落地(handler-service-repository-dao)、bcrypt 密码加密、Cookie/Session 机制、登录校验中间件、用户注册完整链路前置知识:Gin 路由与中间件、GORM 增删改查、Docker Compose 一、项目分层架构落地 0.改造代码 1.1 为什么要分层?这次要解决的第一个问题是:数据库代码放在哪? 如果所有代码都堆在一个文件里,很快会变成一坨「意大利面条」。分层之后,每一层只干一件事,修改一处不影响其他地方。 1.2 四层架构1234567请求 → handler(处理 HTTP) ↓ service(业务逻辑) ↓ repository(存储抽象) ↓ dao(数据库操作) 逐层说明: 层 职责 类比 handler 接收 HTTP 请求,调用 service,返回 HTTP...
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 框架入门与用户注册代码仓库地址:Darling-123456/go_learning: go学习过程记录 核心内容: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) { ...












