Day12 Gin框架学习
首先记录一个编译失败的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 服务器发送响应
网络传输与客户端接收