【GoWeb框架-Gin框架】路由、请求参数、响应、模板渲染、会话、中间件
笔记引用:码神之路 https://www.mszlu.com 一、认识Gin框架 框架是一系列工具的集合,能让开发变的便捷。 学习框架的目的就是为了提供项目的开发效率,使我们更加专注业务,而不是和业务无关的底层代码。 1. go流行的web框架 如果学习过其他语言,可能知道Java用的比较多的是Spring框架,PHP用的比较多的是Laravel,python用的多的是Django,都在各自的语言中具有强大的统治力。 go从诞生之初就带有浓重的开源属性,其原生库已经很强大,即使不依赖框架,也能进行高性能开发,又因为其语言并没有一定的设计标准,所以较为灵活,也就诞生了众多的框架,各具有特色,满足不同的喜好。 Gin的Github地址 1.1 Gin 地址:https://github.com/gin-gonic/gin 号称最快的go语言web框架,目前是go官方的推荐框架(https://go.dev/doc/tutorial/) 1.2 iris 地址:https://github.com/kataras/iris 性能比gin高一些,支持MVC,但这款框架评价不太好,使用上问 ...
【Golang修养之路】Go垃圾回收:三色标记法、混合写屏障机制
来自:刘丹冰 视频链接地址:https://www.bilibili.com/video/BV1wz4y1y7Kd 笔记地址:https://www.yuque.com/aceld/golang/zhzanb#2a81bdfb Golang中GC垃圾回收机制:三色标记法、混合写屏障机制 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的内存对象,让出存储器资源。GC过程中无需程序员手动执行。GC机制在现代很多编程语言都支持,GC能力的性能与优劣也是不同语言之间对比度指标之一。 Golang在GC的演进过程中也经历了很多次变革,Go V1.3之前的标记-清除(mark and sweep)算法,Go V1.3之前的标记-清扫(mark and sweep)的缺点 Go V1.5的三色并发标记法 Go V1.5的三色标记为什么需要STW Go V1.5的三色标记为什么需要屏障机制(“强-弱” 三色不变式、插入屏障、删除屏障 ) Go V1.8混合写屏障机制 Go V1.8混合写屏障机制的全场景分析 一、Go V1.3之 ...
【Go爬虫】Go爬取静态数据、动态数据、并发爬取
网络爬虫-地鼠文档:https://www.topgoer.cn/docs/go42/go42-1d1jub3acmm0b 并发的Web爬虫-地鼠文档:https://www.topgoer.cn/docs/gopl-zh/gopl-zh-1d2a1e652l54v 分布式爬虫-地鼠文档:https://www.topgoer.cn/docs/advancedgoprogramming/advancedgoprogramming-1d27tnom3q8pe Go语言圣经;Go语言高级编程:本书涵盖CGO、Go汇编语言、RPC实现、Web框架实现、分布式系统等高阶主题,针对Go语言有一定经验想深入了解Go语言各种高级用法的开发人员。对于刚学习Go语言的读者,建议先从《Go语言圣经》开始系统学习Go语言的基础知识。 【Go语言实战】Go爬虫 静态数据爬取(Go爬取豆瓣TOP250) 引用:https://blog.csdn.net/weixin_45304503/article/details/120390989 首先看豆瓣TOP250的网页请求格式: 1、发送请求 Golan ...
【Golang 快速入门4】项目实战:即时通信系统
学习视频:8 小时转职 Golang 工程师,这门课很适合有一定开发经验的小伙伴,强推! 【Golang 快速入门4】项目实战:即时通信系统 即时通信系统 - 服务端 项目架构图: 9个小版本迭代: 版本一:构建基础 Server 版本二:用户上线功能 版本三:用户消息广播机制 版本四:用户业务层封装 版本五:在线用户查询 版本六:修改用户名 版本七:超时强踢功能 版本八:私聊功能 版本九:客户端实现 版本一:构建基础 Server server.go,其中包含以下内容: 定义 Server 结构体,包含 IP、Port 字段 NewServer(ip string, port int) 创建 Server 对象的方法 (s *Server) Start() 启动 Server 服务的方法 (s *Server) Handler(conn net.Conn) 处理连接业务 123456789101112131415161718192021222324252627282930313233343536373839404142type Server struct { ...
【Golang 快速入门3】Go Modules + 生态拓展
学习视频:8 小时转职 Golang 工程师,这门课很适合有一定开发经验的小伙伴,强推! 【Golang 快速入门3】Go Modules + 生态拓展 Go Modules Go modules 是 Go 语言的依赖解决⽅案。 发布于 Go1.11,成⻓于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使⽤。 Go modules 集成在Go 的工具链中,只要安装了 Go 就可以使用,它解决了以下几个问题: Go 语言长久以来的依赖管理问题。 “淘汰” 现有的 GOPATH 的使用模式。 统一社区中其他的依赖管理工具(提供依赖迁移功能)。 GO PATH 的弊端: 无版本控制概念 无法同步一致第三方版本号 无法指定当前项⽬引用的第三⽅版本号 go mod 命令 命令 作用 go mod init 生成 go.mod 文件 go mod download 下载 go.mod 文件中指明的所有依赖 go mod tidy 整理现有的依赖 go mod graph 查看现有的依赖结构 go mod edit 编辑 go. ...
【Golang 快速入门2】高级语法:反射 + 并发
学习视频:8 小时转职 Golang 工程师,这门课很适合有一定开发经验的小伙伴,强推! 【Golang 快速入门2】高级语法:反射 + 并发 Golang 进阶 1、反射 变量内置 Pair 结构 123456789var a string// pair<statictype:string, value:"aceld">a = "aceld"var allType interface{}// pair<type:string, value:"aceld">allType = astr, _ := allType.(string) 类型断言其实就是根据 pair 中的 type 获取到 value 123456789101112131415161718// tty: pair<type: *os.File, value: "/dev/tty" 文件描述符>tty, err := os.OpenFile("/dev/tty", ...
【Golang 快速入门1】基础语法 + 面向对象
学习视频:8 小时转职 Golang 工程师,这门课很适合有一定开发经验的小伙伴,强推! 参考博客链接:https://blog.csdn.net/weixin_43734095/category_11618348.html 学习路线:https://blog.csdn.net/weixin_45304503/article/details/127041166 【Golang 快速入门1】基础语法 + 面向对象 Golang 语言特性 Golang 的优势 极简单的部署方式:可直接编译成机器码、不依赖其他库、直接运行即可部署。 静态类型语言,编译的时候可以检查出大多数问题。 语言层面的并发:天生的基因支持、充分的利用多核 123456789101112// Go 语言实现并发的代码func goFunc(i int) { fmt.Println("goroutine ", i, " ...")}func main() { for i := 0; i < 1000; i++ { go goFun ...
Docker教程
Docker是一种容器技术,解决软件跨环境迁移的问题 from:https://weishao-996.github.io/2022/11/17/%E9%BB%91%E9%A9%AC%E7%A8%8B%E5%BA%8F%E5%91%98-Docker/ 视频:https://www.bilibili.com/video/BV1CJ411T7BK 一、目录 二、初识Docker 1. Docker概念 2. 安装Docker 12345678910# 1、yum 包更新到最新 yum update# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2# 3、 设置yum源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 4、 安装docker,出现输入的 ...
Nginx教程
Nginx入门教程:https://xuexb.github.io/learn-nginx/guide/#nginx%E7%9A%84%E7%89%B9%E7%82%B9-2 参考的Nginx学习笔记:https://blog.csdn.net/m0_49558851/article/details/107786372 一、Nginx 简介 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建,并于2004年首次公开发布。同名公司成立于2011年,以提供支持。Nginx 是一款免费的开源软件,根据类 BSD 许可证的条款发布。一大部分Web服务器使用 Nginx ,通常作为负载均衡器。 Nginx的特点 更快: 单次请求会得到更快的响应。 在高并发环境下,Nginx 比其他 WEB 服务器有更快的响应。 高扩展性: Nginx 是基于模块化设计,由多个耦合度极低的模块组成,因此具有很高的扩展性。许多高流量的网站都倾向于开发符合自己业务特性的定制模块。 高可靠性: ...
消息队列RabbitMQ_04_发布确认高级、其他高级特性(幂等性、优先级队列、惰性队列)
发布确认高级 在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败, 导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢? 1、发布确认 springboot 版本 首先发布消息后进行备份在缓存里,如果消息成功发布确认到交换机,则从缓存里删除该消息,如果没有成功发布,则设置一个定时任务,重新从缓存里获取消息发布到交换机,直到成功发布到交换机。 确认机制方案(确认交换机接收到消息) 实战 一个交换机:confirm.exchange,一个队列:confirm.queue,一个消费者:confirm.consumer 其中交换机类型时 direct,与队列关联的 routingKey 是 key1 代码架构图: 在配置文件当中需要添加 1234567891011spring.rabbitmq.publisher-confirm-type=correlatedserver: port: 8888spring: rabbitmq: host: 192.168.91.200 ...