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

gin框架学习笔记

初始gin

package mainimport "github.com/gin-gonic/gin"type Response struct {Code int    `json:"code"`Msg  string `json:"msg"`Data any    `json:"data"`
}func index(c *gin.Context) {c.JSON(200, Response{Code: 0,Msg:  "111",Data: 222,})
}
func main() {gin.SetMode("release")//1.初始化r := gin.Default()//挂载路由r.GET("/index", index)//绑定端口,运行r.Run(":8081")
}

响应

enter.go

package resimport "github.com/gin-gonic/gin"type Response struct {Code int    `json:"code"`Msg  string `json:"msg"`Data any    `json:"data"`
}var codeMap = map[int]string{1001: "权限错误",1002: "角色错误",
}func response(c *gin.Context, code int, data any, msg string) {c.JSON(200, Response{Code: code,Data: data,Msg:  msg,})
}func Ok(c *gin.Context, data any, msg string) {response(c, 0, data, msg)
}
func OkWithMsg(c *gin.Context, msg string) {Ok(c, gin.H{}, msg)
}
func OkWithData(c *gin.Context, data any) {Ok(c, data, "成功")
}func Fail(c *gin.Context, code int, data any, msg string) {response(c, code, data, msg)
}func FailWithMsg(c *gin.Context, msg string) {response(c, 1001, nil, msg)
}
func FailWithCode(c *gin.Context, code int) {msg, ok := codeMap[code]if !ok {msg = "服务错误"}response(c, code, nil, msg)
}

1.json.go

package mainimport ("gin_study/study_response/res""github.com/gin-gonic/gin"
)func index(c *gin.Context) {c.JSON(200, gin.H{"code": 0, "meg": "成功", "data": gin.H{}})
}
func main() {r := gin.Default()r.GET("/login", func(c *gin.Context) {res.OkWithMsg(c, "登录成功")})r.GET("/users", func(c *gin.Context) {res.OkWithData(c, map[string]any{"name": 1,})})r.POST("/users", func(c *gin.Context) {res.FailWithMsg(c, "参数错误")})r.Run(":8080")
}

响应html

html.go

package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()r.LoadHTMLGlob("study_response/templates/*") //加载所有//r.LoadHTMLFiles("study_response/templates/index.html") //加载单个r.GET("/", func(c *gin.Context) {c.HTML(200, "index.html", map[string]any{"Title": "1111111",})})r.Run(":8080")
}

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{.Title}}</title>
</head>
<body>
00000000000
</body>
</html>

响应文件

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("", func(c *gin.Context) {c.Header("Content-Type", "application/octet-stream")//表示是文件流,唤起浏览器下载,一般设置了这个,就要设置文件名c.Header("Content-Disposition", "attachment; filename=3.file.go") // 用来指定下载下来的文件名fmt.Println("XXX")c.File("study_response/3.file.go")//文件路径})r.Run(":8080")
}

静态文件

r.Static("static", "static") // 第一个参数是别名,第二个才是实际路径
r.StaticFile("abcd", "static/abc.txt")

静态文件的路径不能在被路由使用

package mainimport ("github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.Static("st", "study_response/static") //static为根目录,st为别名r.StaticFile("abc", "study_response/static/a.txt")r.Run(":8090")
}

请求

查询参数

127.0.0.1:8085/?name=tom&age=20&key=1111&key=2222

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/", func(c *gin.Context) {name := c.Query("name")age := c.DefaultQuery("age", "25") //不传参数默认值25keyList := c.QueryArray("key")fmt.Println(name)fmt.Println(age)fmt.Println(keyList)})r.Run(":8085")
}

动态参数

127.0.0.1:8086/users/12/123

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("users/:id", func(c *gin.Context) {userID := c.Param("id")fmt.Println(userID)})r.GET("users/:id/:name", func(c *gin.Context) {userID := c.Param("id")userName := c.Param("name")fmt.Println(userName)fmt.Println(userID)})r.Run(":8086")
}

表单参数

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.POST("users", func(c *gin.Context) {name := c.PostForm("name")age, ok := c.GetPostForm("age")fmt.Println(name)fmt.Println(age, ok)})r.Run(":8080")
}

