当前位置: 首页 > news >正文

Day12 Gin框架学习

首先记录一个编译失败的Error:
Error
这个error的出现让我又多增加了一些关于goland项目配置的知识:
首先,检查了我原有知识储备当中关于这个error出现可能的原因:(1).go文件位置以及包声明;(2)调用函数是否大写。这些都无问题,于是又重新在该.go文件当中写了另一个函数并在main文件当中调用,结果发现报错:
在这里插入图片描述
这表明编译器根本没有识别到该.go文件,尽管此.go文件是文件位置是放在与main.go同级位置下,并且声明了main包。
晕!这么多文件和路径配置,搞不懂在编译运行时的逻辑链条是什么。。。
于是请教了一下同事,他发现我的go mod init路径是不对的。在此基础上增加了/src之后就能够运行main.go了。

这里便要复习一下依赖管理相关的知识:

依赖管理

Go Modules(go mod),从 Go 1.11 引入,Go 1.16+ 默认启用的 新依赖管理机制。
核心文件:
go.mod:声明项目名和依赖版本。
go.sum:锁定依赖的具体版本校验值。
特点:
项目可以放在任意路径,不再强制依赖 GOPATH。
支持语义化版本控制(如 v1.2.3)。
自动下载依赖到本地缓存($GOPATH/pkg/mod)

使用go mod:
1.set GO111MODULE=on
2.SET GOPROXY=https://goproxy.cn (这是win环境下的) export GOPROXY=https://goproxy.cn (这是mac环境下的)
3.go mod init [包名] // 初始化项目(如果你是初始化项目直接 go mod init 就好了)
4.在你的目录文件下会生成go.mod和go.sum文件 go.mod 里面包含了你的所有的包!
5.在文件里面引入包名的时候有的编辑器会报错但是是可以正常编译的
6.下载包使用go get
7.修改包的版本号直接去go.mod文件修改然后go mod download

Goland各项配置

GOROOT:Go的“安装目录”,固定放标准库;
GOPATH:早期Go(Go 1.11之前)依赖管理的核心
早期特征:所有项目必须放在 GOPATH/src目录下,依赖管理通过go get,没有版本管理,目前主要用来存放:(1)go install编译的二进制文件(会放在GOPATH/bin文件夹里 (2)Go Modules依赖缓存放在 GOPATH/pkg/mod里

至此,可以再次开启Gin框架学习了。
首先回顾一下网络编程的知识,计算机网络通常可以抽象为五层模型,从底层到上层依次为:
物理层 (Physical Layer): 负责传输原始的比特流(bit stream),即“0”和“1”的电信号、光信号或无线电波。它定义了物理接口、传输介质(如网线、光纤、Wi-Fi)以及信号编码方式等。
数据链路层 (Data Link Layer): 在物理层提供的不可靠比特流服务上,将比特流封装成数据帧 (Frame),并提供点对点的数据传输。它主要负责在直接相连的设备之间,通过MAC 地址(Media Access Control Address)来识别不同的主机或网络接口,进行错误检测和流量控制,确保数据在链路上的可靠传输。
网络层 (Network Layer): 负责在不同子网之间或整个互联网上进行数据包 (Packet) 的路由和转发。它通过 IP 地址(Internet Protocol Address)来唯一标识网络中的每一台主机,并决定数据包从源主机到目的主机的最佳路径。
传输层 (Transport Layer): 负责在源主机和目的主机的特定进程之间提供端到端的通信服务。它通过端口号 (Port Number) 来识别同一主机上不同的应用程序进程,并提供可靠(如 TCP)或不可靠(如 UDP)的数据传输服务,进行流量控制和拥塞控制。
应用层 (Application Layer): 位于模型的最高层,直接面向用户和应用程序。它定义了各种应用协议(如 HTTP、FTP、SMTP、DNS 等),用于处理特定的应用程序数据格式和交互逻辑,为用户提供网络服务。
之后,再学习一下Web框架Gin以这个底层原理为基础,用什么样的思路设计出来的?这点知道了会影响我们怎么去学习和使用它。
利用Gin框架进行后端开发的逻辑链路是:
客户端发起请求
网络传输(底层协议栈)
Gin 服务器接收请求
Gin 内部处理(中间件与路由)
业务逻辑处理
Gin 服务器发送响应
网络传输与客户端接收

http://www.dtcms.com/a/353878.html

相关文章:

  • .NET周刊【8月第3期 2025-08-17】
  • 【C#】获取不重复的编码(递增,非GUID)
  • (LeetCode 面试经典 150 题) 102. 二叉树的层序遍历(广度优先搜索bfs)
  • Miniforge3替代Anaconda的一些经验总结
  • STL库——vector(类模拟实现)
  • 旧物二手回收小程序系统:让闲置旧物焕发新生,创造无限价值
  • Leetcode 深度优先搜索 (14)
  • 胶水研究记录学习1
  • 回顾websocket心跳机制以及断线重连(服务端为node)
  • 数据结构——抽象数据类型(ADT)
  • 浏览器渲染帧管线全景拆解:从像素到屏幕的 16.67 ms 之旅
  • Linux内核bitmap组件详解
  • 给Ubuntu添加新用户
  • MyBatis 之关联查询(一对一、一对多及多对多实现)
  • Ansible Playbook 概述与实践案例(下)
  • 基于muduo库的图床云共享存储项目(二)
  • STM32 之串口WIFI应用--基于RTOS的环境
  • AlphaFold 2 本地部署与安装教程(Linux)
  • ICCV 2025 | 清华IEDA提出GUAVA,单图创建可驱动的上半身3D化身!实时、高效,还能捕捉细腻的面部表情和手势。
  • 【51单片机】【protues仿真】基于51单片机篮球计时计分器数码管系统
  • 什么是代理ip?代理ip的运作机制
  • C++ 中 ::(作用域解析运算符)的用途
  • 大小鼠糖水偏爱实验系统 糖水偏好实验系统 小鼠糖水偏好实验系统 大鼠糖水偏好实验系统
  • 【半导体制造流程概述】
  • 优化IDEA卡顿的问题
  • 使用CCProxy搭建http/https代理服务器
  • AWS OpenSearch 可观测最佳实践
  • Maya绑定:人物绑定详细案例
  • 数据结构之 【红黑树的简介与插入问题的实现】
  • 数值分析离散积分近似求值