- 博客(18)
- 收藏
- 关注
原创 【Golang玩转本地大模型实战(三):实现上下文记忆,让对话更连贯】
在本系列的前两篇文章中,我们已经完成了一个基于Golang与Ollama[第一篇]:《Golang玩转本地大模型实战(一):ollama部署模型及流式调用》,介绍如何在本地部署大模型并实现 Golang 端的 API 调用;[第二篇]:《Golang玩转本地大模型实战(二):基于Golang + Web实现AI对话页面》,实现了前后端结合的实时聊天功能,支持 WebSocket 与 SSE。缺乏上下文记忆。每次对话模型都只能“盲目作答”,无法结合历史对话内容生成连贯回应。
2025-05-08 08:30:00
1150
1
原创 【Golang玩转本地大模型实战(二):基于Golang + Web实现AI对话页面】
在上一篇文章中,我们学习了如何通过 Ollama 在本地部署大模型,并使用 Golang 实现了流式与非流式的 API 调用。本篇将继续实战,目标是打造一个完整的 网页端 AI 对话系统。该系统基于前后端协作,通过 WebSocket 和 SSE(Server-Sent Events)两种流式传输协议,实现模型回复的实时展示效果。最终实现效果为:本次项目的基本流程如下:SSE(Server-Sent Events)是一种基于 HTTP 的单向推送协议,允许服务器持续向浏览器发送数据。文件下:这段代码的主要
2025-04-30 08:30:00
1882
1
原创 【Golang玩转本地大模型实战(一):ollma部署模型及流式调用】
近年来,AI技术迅猛发展,作为后端程序员,掌握基本的AI应用开发能力变得尤为重要。即使不深入研究模型底层原理,具备快速部署模型并在应用中调用的能力,也能极大地扩展自身技能边界。本系列文章将从AI模型的本地部署到后端调用接口,再到前端交互展示,以最简化的方式,带领大家完成一个完整的AI应用开发流程。使用Ollama部署本地模型,并通过Golang实现非流式和流式的API调用。Ollama是一个本地大模型部署工具,极其易用,非常适合快速上手体验AI应用开发。如何安装并使用Ollama快速部署本地大模型;
2025-04-28 08:30:00
1045
1
原创 【gRPC Web 应用实战从入门到精通(二):gRPC 协议与通信机制】
在上一章节【gRPC Web 应用实战从入门到精通(一):为什么选择 gRPC 及基础使用】中,我们已经通过Golang启动了一个简单的 gRPC 服务,初步体验了 gRPC 的使用流程。从使用体验上来看,gRPC 与传统 HTTP 服务相似,但整体启动过程更加复杂,对前置环境的要求也更高。知其然,更要知其所以然。本章中,我们将借助Wireshark抓包工具,直观地分析 gRPC 与 HTTP 服务在底层协议上的本质区别,并探究为什么在微服务架构中,gRPC 成为了越来越多团队的首选。
2025-04-27 12:45:54
676
原创 【gRPC Web 应用实战从入门到精通(一):为什么选择 gRPC 及基础使用】
随着 Web 微服务架构的逐渐普及,企业对 Web 应用的性能和可扩展性提出了更高的要求。对于现代 Web 应用而言,具备灵活控制吞吐量和并发能力已成为基本需求。不同企业面临的业务体量和技术标准各不相同,因此,构建一个支持水平扩展的系统不仅能够满足多样化的性能需求,也能为开发者提供更清晰的模块划分与开发体验。微服务架构正是实现系统水平扩展的有效手段。然而,微服务之间的高效通信也是架构设计中不可忽视的重要一环。
2025-04-16 09:55:23
807
原创 【gin】手动实现自己的参数验证器
在上一个文章中我们尝试使用golang中gin自带的binding验证方法,并介绍了一些常用的验证场景,如一些requiredlen等常见字段,详见文章【GIN】go-gin 中 validator 验证功能。但是这些基础的方法往往不够我们去使用,所以需要一些自定义更强的验证功能去验证,其实看到binding验证的源码,就可以发现手撸一个自定义的方式进行参数验证,其实并不是太难,可以通过结构体字段的 tag 实现类似 binding 的功能。阅读前置:golang 反射内容意思。
2024-12-16 09:45:00
896
原创 【GIN】go-gin 中 validator 验证功能
在 Go 中使用 Gin 框架时,BindJSON 可以将 JSON 请求体中的数据绑定到结构体上,配合 binding 标签还可以进行验证。其主要是通过validator库实现在Gin的文件中可以看到validator方法是包中的。所以实际上,gin中binding 验证的方法是使用validator实现的这样可以快速的实现多种验证条件,而不需要额外的去写验证方法。Gin 支持多种验证规则,可以通过 binding 标签在结构体字段上定义。下面我们来看一下有哪些验证方法吧。使用。
2024-10-29 12:37:47
1235
原创 【SQL】 JOIN语句作用及Gorm使用案例
最近参与一个迭代项目的开发,代码走查的过程中,遇到了一个蠢了自己一脸的问题。它的场景是这样的:一个rule表和一个 rule_item表。rule表:存入rule_id和对应的内容rule_item:主要存入rule_id和item_id的关联表。大概知道两个表的作用,再来说一下要做的需求:给了一个item_id,需要根据这个item_id在关联表中反查到所有rule_id。并根据rule表用多个rule_id查到所有规则,取出用到之后的代码。
2024-10-17 11:28:52
1039
原创 Go 依赖注入库wire 基本使用
学习过Java 开发的同学,一定对依赖注入有所耳闻。依赖注入(Dependency Injection,简称 DI)是一种设计模式,通过将组件依赖项外部化,使代码更加模块化和易于测试。对于Wire的使用,可以使得开发人员不用在手写对应实例的创建,只需要规范化的编写对应的依赖代码,并通过wire gen 对应目录即可生成对应的实例创建代码。依赖注入是一种设计模式,用于将对象的依赖关系通过构造函数、方法或属性注入,而不是在对象内部创建依赖。这样可以提高代码的可测试性和灵活性。
2024-09-27 10:15:29
1023
1
原创 【Go 实践学习】内存泄漏情景及pprof工具使用(上半篇)
golang本身是拥有GC机制的,GC机制帮我们去处理掉那些我们程序之后不在使用的内存,以缓解程序在运行期间里,内存占用率不断上升,最终达到临界值而出现内存溢出(OOM)的问题。所谓内存泄漏直白来讲即:程序主观上不再想去使用的内存,但是客观上却又持续占有,而是GC系统无法通过三色算法去回收的问题。所以我们在开发中也并能完全的信任GC,而不去管程序中内存的使用。因此,保持一个良好的开发习惯是非常重要的。夫人,你也不想你的代码周末的时候突然在线上挂掉吧。
2024-09-03 09:51:46
1592
1
原创 Golang 版本控制工具:g 安装与使用
Golang的版本控制工具g是一个用来方便地管理和切换Go语言版本的工具。它让用户可以轻松地安装、卸载和切换不同版本的Go,从而更好地适应不同项目的需求。可以看作是golang自己的nvm了。g版本控制工具 releases下载同时支持windows、Linux、mac三个系统。
2024-08-30 09:36:30
2570
原创 golang 项目结构设计参考
作为一个新手,学习了golang中的http、net,也学习了gin、beego等web框架,也学习了zero-go这种脚手架。自己也在一些网站上学习了相关WEB后端开发的代码,跟着敲了一段时间,换到一个新的教程又发现两者的写法是完全不同。所以我需要一种稳定的、适用于各种大中小项目的项目排版模式,来保证开发、维护这几个过程中的代码是容易阅读的。所以结合了各个版本规范,以及一些社区和公司的规范,整理一个版本供大家参考。对于上面的说到的部分,我们在此继续做个总结,用tree命令做一个演示图,方便大家直接参考。
2024-08-26 09:44:40
1909
原创 【Go 互斥锁与读写锁深入浅出】
在Web后端业务或者一些需要高IO的场景中,一些共享资源往往会被系统快速的修改。比如在电商的多线程的场景下,对一个商品数量的修改,往往是由多个用户同时修改。这些用户可以看作不同的线程,在多核CPU下出现并行修改,在单核CPU下出现并发修改。在Go中最简单的例子即是一个公共资源的数,在多个协程中进行累加。通过waitgroup原子数可以实现协程在主线程中等待退出,具体代码实现如下import ("fmt""sync"count := 0// 协程数量n := 10wg.Add(n)
2024-07-18 20:36:39
1044
原创 【Redis 理论与实践学习】 一、Redis的数据结构:4.Set类型
Redis 的 Set 是 String 类型的无序集合。集合中任意成员是唯一的,即集合中不能出现重复的数据。无序性:集合中的元素没有特定的顺序。唯一性:集合中不允许重复的元素。元素数量限制:最多可以存储2^32-1个元素。增加元素:向集合中添加一个元素,如果元素已存在则忽略。删除元素:从集合中移除指定元素。检查元素是否存在:判断集合中是否存在某个元素。并集:返回多个集合的所有成员的并集。交集:返回多个集合的所有成员的交集。差集:返回指定集合和其他集合之间的差集。
2024-07-08 23:16:32
1297
原创 (Redis 理论与实践学习)一、Redis的数据结构:3.Hash类型
Redis中的Hash类型是一种键值对(Key-Value)的集合映射表,其特别适合用于存储对象,因此在各种场景的业务中都有着广泛应用。OK1) "name"3) "age"4) "20"在上述的命令中,我们成功的存储了一个对象,其key值为student,包含了name和age两个字段,最终存入到Redis中。在前面的学习中,我们介绍了String类型也可以用来存储对象(详情见此),那么两者在实际业务中存储对象的区别是什么样的呢?
2024-07-03 16:11:13
1337
原创 (Redis 理论与实践学习)一、Redis的数据结构:2.List类型
List类似是Redis中的一个基本数据类型,它支持按照插入顺序存储一组数据,适合处理需要有序集合和快速插入/删除操作的场景。不管是Redis内部使用,还是一些业务场景都有可能使用到它的特性。
2024-06-27 21:45:11
788
原创 (Redis 理论与实践学习)一、Redis的数据结构:1.String类型
综上所述可以看到C字符串和SDS的区别,总结如下表所示差异部分C字符串SDS字符串长度获取时间复杂度O(n)O(1)是否会出现缓冲溢出会不会修改字符串长度N次需要执行的分配次数必然N次最多N次可以保存什么数据只能保存文本数据可以保存文本和二进制数据可以使用<String.h>中的库函数吗?全部可用部分可用。
2024-06-24 22:05:42
797
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人