文件上传

package mainimport ("fmt""github.com/gin-gonic/gin""io""os"
)func main() {r := gin.Default()r.POST("users", func(c *gin.Context) {fileHeader, err := c.FormFile("file")if err != nil {fmt.Println(err)return}fmt.Println(fileHeader.Filename)fmt.Println(fileHeader.Size)file, _ := fileHeader.Open()byteDate, _ := io.ReadAll(file)err = os.WriteFile("1.jpg", byteDate, 0666)fmt.Println(err)})r.Run(":8080")
}

简单方式

err = c.SaveUploadedFile(fileHeader, "uploads/xxx/yyy/"+fileHeader.Filename)
fmt.Println(err)

多文件上传

r.POST("users", func(c *gin.Context) {form, err := c.MultipartForm()if err != nil {fmt.Println(err)return}for _, headers := range form.File {for _, header := range headers {c.SaveUploadedFile(header, "uploads/"+header.Filename)}}})

原始内容

解决body阅后即焚问题

package mainimport ("bytes""fmt""github.com/gin-gonic/gin""io"
)func main() {r := gin.Default()r.POST("", func(c *gin.Context) {byteData, _ := io.ReadAll(c.Request.Body)fmt.Println(string(byteData))//读了之后body就没了,阅后即焚//添加c.Request.Body = io.NopCloser(bytes.NewReader(byteData))name := c.PostForm("name")fmt.Println(name)})r.Run(":8080")
}
form-data
----------------------------853882779395683818968400
Content-Disposition: form-data; name="name"枫枫
----------------------------853882779395683818968400
Content-Disposition: form-data; name="age"1234
----------------------------853882779395683818968400--

对应的分隔符为

Content-Type:[multipart/form-data; boundary=--------------------------052455317193517003536866]
x-www-form-urlencoded

url编码

name=%E6%9E%AB%E6%9E%AB&age=1234
json
{"name": "枫枫","age": 23
}

bind绑定器

查询参数

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/", func(c *gin.Context) {type user struct {Name string `form:"name"`Age  int    `form:"age"`}var u usererr := c.ShouldBindQuery(&u)if err != nil {fmt.Println(err)}fmt.Println(u)})r.Run(":8080")
}

路径参数

http://localhost:8080/users/1/www

type user struct {Name string `uri:"name"`Id   int    `uri:"id"`}var u usererr := c.ShouldBindUri(&u)fmt.Println(err, u)})

表单参数

	//表单参数r.POST("form", func(c *gin.Context) {type user struct {Name string `form:"name"`Age  int    `form:"age"`}var u usererr := c.ShouldBind(&u)fmt.Println(u, err)})

json

r.POST("json", func(c *gin.Context) {type user struct {Name string `json:"name"`Age  int    `json:"age"`}var u usererr := c.ShouldBindJSON(&u)fmt.Println(u, err)})

header参数

r.POST("header", func(c *gin.Context) {type user struct {Name        string `header:"Name"`Age         int    `header:"Age"`ContentType string `header:"Content-Type"`}var u usererr := c.ShouldBindHeader(&u)fmt.Println(u, err)})

binding内置规则

// 不能为空,并且不能没有这个字段
required: 必填字段,如:binding:"required"  // 针对字符串的长度
min 最小长度,如:binding:"min=5"
max 最大长度,如:binding:"max=10"
len 长度,如:binding:"len=6"// 针对数字的大小
eq 等于,如:binding:"eq=3"
ne 不等于,如:binding:"ne=12"
gt 大于,如:binding:"gt=10"
gte 大于等于,如:binding:"gte=10"
lt 小于,如:binding:"lt=10"
lte 小于等于,如:binding:"lte=10"// 针对同级字段的
eqfield 等于其他字段的值,如:PassWord string `binding:"eqfield=Password"`
nefield 不等于其他字段的值- 忽略字段,如:binding:"-" 或者不写// 枚举  只能是red 或green
oneof=red green // 字符串  
contains=fengfeng  // 包含fengfeng的字符串
excludes // 不包含
startswith  // 字符串前缀
endswith  // 字符串后缀// 数组
dive  // dive后面的验证就是针对数组中的每一个元素// 网络验证
ip
ipv4
ipv6
uri
url
// uri 在于I(Identifier)是统一资源标示符,可以唯一标识一个资源。
// url 在于Locater,是统一资源定位符,提供找到该资源的确切路径// 日期验证  1月2号下午3点4分5秒在2006年
datetime=2006-01-02

