GoWeb必备理论

GoWeb必备理论

关于goweb,你不得不知道的知识

若是初学者可以借鉴GoWeb查阅本文。

HTTP状态码:

意义

每个状态码都是,http设计者对“网络通讯”中可能出现的情况的假设、预判。他就相当于现实世界的信号灯,就像大家一遇到404,就知道资源找不到了。一遇到500就知道服务器挂了。这种共识,也就是如今万维网的高效率的基础之一。

http状态码是日常开发,修改bug,的居家必备神器。咱们对常见状态码做了分类。

1、必须掌握的状态码

200 ok 最常见的状态码,代表请求完全正确,比如打开网页、调用api啥的。

301 moved permanently 资源永久迁移(例:访问时a.com会被从定项到b.com)

302 Found (部分资源,临时迁移)

400 Bad request(请求出错,参数缺少什么的..)

401 unauthorized(没有登入)

403 forbidden(登入了,没权限)

404 not found(资源不存在)

500 internal server error(服务器内部错误)

2、需要理解的状态码

排查问题时常用

100 continue

201 created 资源创建成功(POST..

204 not content 处理成功,但不返回资源(DELETE..

206 partial content(处理成功了一部分..

304 not modified(资源没有修改,可以直接用缓存)

405 method and allow(方法不被允许)

408 request time-out(请求超时,浏览器向服务发送信息)

502 bad gateway(作为网关/代理时,收到无效相应)

503 service unavailable(服务器暂不可用,正在维修...双十一)

3、常用状态码集合

HTTP协议

核心:

1、HTTP的本质

定义:超文本传输协议

核心模型:【请求+响应】 客户端发送请求、服务器响应,一问一答的进行传递信息

无状态:服务器不会记住上一次请求(后期引入了Cookie、Session)

位置:HTTP协议存放在应用层,规范 (客户端-服务器) 的传输格式、交互流程。

2、URL结构

比如:https://www.example.com:8080/path?name=test#fragment

  • https:用的协议类型
  • www.example.com:域名(对应服务器的ip地址)
  • 8080:端口好,http默认是80,https默认是443,可省略
  • /path:资源路径
  • ?name=test:访问资源时,用GET携带的参数
  • #fragment:锚点
3、请求方法(Method)
  • GET:只是请求资源,不会对服务器资源照成影响
  • POST:提交数据,在服务器创建新的资源..
  • PUT:更新数据,若无资源,则新创建(与POST不同,是幂等的)
  • DELETE:删除数据(一般会有204)
  • PATCH:修改部分资源(与PUT类似,但PUT是更新整个资源)
4、状态码
  • 1xx 信息性状态码
  • 2xx 请求成功
  • 3xx 重定向
  • 4xx 客户端错误
  • 5xx 服务器错误

进阶必备知识:

1、HTTP版本演进
  • HTTP/1.0:每次访问,都会重新建立一个url
  • HTTP/1.1:在1.0的基础上,建立了持久化连接,但是只能串行的发送请求
  • HTTP/2:可以多路复用(一个连接同时发多个请求,互不阻塞)
  • HTTP/3:引入了UDP、解决了TCP头部堵塞问题(标:彻底抛弃了TCP协议,转而应用了UDP)
2、缓存机制
  • 强缓存:服务器通过 Cache-Control: max-age=3600 告诉浏览器,1h内,访问该地址,强制访问的本地缓存(怪不得我更改了服务器的资源后,客户端依旧不变)除非(Ctrl+F5强制刷新)
  • 协商缓存:如果强缓存过期,浏览器发请求时带 If-Modified-Since 或 Etag,服务器判断资源没改就返回 304,让浏览器继续用缓存。
3、HTTPS原理

https=http+tls

核心区别:http是明文传输、https是http+tls组合,数据会加密。

SSL/TLS的作用:

像"加密信封",让HTTP数据更安全:
1、加密:把明文数据(如密码、订单信息)变成密文,及时被截获也无法破解。
2、身份认证:验证服务器的身份,防止是钓鱼网站。
3、完整性校验:确保信息没有被篡改。

4、Cookie 和 Session
  • Cookie:服务器通过set-cookie,在客户端存一些信息,解决http协议无状态问题
  • Session:服务端存储的用户信息,与cookie中的sessionid关联。(登入时服务器,通过向cookie中,设置sessionid。下次可以通过sessionid在session中找到相应信息)
5、跨域资源共享(CORS)

跨域:来自同源策略(协议、域名、端口有个不同,就不属于同一域)

解决:服务器返回 Access-Control-Allow-Origin 响应头,允许指定域名的跨域请求。

Mysql的连接与增删改查

本篇是通过sqlx包进行操作的,对数据库/sql操作进行了通用拓展(原有基础不变、现有基础加强)

连接

需要导入两个必要的包: import( _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) // 核心的两步: DB,err := sqlx.Open("mysql","root:1234@tcp(localhost:3306)/goweb?parseTime=true&loc=Local"); DB.ping()

增删改查

// 语句 queryCreate:="insert into user (id,name) values (?,?) queryDelete:="delete from user where id =?" queryUpdate:="update user set name=? where id=?; queryQuery :="select * from user" // 执行 增:DB.Exec(query,1,"白小纯") 删:DB.Exec(query,1) 改:DB.Exec(query,"夜藏",1) 查:rows,err:=DB.Query(query) for rows.next() {rows.Scan(&id,&name)}

起源:

cookie的名字可不是随便起的,他源于unix中的 "magic cookie",魔幻小饼干 --- 程序之间用于传递特定信息或状态的小数据包。

被万景公司的天才程序员,于1994年,在解决不让 “电商” 服务器承担更多消息时,灵光一现想出来的东西。

后来也因为悄悄记录了用户信息,因cookie“隐蔽跟踪”的本质,而引起了一时的大众恐慌。

应用:

后端的核心操作:
func serv(w http.ResponseWriter, r *http.Request) { // cookie赋值: cookie := &http.Cookie{ Name: "session_id", Value: "cookie", Expires: time.Now().Add(time.Second), } http.SetCookie(w, cookie) // 获取单个cookie c, _ := r.Cookie("session_id") _, err := fmt.Fprintln(w, c.Name, c.Value, c.Expires) if err != nil { fmt.Println("...") } // 循环获取cookie cs := r.Cookies() for n, co := range cs { _, err = fmt.Fprintln(w, n, co.Name) } } 

template

模板起源于远古时代(最早至3万年前),为批量生产特定的物品而生。

与二十实际八九十年代,C++的因泛型需求,引入了模板。

后来web方面、为了解耦也引入了模板

但真正推动模板的,还是mvc架构的兴起--为了让控制器(control)与视图(view)彻底分离,模板引擎起了关键作用

模板简单来说,就是预制结构的文本,其中包含占位符控制逻辑,通过模板引擎的动态填充之后生产,最终输出。

// 后端界面 func temp(w http.ResponseWriter, r *http.Request) { add := template.FuncMap{"add": Add} t := template.New("index").Funcs(add) t, _ = t.ParseFiles("new_add") t.Execute(w, nil) } // 前端 {{add 0 0}}

上传

从浏览器向服务器传输数据

<form action="upload",enctype="multipart/form-data" method="post"> 上传照片:<input type="file" name="photo"> <form>
func upload(w http.ResponseWriter, r *http.Request) { f, _, _ := r.FormFile("photo") b, _ := io.ReadAll(f) err := ioutil.WriteFile("/..",b,0777) if err!=nil{ fmt.Println("失败") } }

下载

<a href="download?filename=file.png">点击我下载</a>
func download(w http.ResponseWriter, r *http.Request) { name := r.FormValue("filename") ReadFile, _ := os.ReadFile("地址" + name) h := w.Header() h.Set("Content-Type", "application/octet-stream") h.Set("Content-Disposition", "attachment/filename=photo") fmt.Fprintln(w, ReadFile) } 

有很多地方,都很合理。

控制器

单控制器

type myStruct struct {} func (m myStruct) ServeHTTP(w http.ResponseWriter, r *http.Request) {} func main() { // 无论访问什么,结果都是一样 s := http.Server{ Addr: "localhost:8888", Handler: myStruct{}, } }

多控制器

func Test(w http.ResponseWriter, r *http.Request) {} func main() { // 无论访问什么,结果都是一样 server:= http.Server{ Addr: "localhost:8888", } http.HandleFunc("url", Test) server.ListenAndServe() }

GET&POST核心区别类

一般需要着重注意get与post的本质区别(从语义、参数传递、幂等性、缓存等角度)

语义:GET是获取资源,POST是提交资源

参数:GET是参数在URL,POST在请求体

幂等性:GET多次执行结果不变(幂等),POST可能多次提交(非幂等、多次下单)

缓存:GET易被缓存、POST一般不缓存


借鉴博客:

1、GoWeb开发 


Read more

Flutter 组件 whitecodel_auto_link 适配鸿蒙 HarmonyOS 实战:交互式文本探针,构建信息流自动链接识别与极速预览架构

Flutter 组件 whitecodel_auto_link 适配鸿蒙 HarmonyOS 实战:交互式文本探针,构建信息流自动链接识别与极速预览架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 whitecodel_auto_link 适配鸿蒙 HarmonyOS 实战:交互式文本探针,构建信息流自动链接识别与极速预览架构 前言 在鸿蒙(OpenHarmony)生态迈向深度社交、企业办公及即时通讯全场景覆盖的背景下,如何将枯燥的长文本转化为具备可交互能力的“信息枢纽”,已成为提升用户操作效率的关键。在鸿蒙设备这类强调分布式协同与智慧感知的移动终端上,如果应用仅能显示纯文本,而无法识别其中的网址(URL)、邮箱(Email)或电话(Phone),用户就必须通过复杂的“长按、复制、切换应用、粘贴”链路来处理信息,这极大地割裂了鸿蒙系统的流转体验。 我们需要一种能够自动扫描文本特征、支持多维热点识别且具备高性能渲染能力的富文本处理引擎。 whitecodel_auto_link 为 Flutter 开发者引入了极其简便的长文本自动链接方案。它通过内置的高精度正则匹配矩阵,自动将文本中的特定识别域转化为可点击的高亮区域。在适配到鸿蒙

By Ne0inhk
Spring Boot 后端分层开发实战:从 MVC 到三层架构详解

Spring Boot 后端分层开发实战:从 MVC 到三层架构详解

应用分层 通过上面的练习,我们学习了 Spring MVC 简单功能的开发,但是我们也发现了一些问题。目前我们程序的代码有点 “杂乱”,然而当前只是 “一点点功能” 的开发。如果我们把整个项目功能完成呢?代码会更加的 “杂乱无章”(文件乱,代码内容乱)。 也基于此,咱们接下来学习应用分层。类似公司的组织架构:公司初创阶段,一个人身兼数职,既做财务,又做人事,还有行政。随着公司的逐渐壮大,会把岗位进行细分,划分为财务部门,人事部门,行政部门等。各个部门内部还会再进行细分。 项目开发也是类似,最开始功能简单时,我们前后端放在一起开发,随着项目功能的复杂,我们分为前端和后端不同的团队,甚至更细粒度的团队。后端开发也会根据功能再进行细分。MVC 就是其中的一种拆分方式。但是随着后端人员不再涉及前端,后端开发又有了新的分层方式。 4.1 介绍 阿里开发手册中,关于工程结构部分,定义了常见工程的应用分层结构: 那么什么是应用分层呢?应用分层是一种软件开发设计思想,

By Ne0inhk

大模型实习模拟面试面经:同花顺金融大模型算法一面深度复盘(RAG、LoRA、强化学习、Agent 架构全解析)

大模型实习模拟面试面经:同花顺金融大模型算法一面深度复盘(RAG、LoRA、强化学习、Agent 架构全解析) 关键词:大模型面试|RAG 重排序|LoRA 参数优化|GRPO 训练异常处理|Agentic RL|金融 Agent 开发|AI for SE 前言:为什么这场面试值得复盘? 2026 年,大模型技术已从“学术热点”全面转向“工业落地”,尤其在金融、医疗、法律等高价值垂直领域,智能 Agent 正成为企业核心竞争力的关键载体。作为国内领先的金融科技公司,同花顺近年来大力投入金融大模型与智能投研 Agent 的研发,其算法岗面试自然聚焦于工程实现能力 + 领域理解深度 + 技术前沿敏感度三大维度。 本文基于真实模拟面试场景,完整还原一场面向大模型算法实习生岗位的一轮技术面全过程。面试官围绕 RAG 重排序机制、LoRA

By Ne0inhk
Spring Cloud 熔断降级详解:用 “保险丝“ 类比,Sentinel 实战教程

Spring Cloud 熔断降级详解:用 “保险丝“ 类比,Sentinel 实战教程

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 📋 目录 * 什么是熔断降级 * 定义 * 为什么需要熔断降级? * 保险丝类比:形象理解熔断机制 * 生活中的保险丝 * 熔断器工作原理对比 * 熔断器三种状态 * Sentinel 核心概念 * 什么是 Sentinel? * 核心概念对比 * Sentinel vs Hystrix 对比 * Sentinel 实战教程 * 环境准备 * 1. 添加依赖 * 2. 配置文件 * 基础示例:注解方式 * 3. 主启动类 * 4. 创建订单服务 * 5. 控制器 * 高级配置:规则定义 * 6. 流控规则配置 * OpenFeign 集成 * 7. Feign客户端集成Sentinel * 8. Feign降级处理 * 规则持久化(

By Ne0inhk