5. gin中间件和路由

路由

路由(api)分组

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()apiGroup := r.Group("api")UserGroup(apiGroup)r.Run(":8080")
}func UserGroup(r *gin.RouterGroup) {r.GET("users", UserView)r.POST("users", UserView)r.PUT("users", UserView)r.PATCH("users", UserView)r.DELETE("users", UserView)
}
func UserView(c *gin.Context) {path := c.Request.URLfmt.Println(c.Request.Method)fmt.Println(path)
}

RESTFul Api规范

尽量使用名词复数来定义

// 在没有resetful规范正确,表示创建用户,删除用户
/api/user_create
/api/users/create
/api/users/add
/api/add_user
/api/user/delete
/api/user_remove// 使用resetful规范
GET /api/users  用户列表
POST /api/users  创建用户
PUT /api/users/:id 更新用户信息
DELETE /api/users 批量删除用户
DELETE /api/users/:id 删除单个用户

中间件

在这里插入图片描述

局部中间件

直接用于单个路由

package mainimport ("fmt""github.com/gin-gonic/gin"
)func Home(c *gin.Context) {fmt.Println("Home")c.String(200, "Home")
}func M1(c *gin.Context) {fmt.Println("M1 请求部分")c.Next()fmt.Println("M1 响应部分")
}
func M2(c *gin.Context) {fmt.Println("M2 请求部分")c.Abort()fmt.Println("M2 响应部分")
}
func main() {r := gin.Default()r.GET("", M1, M2, Home)r.Run(":8080")
}
全局中间件

全局也就是路由组。这也就是给路由分组的意义

package mainimport ("fmt""github.com/gin-gonic/gin"
)func Home(c *gin.Context) {fmt.Println("Home")c.String(200, "Home")
}func M1(c *gin.Context) {fmt.Println("M1 请求部分")c.Next()fmt.Println("M1 响应部分")
}
func M2(c *gin.Context) {fmt.Println("M2 请求部分")c.Abort()fmt.Println("M2 响应部分")
}
func GM1(c *gin.Context) {fmt.Println("GM1 请求部分")c.Next()fmt.Println("GM2 响应部分")
}func GM2(c *gin.Context) {fmt.Println("GM2 请求部分")c.Next()fmt.Println("GM2 响应部分")
}
func main() {r := gin.Default()g := r.Group("api")g.Use(GM1, GM2)g.GET("users", Home)r.GET("", M1, M2, Home)r.Run(":8080")
}
中间件传递参数
package mainimport ("fmt""github.com/gin-gonic/gin"
)type UserInfo struct {Name string
}func Home(c *gin.Context) {fmt.Println("Home")userName, ok := c.Get("user")if ok {name, ok := userName.(UserInfo)if ok {fmt.Println(name)}}fmt.Println(c.Get("GM1"))fmt.Println(c.Get("GM2"))c.String(200, "Home")
}func M1(c *gin.Context) {fmt.Println("M1 请求部分")c.Next()fmt.Println("M1 响应部分")
}
func M2(c *gin.Context) {fmt.Println("M2 请求部分")c.Abort()fmt.Println("M2 响应部分")
}
func GM1(c *gin.Context) {fmt.Println("GM1 请求部分")c.Set("GM1", "GM1")var user = UserInfo{Name: "aaa"}c.Set("user", user)c.Next()fmt.Println("GM2 响应部分")
}func GM2(c *gin.Context) {fmt.Println("GM2 请求部分")c.Set("GM2", "GM2")c.Next()fmt.Println("GM2 响应部分")
}
func main() {r := gin.Default()g := r.Group("api")g.Use(GM1, GM2)g.GET("users", Home)r.GET("", M1, M2, Home)r.Run(":8080")
}

相关文章:

gin框架学习笔记

初始gin package mainimport "github.com/gin-gonic/gin"type Response struct {Code int json:"code"Msg string json:"msg"Data any json:"data" }func index(c *gin.Context) {c.JSON(200, Response{Code: 0,Msg: "1…...

什么是预训练语言模型下游任务?

问题&#xff1a;Word2Vec模型是预训练模型吗&#xff1f; 由于训练的特性&#xff0c;word2Vec模型一定是与训练模型。给定一个词先使用独热编码然后使用预训练好的Q矩阵得到这个词的词向量。这里指的是词向量本身就是预训练的语言模型。 什么是下游任务&#xff1f; 在自然…...

cursor 弹出在签出前,请清理仓库工作树 窗口

问题出现的背景&#xff1a;是因为我有两台电脑开发&#xff0c;提交后&#xff0c;另一个电脑的代码是旧的&#xff0c;这个时候我想拉取最新的代码&#xff0c;就会出现如下弹窗&#xff0c;因为这个代码暂存区有记录或者工作区有代码的修改&#xff0c;所以有冲突&#xff0…...

Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调

Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调 环境准备创建Python微调环境准备数据集准备模型文件 模型微调模型预测原始模型预测微调模型预测 使用unsloth&#xff0c;可以方便地对大模型进行微调。以微调DeepSeek-R1-Distill-Llama-8B为…...

Ubuntu20.04安装Redis

目录 切换到root用户 使用 apt install redis 安装redis 修改配置文件 ​编辑 重新启动服务器 使用Redis客户端连接服务器 切换到root用户 如果没有切换到root用户的&#xff0c;切换到root用户。 使用 apt install redis 安装redis 遇到y/n直接y即可。 redis安装好之…...

【Word2Vec】Skip-gram 的直观理解(深入浅出)

01 什么是skip-gram 一句话来说就是&#xff0c;给定中心词&#xff0c;然后预测其周围的词&#xff1a; 02 模型结构 对于skip-gram来说&#xff0c;输入是一个[1 x V]维的ont-hot向量&#xff0c;其中V为词表大小&#xff0c;值为1的那一项就表示我们的中心词。经过一个[V x…...

MQ 笔记

什么是消息队列&#xff1f; 消息队列&#xff08;Message Queue, MQ&#xff09;是一种用于在分布式系统中传递消息的中间件技术。 它允许应用程序通过发送和接收消息进行异步通信。 消息队列的核心思想是解耦生产者和消费者&#xff0c;生产者将消息发送到队列中&#xff…...

leetcode第216题组合总和Ⅲ

原题出于leetcode第216题https://leetcode.cn/problems/combination-sum-iii/description/题目为&#xff1a; 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表…...

【零基础C语言】第四节 数组

【零基础C语言系列】 【零基础C语言】第一节 C语言概述【数制进制码制】-CSDN博客 【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客 【零基础C语言】第三节 控制结构-CSDN博客 一、一维数组...

20250225-代码笔记03-class CVRPModel AND other class

文章目录 前言一、class CVRPModel(nn.Module):__init__(self, **model_params)函数功能函数代码 二、class CVRPModel(nn.Module):pre_forward(self, reset_state)函数功能函数代码 三、class CVRPModel(nn.Module):forward(self, state)函数功能函数代码 四、def _get_encodi…...

京准电钟快讯:NTP时钟同步服务在智造行业应用

京准电钟快讯&#xff1a;NTP时钟同步服务在智造行业应用 京准电钟快讯&#xff1a;NTP时钟同步服务在智造行业应用 一、NTP技术概述 基本原理 NTP&#xff08;Network Time Protocol&#xff09;是一种用于同步计算机系统时间的网络协议&#xff0c;通过分层时钟源&#xff…...

【Qt】详细介绍如何在Visual Studio Code中编译、运行Qt项目

Visual Studio Code一只用的顺手&#xff0c;写Qt的时候也能用VS Code开发就方便多了。 理论上也不算困难&#xff0c;毕竟Qt项目其实就是CMake&#xff08;QMake的情况这里就暂不考虑了&#xff09;项目&#xff0c;VS Code在编译、运行CMake项目还是比较成熟的。 这里笔者打…...

jsherp importItemExcel接口存在SQL注入

一、漏洞简介 很多人说管伊佳ERP&#xff08;原名&#xff1a;华夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能&#xff0c;但后面将会推出ERP的全部功能&#xff0c;有兴趣请帮点一下 二、漏洞影响 …...

Node.js, Bun, Deno 比较概述

以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl&#xff08;Node.js 原作者&#xff09;Jarred Sumner运行时引擎V8&#xff08;Chrome&#xff09;V8&#xff08;Chrome&#xff09;JavaScriptCore&#…...

大白话跨域问题怎么破,解决方法有啥?

大白话跨域问题怎么破&#xff0c;解决方法有啥&#xff1f; 啥是跨域问题 咱先说说啥是跨域。你可以把每个网站想象成一个独立的小房子&#xff0c;每个房子都有自己的地址&#xff08;也就是域名&#xff09;。正常情况下&#xff0c;一个房子里的东西只能在这个房子里用&a…...

DeepSeek R1满血+火山引擎详细教程

DeepSeek R1满血火山引擎详细教程 一、安装Cherry Studio。 Cherry Studio AI 是一款强大的多模型 AI 助手,支持 iOS、macOS 和 Windows 平台。可以快速切换多个先进的 LLM 模型,提升工作学习效率。下载地址 https://cherry-ai.com/ 认准官网&#xff0c;无强制注册。 这…...

Pytorch中的ebmedding到底怎么理解?

在 PyTorch 中&#xff0c;nn.Embedding 是一个用于处理离散符号映射到连续向量空间的模块。它通常用于自然语言处理&#xff08;NLP&#xff09;任务&#xff08;如词嵌入&#xff09;、处理分类特征&#xff0c;或任何需要将离散索引转换为密集向量的场景。 核心理解 功能&am…...

【JAVA面试题】什么是面向对象?谈谈你对面向对象的理解。

【JAVA面试题】什么是面向对象&#xff1f;谈谈你对面向对象的理解 在 Java 面试中&#xff0c;面向对象 是一个高频考点。它不仅是一种编程思想&#xff0c;更是现代软件开发的核心方法论。本文将从 面向对象的概念、与面向过程的对比、以及 面向对象的三大特性&#xff08;封…...

【C】链式二叉树算法题1 -- 单值二叉树

leetcode链接https://leetcode.cn/problems/univalued-binary-tree/description/ 1 题目描述 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1…...

基于单片机的GPS定位系统设计

1 系统硬件 1.1单片机模块 单片机的种类和型号可以说是有成百上千种&#xff0c;很多大的公司和企业都生产开发自己的单片机芯片&#xff0c;并且广泛应用于各种产品。Intel、 philips、 摩托罗拉、凌阳、宏晶等等种类繁多。大体上可以分为51系列单片机和非51系列单片机。 其…...

[React]Render Props、自定义Hooks和Context API优化详解

关于React中的Render Props、自定义Hooks和Context API优化的详解。我需要根据我搜索到的资料来综合回答这三个部分。首先&#xff0c;我需要分别理解每个概念的定义、用途以及优化方法。 首先看Render Props。根据Render Props是一种通过传递函数作为prop来共享组件间逻辑的技…...

关于大型语言模型的结构修剪

本文介绍了一种名为 **LLM-Pruner** 的方法&#xff0c;用于对大型语言模型&#xff08;LLMs&#xff09;进行结构化剪枝&#xff0c;以减少模型大小和计算需求&#xff0c;同时保留其多任务解决和语言生成能力。LLM-Pruner 通过依赖检测和重要性估计实现高效剪枝&#xff0c;并…...

【语法】C++中string类中的两个问题及解答

贴主在学习string类时遇到过两个困扰我的问题&#xff0c;今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中&#xff0c;调用的是这个string对象的容量(可以存多少个有效字符)&#xff0c;而size()是调用的string对象现在有…...

Linux(centOS) 命令提示符格式修改(PS1)

1. 命令提示符的组成 命令提示符&#xff08;PS1&#xff09;通常由以下部分组成&#xff1a; 部分示例说明[ 和 ][...]提示符的开头和结尾&#xff0c;用于视觉分隔。用户名root 或 tianjiajie当前登录的用户。root 是超级用户&#xff0c;普通用户可能是其他名称。分隔用户…...

QwenVL 2.5-本地安装编译布署全教程

开篇 DeepSeek开源后我国又开源了一个震撼大模型,QwenVL2.5,这是一个多模态的模形,它可以认图、识图、更能作图,还能读懂video。 Qwen2.5-VL 的主要特点如下所示: 感知更丰富的世界:Qwen2.5-VL 不仅擅长识别常见物体,如花、鸟、鱼和昆虫,还能够分析图像中的文本、图表…...

Hutool - JWT:轻松玩转 JSON Web Token

各位开发者朋友们&#xff0c;在现代的前后端分离开发模式里&#xff0c;身份验证和授权可是至关重要的环节。JSON Web Token&#xff08;JWT&#xff09;作为一种轻量级的身份验证和授权机制&#xff0c;在很多项目中都得到了广泛应用。它可以在客户端和服务器之间安全地传输信…...

2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》

文章目录 试题A: 拼正方形(本题总分:5 分)解析答案试题B: 召唤数学精灵(本题总分:5 分)解析答案试题C: 数字诗意解析答案试题D:回文数组试题A: 拼正方形(本题总分:5 分) 【问题描述】 小蓝正在玩拼图游戏,他有7385137888721 个2 2 的方块和10470245 个1 1 的方块,他需…...

【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录

小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset&#xff0c;用一个针插进去然后等待5s左右&#xff0c;松开&#xff0c;即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑&#xff0c;并将路由器WAN口连接至网口。确保电脑…...

W3C标准和ES规范之一文通

W3C标准和ES规范之一文通 以下是关于W3C标准和ES规范的透彻解析&#xff0c;通过结构化对比和生活化类比帮助理解和记忆&#xff1a; 一、核心概念对比&#xff08;总览&#xff09; 维度W3C标准ES规范&#xff08;ECMAScript&#xff09;定位Web技术的建筑蓝图JavaScript的语…...

Linux:应用层协议

协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢? 无论我们采用什么方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种…...

深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析

# 深度学习五虎将&#xff1a;当CNN遇见Transformer的奇幻漂流 ## 序章&#xff1a;AI江湖的兵器谱排行 2012年&#xff0c;多伦多大学的厨房里&#xff0c;Hinton的学生们用GPU煎了个"AlexNet"荷包蛋&#xff0c;从此开启了深度学习的热兵器时代。如今五大模型各显…...

微服务组件详解——sentinel

1.启动sentinel&#xff1a; 下载jar sentinel-dashboard-1.8.0.jar 使用以下命令直接运行 jar 包&#xff08;JDK 版本必须≥ 1.8&#xff09;&#xff1a; java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制台访问地址&#xff1a;http://localhost:9999…...

波导阵列天线 学习笔记11双极化全金属垂直公共馈电平板波导槽阵列天线

摘要&#xff1a; 本communicaition提出了一种双极化全金属垂直公共馈电平板波导槽阵列天线。最初提出了一种公共馈电的单层槽平板波导来实现双极化阵列。此设计消除了传统背腔公共馈电的复杂腔体边缘的必要性&#xff0c;提供了一种更简单的天线结构。在2x2子阵列种发展了宽十…...

swift 开发效率提升工具

安装github copliot for xcode github/CopilotForXcode brew install --cask github-copilot-for-xcode安装swiftformat for xcode brew install swiftformatXcode Swift File代码格式化-SwiftFormat...

3-5 WPS JS宏 工作表的移动与复制学习笔记

************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…...

Centos7部署k8s(单master节点安装)

单master节点部署k8s集群(Centos) 一、安装前准备 1、修改主机名 按照资源准备修改即可 # master01 hostnamectl set-hostname master01 ; bash # node1 hostnamectl set-hostname node1 ; bash # node2 hostnamectl set-hostname node2 ; bash2、修改hosts文件 以下命令所…...

Tomcat

1.Tomcat是什么&#xff1f; Tomcat 是一个开源的、轻量级的 Servlet 容器&#xff0c;也被称为 Web 服务器&#xff0c;由 Apache 软件基金会的 Jakarta 项目开发&#xff0c;在 Java Web 开发领域应用广泛。 1&#xff09;Servlet 容器&#xff1a;Servlet 是 Java 语言编写…...

基于SpringBoot+Vue的电影订票及评论网站的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

地基简识Spring MVC 组件

Spring MVC 是一个基于 MVC 设计模式的框架&#xff0c;其核心组件协同工作以处理 HTTP 请求并生成响应。以下是各组件的详细说明及其协作流程&#xff1a; 一、​核心组件 ​DispatcherServlet&#xff08;前端控制器&#xff09;​ ​作用&#xff1a;接收所有请求并协调其他…...

如何通过Python网络爬虫技术应对复杂的反爬机制?

要使用Python网络爬虫技术绕过复杂的反爬虫机制&#xff0c;可以采取以下几种策略&#xff1a; 设置User-Agent&#xff1a;通过设置不同的User-Agent&#xff0c;模拟正常用户的浏览器访问&#xff0c;避免被网站识别为爬虫。可以使用fake_useragent库来随机生成User-Agent。…...

深入浅出:Spring AI 集成 DeepSeek 构建智能应用

Spring AI 作为 Java 生态中备受瞩目的 AI 应用开发框架&#xff0c;凭借其简洁的 API 设计和强大的功能&#xff0c;为开发者提供了构建智能应用的强大工具。与此同时&#xff0c;DeepSeek 作为领先的 AI 模型服务提供商&#xff0c;在自然语言处理、计算机视觉等领域展现了卓…...

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的&#xff1a; 1.引入 required 模块&#xff1a;我们可以使用 requi…...

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案

【HarmonyOS Next】鸿蒙状态管理装饰器V1和V2混用方案 一、V1和V2为什么需要混用 自从api7开始&#xff0c;一直到api10。V1的实际使用中&#xff0c;开发人员发现Observed和ObjectLink 监听实现多层级嵌套对象的更新的方案&#xff0c;太过于臃肿。当需要监听处理更新的多层…...

【技海登峰】Kafka漫谈系列(三)详解Kafka的数据结构与存储机制

【技海登峰】Kafka漫谈系列(三)详解Kafka的数据结构与存储机制 Kafka 使用消息日志(Log)机制来持久化保存数据,我们知道Kafka实际是以Partition分区为单位进行负载均衡和资源分配,每个Partition又由多个Replica副本组成,副本之间分布于不同的Broker上来保证高可用,因此…...

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek&#xff0c;实现了AI编程&#xff0c;体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…...

腾讯云扩容记录

腾讯云扩容&#xff1a; sudo yum install -y cloud-utils-growpart 安装扩容工具 sudo file -s /dev/vda1 有数据 sudo LC_ALLen_US.UTF-8 growpart /dev/vda 1 sudo resize2fs /dev/vda1 df -Th 完毕 以下是对执行的命令的详细解释以及背后的原理&#xff1a; 1. 安装 cloud…...

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

本地部署大语言模型-DeepSeek

DeepSeek 是国内顶尖 AI 团队「深度求索」开发的多模态大模型&#xff0c;具备数学推理、代码生成等深度能力&#xff0c;堪称"AI界的六边形战士"。 Hostease AMD 9950X/96G/3.84T NVMe/1G/5IP/RTX4090 GPU服务器提供多种计费模式。 DeepSeek-R1-32B配置 配置项 规…...

Windows逆向工程入门之MASM数据结构使用

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 第一章&#xff1a;MASM数据定义体系精要 1.1 基础数据类型全景 1.1.1 整型数据规范 1.1.2 浮点数据编码 1.2 复合数据结构 1.2.1 多维数组定义 1.2.2 复杂结构体 第二章&#xf…...

python 之协程笔记

协程 协程的本质是用户态线程&#xff0c;由程序自行控制切换时机&#xff0c;无需操作系统介入。与线程相比&#xff0c;协程的三大核心优势&#xff1a; 资源占用极低&#xff1a;一个协程仅需KB级内存&#xff0c;可轻松创建数万个切换效率惊人&#xff1a;上下文切换在用户…...