使用GO--Swagger生成文档
概述
在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger
是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集,帮助开发者在Go环境中解析、生成、验证和操作API描述文件。(OpenAPI 2.0 :用于生成、描述、调用和可视化RESTful Web服务。它允许你使用YAML或JSON格式定义API接口,包括路径、参数、请求方法、响应类型等信息。)
特点
-
定制化支持: 具备强大的自定义能力,通过供应商扩展和可自定义模板,满足不同需求。
-
代码生成: 专注于产出语义正确、运行高效的Go代码,兼容golint, go vet等工具。
基本使用
安装
go install github.com/swaggo/swag/cmd/swag@latest
安装后,通过:swag -v 测试是否安装成功
使用步骤
以gin框架为例:
1. 需要用到gin-swagger库:
go get -u github.com/swaggo/gin-swagger //gin-swagger中间件
go get -u github.com/swaggo/files //swagger嵌入文件
gin-swagger使用步骤:
- 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。
- 使用swag工具扫描代码自动生成API接口文档数据
- 使用gin-swagger渲染在线接口文档页面
2. 添加注释
项目添加注释:(在main函数下添加下面的注释)
// @可以修改的swagger文档的标题
// @version 版本
// @description 这里是swagger中整个项目的描述
// @termsOfService https://www.swagger.io/terms/
// @contact.name 维护者名字
// @contact.url 维护者联系网址
// @contact.email 维护者邮件
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host 127.0.0.1:8080
// @BasePath /api/v1
title:文档标题
version:版本
description,termsOfService,contact.name contact.url,contact.email都是一些声明,可不写。
license:是必须的
host,BasePath:如果你想直接swagger调试API,这两项需要填写正确。前者为服务文档的端口,ip。后者为基础路径,像我们这里就是"/api/v1"。
在原文档中还有securityDefinitions.basic , securityDefinitions.apikey等,这些都是
用来做认证的。其他的可以看官方文档
函数接口添加注释:(在代码中处理请求的接口函数(通常位于controller层),按如下方式注释。)
// @Summary 测试ping
// @Description ping
// @Tags 测试
// @Accept json
// @Success 200 {string} string "{"msg": "pong"}"
// @Failure 400 {string} string "{"msg": "nonono"}"
// @Router /ping [get]
3. 下面直接使用命令,初始化我们的swagger文档:
swag init
生成 docs文档:文档结构如下:
docs
docs.go
swagger.json
swagger.yaml
注意:我们初始化的时候,一定是当前目录中有main.go的文件 ,不是有main函数的文件
4. 导入刚才的docs包(注意是匿名导入)
下面是所有方法的基本示例:
package mainimport ("github.com/gin-gonic/gin"swaggerFiles "github.com/swaggo/files"ginSwagger "github.com/swaggo/gin-swagger"_ "component/swagger/docs")// @可以修改的swagger文档的标题
// @version 版本(默认1.0)
// @description 这里是swagger中整个项目的描述
// @termsOfService https://www.swagger.io/terms/// @contact.name 维护者名字
// @contact.url http://www.swagger.io/support
// @contact.email 维护者邮件// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html// @host 127.0.0.1:8080
// @BasePath /api/v1
func main() {r := gin.Default()//在代码中处理请求的接口函数(通常位于controller层),按如下方式注释。//注册swagger api相关路由r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))// 设置路由组/api/v1g := r.Group("/api/v1"){g.GET("/ping",PingHandler)g.POST("/login",LoginHandler)}r.Run("127.0.0.1:8080")
}// 模型(model)
type User struct{Username string `json:"username" example:"张三"`Password string `json:"password" example:"123456"`
}// 响应参数模型(model)
type ResponseParam struct {Code int `json:"code"`Message string `json:"message"`Data *User `json:"data"`
}// 接收参数模型(model)
type RequestParam struct {Username string `json:"username" example:"李四"`Password string `json:"password" example:"123456"`
}// 接收参数模型2(model)
type RequestParam2 struct {Username string `json:"username" example:"李四"`Password string `json:"password" example:"123456"`UpdateUsername string `json:"updateusername" example:"张三"`UpdatePassword string `json:"updatepassword" example:"789100"`
}// @Summary 测试ping// @Description ping// @Tags 测试1// @Accept application/json// @Success 200 {string} string "{"msg": "pong"}"// @Failure 400 {string} string "{"msg": "nonono"}"// @Router /ping [get]
func PingHandler(ctx *gin.Context){ctx.JSON(200,gin.H{"code": 1000,"msg": "pong",})
}// @Summary 测试login// @Description login// @Tags 测试2// @Accept application/json// @Produce application/json// @Param Object body RequestParam true "用户信息"// @Success 200 {object} ResponseParam// @Failure 400 {string} string "{"msg": "failed"}"// @Router /login [post]
func LoginHandler(c *gin.Context){user := new(User)err := c.ShouldBindJSON(user)if err != nil{c.JSON(200,gin.H{"code": 5000,"msg": user,})}c.JSON(200,gin.H{"code": 2000,"msg": user,})
}// @Summary 删除用户// @Description deleteuser// @Tags 测试3// @Accept application/json// @Produce application/json// @Param id path int true "用户id"// Success 200 {string} string "{"msg": "该id="{{id}}"用户已经被注销"}"// Failure 400 {string} string "{"msg": "该id不存在"}"// @Router /user [delete]
func DeleteUser(c *gin.Context){// 传来待删除用户的id(路径参数)id := c.Param("id")ok := (id == "1")if ok {c.JSON(200,gin.H{"code": 5000,"msg": ("该id="+id+"用户不存在"),})}c.JSON(200,gin.H{"code": 2000,"msg": ("该id="+id+"用户已经被注销"),})}//@Summary 更新用户信息// @Description update// @Tags 测试4// @Accept application/json// @Produce application/json// @Param Object body RequestParam2 true "用户更新后信息"// @Success 200 {object} ResponseParam// @Failure 400 {string} string "{"msg": "failed"}"// @Router /update [put]
func UpdateUser(c *gin.Context){}
注意:在每次更新接口和注释信息后,要重新进行swag init初始化文档
服务启动后,访问:(每个人的端口可能不一样,我这里是8080)Swagger UIhttp://127.0.0.1:8080/swagger/index.html#/
在文档中还可以直接进行调试,进行接收请求和响应。
在编写声明式注释时,需要知道以下东西
-
常见的声明式注释格式及选项(以 Swagger 为例)
@Summary
:- 格式:
@Summary <简短描述>
- 用途:用于提供一个简洁的、对 API 接口功能的总结性描述。这个描述应该能够让使用者快速了解接口主要是做什么的。例如,
@Summary 获取用户信息
或者@Summary 删除指定订单
。
- 格式:
@Description
:- 格式:
@Description <详细描述>
- 用途:提供比
@Summary
更详细的关于接口的信息,包括接口的业务逻辑、操作细节、特殊情况等内容。比如,@Description 根据用户ID从数据库中查询用户的详细信息,包括姓名、年龄、联系方式等
。
- 格式:
@Tags
:- 格式:
@Tags <标签列表>
,其中标签列表可以是一个或多个用逗号隔开的标签。 - 用途:用于对接口进行分类,方便在 API 文档中通过标签来组织和查找接口。例如,
@Tags 用户管理,权限管理
,这样可以将与用户管理相关的接口和权限管理相关的接口通过不同的标签区分开来,便于文档管理和查看。
- 格式:
@Accept
:- 格式:
@Accept <媒体类型列表>
,媒体类型之间可以用逗号隔开。 - 用途:指定接口能够接受的请求内容类型。如
@Accept application/json,text/plain
,表明该接口可以接受 JSON 格式和纯文本格式的请求内容。
- 格式:
@Produce
:- 格式:
@Produce <媒体类型列表>
- 用途:用于说明接口会产生(返回)的内容类型。例如,
@Produce application/json
,意味着这个接口返回的数据格式是 JSON。
- 格式:
@Param
:- 格式:
@Param <参数名> <参数位置> <参数类型> <是否必填> <参数描述>
- 参数位置常见类型:
path
:表示参数是在路径中传递的,如/users/{user_id}
中的user_id
。query
:参数是在查询字符串中,例如/products?category=electronics
中的category
。body
:参数在请求体中,一般用于传递较为复杂的数据结构,像创建用户时,用户信息以 JSON 等格式放在请求体中。
- 用途:用于详细描述接口接受的参数,包括参数的名称、位置、类型、是否必填以及参数的具体含义等信息。例如,
@Param user_id path int true "用户ID,用于唯一标识用户"
。
- 格式:
@Success
:- 格式:
@Success <状态码> <返回类型> <返回描述>
- 用途:描述接口成功响应时的情况,包括返回的状态码、数据类型以及返回内容的简单描述。例如,
@Success 200 {object} UserInfo "成功返回用户的详细信息"
,这里表示接口成功时返回状态码为 200,数据类型是一个对象({object}
,具体类型可能是自定义的结构体等,这里假设是UserInfo
),并且说明了返回的是用户详细信息。
- 格式:
@Failure
:- 格式:
@Failure <状态码> <返回类型> <返回描述>
- 用途:和
@Success
相对应,用于描述接口失败时的情况,包括可能出现的错误状态码、返回的数据类型(如果有返回内容的话)以及错误内容的简单描述。例如,@Failure 404 {string} "用户不存在"
,说明当出现 404 状态码时,返回的数据类型可能是一个字符串,并且内容是提示用户不存在。
- 格式:
@Router
:- 格式:
@Router <路径> [<方法>]
- 用途:用于指定接口对应的路由路径和请求方法。例如,
@Router /users/{user_id} [GET]
,表明这个接口对应的路径是/users/{user_id}
,请求方法是GET
,用于获取特定用户的信息。
- 格式:
然后,需要注意的是:为什么你的swagger中,有些函数可以出现,有些没有出现
一定要注意参数格式!
一定要注意参数格式!
一定要注意参数格式!
相关文章:
使用GO--Swagger生成文档
概述 在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集&#x…...
简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...
探索自然语言处理奥秘(NLP)
摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP)…...
刘铁猛C#入门 030 泛型,partial类,枚举,结构
泛型(generic)无处不在 为什么需要泛型:避免成员膨胀或者类型膨胀 正交性:泛型类型(类/接口/委托/......)泛型成员(属性/方法/字段/....类型方法的参数推断 泛型接口/类的 类型参数不只有一个泛型与委托、lambda表达式实现泛型接口类时 ,实现…...
迅雷 11.2.2 | 本地会员版,不限速下载,支持云盘
迅雷 v11.2.2 是一款带网盘功能的绿色版下载工具。双击“!)绿化”文件即可在桌面生成快捷图标。该版本干净简洁,仅保留下载和云盘两项核心功能。点击左上角的【新建】按钮,可新建链接下载任务。即使在网络条件一般的情况下(如50M宽带…...
P3131 [USACO16JAN] Subsequences Summing to Sevens S
题目描述 Farmer Johns NN cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a…...
股指期货基差为正数,这是啥意思?
在股指期货的世界里,有个挺重要的概念叫“基差”。说白了,基差就是股指期货的价格和它对应的现货价格之间的差价。今天,咱们就来聊聊当这个基差为正数时,到底意味着啥。 基差是啥? 先复习一下,基差 股指…...
docker自动拉取最新镜像并更新
目录 一、自动检查和更新所有正在运行的容器(每24h一次) 二、仅仅更新特定的容器(每24h一次) 三、指定更新间隔(300秒) 四、Watchtower 不会主动删除旧镜像,使用 --cleanup 参数在更新容器后…...
unicloud微信小程序云端一体项目DEMO
最近应客户需求,做了一个产品展示的云开发小程序,从了解云开发到应用到实际项目的产品demo,希望大家能从中获取到对自己有用的东西。 说下心得体会吧,一般小项目用这种云开发确实会减少很多开发成本,人力成本…...
Spring+Mybatis 整合所需准备
文章目录 SpringMybatis SpringMybatis 准备pom.xml 项目所需jar文件 <spring.version>4.0.2.RELEASE</spring.version> <!-- spring框架包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</a…...
后端工程师成长路线图
后端开发工程师是软件开发领域中的一个重要角色,主要负责平台设计、接口设计和功能实现。他们的主要职责包括服务器端业务开发、架构设计、系统性能调优等。 后端开发工程师的工作内容通常涉及服务器开发、数据库管理、业务逻辑实现等方面。他们需要与前端工程…...
java -jar ./target/pay.war ./target/pay.war 中没有主清单属 为什么?
当你尝试使用 java -jar ./target/pay.war 来启动你的 WAR 包时,遇到的错误是因为该 WAR 包没有包含主清单属性(Main-Class)。这是因为你的项目是一个 Spring Boot 项目,并且默认是作为 WAR 文件部署到外部容器(如 Tom…...
封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目
在当今学术研究中,科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增,科研人员需要快速消化新知识,筛选相关信息并清晰表达。但论文写作不仅是信息的罗列,还需要条理清晰、逻辑严密、语言精准,特别是在竞争激烈的…...
解决Centos6.9的yum的失效问题
相信大家,如果遇到了yum问题的话,经常会很头疼,因此,这里给出了两条命令,这里的前提是你的wget是能用的 1、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2、wget -O /etc/yum.re…...
【日常记录-Java】查看Maven本地仓库的位置
1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项,如jar包、pom文件等。默认情况下,其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…...
软件测试丨Web自动化测试用例录制与编写全攻略
Web自动化测试的功能简介 Web自动化测试主要是使用特定的工具或框架自动执行对Web应用程序进行的测试。通过模拟用户的操作,自动化测试能够验证应用程序的功能及性能。这一过程的大致流程是: 用例设计:明确测试目标、场景及所需功能。录制测…...
.Net学习
1 什么是.NET Core .NET是开发平台,.NET Framework、.NET Core、Xamaarin/Mono的统称。 .NET Framework是只能在Windows上开发的技术 .NET Core是可以跨平台开发的技术 Xamaarin/Mono是移动端开发的技术 .NET Core:跨平台、免费、开源,可…...
2024年华中杯数学建模A题太阳能路灯光伏板的朝向设计问题解题全过程文档及程序
2024年华中杯数学建模 A题 太阳能路灯光伏板的朝向设计问题 原题再现 太阳能路灯由太阳能电池板组件部分(包括支架)、LED灯头、控制箱(包含控制器、蓄电池)、市电辅助器和灯杆几部分构成。太阳能电池板通过支架固定在灯杆上端。…...
Spring Cloud Zookeeper 快速入门demo
1.什么是Spring Cloud Zookeeper ? Spring Cloud Zookeeper 是一个用于构建分布式系统的工具,它利用 Apache Zookeeper 提供的服务来实现服务注册与发现、配置管理、负载均衡等功能。具体来说,Spring Cloud Zookeeper 可以做以下几件事情&am…...
防火墙有什么作用
防火墙的作用:1. 提供网络安全防护;2. 实施访问控制和流量过滤;3. 检测和阻止恶意攻击;4. 保护内部网络免受未经授权的访问;5. 监控网络流量和安全事件;6. 支持虚拟专用网络(VPN)。防…...
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数
使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数 首先,简单实现一下,如何在ASPX页面中实现这个功能实现代码说明:注意事项: 然后进阶࿰…...
ES使用script进行复杂排序
es数据字段,关注_source内容,为自定义的es表字段内容 {"clerk_id": 3150036230,"clerk_follow_status": 60,"create_time": 1729156110000,"channel": 1,"mid": 1538020071,"binlog_timestamp&…...
大数据技术Kafka详解 ② | Kafka基础与架构介绍
目录 1、kafka的基本介绍 2、kafka的好处 3、分布式发布与订阅系统 4、kafka的主要应用场景 4.1、指标分析 4.2、日志聚合解决方法 4.3、流式处理 5、kafka架构 6、kafka主要组件 6.1、producer(生产者) 6.2、topic(主题) 6.3、partition(分区) 6.4、consumer(消费…...
观察者模式的理解和实践
引言 在软件开发中,设计模式是开发者们为了解决常见的设计问题而总结出来的一系列最佳实践。观察者模式(Observer Pattern)是其中一种非常经典且使用率极高的设计模式。它主要用于定义对象之间的一对多关系,使得当一个对象的状态发…...
Web3.0:连接分布式未来的纽带
随着技术的不断进步,Web3.0正逐渐成为人们关注的焦点。作为Web的下一代,Web3.0将引领我们进入一个全新的数字时代,重新定义了我们与互联网的关系 Web3.0,也称为“分布式Web”,是互联网的下一代演进。它不仅是信息的传…...
鸿蒙Next通过oss上传照片到阿里云
前言 最近在写纯血鸿蒙的APP,需要用到oss上传照片,之前的客户端 Android 和 IOS 都已经实现了,获取的阿里云签名的上传地址是服务端实现的,相信大部分公司都是这样的模式,服务端也是调用阿里云的SDK来实现的ÿ…...
微信小程序实现图片拖拽调换位置效果 -- 开箱即用
在编写类似发布朋友圈功能的功能时,需要实现图片的拖拽排序,删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码,可以在威信中搜索:我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…...
Django异步视图adrf解决办法
提问 在Django编写异步视图的时候会出现 AssertionError: Expected a Response, HttpResponse or HttpStreamingResponse to be returned from the view 或者 TypeError: sync_to_async can only be applied to sync functions. 诸如此类的错误的时候一般发生在异步视图中…...
C++:类和对象(2)
1. 类的默认成员函数: 类的默认成员函数就是用户没有显示实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成6个默认成员函数(构造函数,析构函数,拷贝构造函数&a…...
.NET用C#导入Excel数据到数据库
将Excel文件中的数据导入到数据库中不仅能够提升数据处理的效率和准确性,还能极大地促进数据分析和决策制定的过程。尤其在企业级应用中,Excel作为数据输入和初步整理的工具非常普遍,但其功能对于复杂查询、大规模数据管理和跨部门的数据共享…...
市场上显卡型号需求分析
两个平台统计:(关键词统计,仅做参考) GPU型号|平台 github(提交量/万) huggingface(模型量/个) H100 6.6 210 A100 17.2 483 V100 14.4 484 4090 27.3 31 3090 11.1 92 在git…...
IO模型分类
IO模型分类 简单了解 阻塞I/O 当用户程序执行read,线程被阻塞,等待两个过程,内核数据准备好和数据从内核态拷贝到用户态。read才返回 非阻塞I/O 非阻塞的read请求在还没准备好数据就返回,期间程序不断轮询内核直到数据准备完…...
使用API有效率地管理Dynadot域名,查看域名优惠信息
前言 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…...
QT 中 QMessageBox 的简单用法
效果 思路 // 创建一个question弹出对话框,添加两个按钮:Yes和NoQMessageBox *box new QMessageBox(QMessageBox::Question, "提示", "确认删除的信息吗?", QMessageBox::Yes | QMessageBox::No, this);box->button(…...
2024-12-6-sklearn学习(4) 支持向量机 吴楚东南坼,乾坤日夜浮。
文章目录 sklearn学习(4) 支持向量机4.1 分类4.1.1 多元分类4.1.2 得分和概率4.1.3 非均衡问题 4.2 回归4.3 密度估计, 异常(novelty)检测4.4 复杂度4.5 使用诀窍(Tips on Practical Use)4.6 核函数4.6.1 自定义核4.6.1.1 使用 python 函数作为内核4.6.1…...
Linux 正确关机方式详解
在Linux系统中,正确地关机是一个重要的操作,它不仅影响到系统的数据完整性,还可能影响到其他用户的工作。本文将详细介绍Linux系统中的各种关机方式,包括它们的使用场景和具体命令。 为什么需要正确关机 在DOS和Windows系统中&a…...
React Portals 有什么用
React Portals是React提供的一种机制,它允许开发者将组件渲染到DOM树中的不同位置,而不受组件层次结构的限制。React Portals的主要用途和优势包括以下几个方面: 用途和优势 处理全局UI元素 React Portals允许将UI元素渲染到应用的根DOM之外…...
光学偏振的基础知识
前言与目录 XXX 目录 一、 二、 三、 一、总结 光的偏振 光具有三个基本特性,即波长、强度和偏振。光的波长很容易理解,以常见的可见光为例,波长范围为380~780nm。光的强度也很容易理解,一束光的强弱可以通过功率的大小来表征…...
小程序 - 计算器
小程序交互练习 - 计算器小程序 目录 计算器 功能描述 准备工作 创建项目 配置导航栏 创建utils目录 math.js文件内容 calc.js文件内容 页面内容 页面样式内容 页面脚本事件 功能截图 总结 计算器 在日常生活中,计算器是人们广泛使用的工具࿰…...
软件架构:从传统单体到现代微服务的技术演变
1.引言 在软件开发中,架构设计不仅仅是程序员的技术任务,它更是一个项目成功的关键。无论是小型应用还是大型分布式系统,软件架构都直接影响着系统的可维护性、可扩展性、性能和稳定性。理解软件架构的必要性,能够帮助开发人员做…...
CTF之密码学(rot密码)
ROT加密算法,也被称为Caesar加密,是一种简单的字母替换加密算法。以下是对ROT加密算法的详细介绍: 一、基本原理 ROT加密算法通过将字母表中的每个字母向后(或向前)移动固定的位置来加密文本。选择一个固定的偏移量&…...
linux安装nodejs管理器,并配置node、npm 软链接
一,安装nodejs管理器 注意——不同版本,可能有问题 亲测这个版本,安装后,npm正常使用——v20.10.0 二,配置软链接——快速访问——不要多些空格(会出现invalid option错误) ln -s /www/server…...
Linux 环境下 PostgreSQL 常用命令操作指南
在 Linux 系统中,PostgreSQL 配备了一系列实用命令以进行数据库操作。具体如下: 注意事项:若采用 docker 部署,需预先进入 docker 容器。 进入 docker 容器命令: docker exec -it 容器名 bash 向容器内复制本地文件命…...
Implicit style-content separation using lora
1.Introduction 图像风格化,这个任务涉及根据某些风格参考改编图像的风格,这些参考可以是基于文本或基于图像的,同时保持其内容不变,内容指的是图像的语义信息和结构,而风格通常指的是视觉特征和模式,例如颜色和纹理。这是一个有挑战的任务,因为风格和内容之间的强关联…...
网易博客旧文-----如何在WINDOWS下载安卓(android)源代码并和eclipse做关联
如何在WINDOWS下载安卓(android)源代码并和eclipse做关联 2013-02-05 17:27:16| 分类: 安卓开发 | 标签: |举报 |字号大中小 订阅 编写安卓程序时,有时想看看安卓某些类的实现,但默认情况下环境是不带的。…...
Qt入门9——绘图
基本概念 虽然Qt已经内置了很多的控件,但是不能保证现有控件就可以应对所有场景. 很多时候我们需要更强的"DIY"能力; Qt 提供了画图相关的API,可以允许我们在窗口上绘制任意的图形形状,来完成更复杂的界面设计。 绘图api核心类: 类说明QPaint…...
漫画之家系统:Spring Boot框架下的漫画版权保护
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...
K8S服务突然中断无法访问:报The node had condition: [DiskPressure]异常
一、背景 程序在运行过程中,突然无法访问,发现后台接口也无法访问;查看kuboard,发现报如下异常:The node had condition: [DiskPressure]. 继续查看磁盘使用率,发现系统盘使用率已经高达93%。问题前后呼应…...
5.11【机器学习】
先是对图像进行划分 划分完后, 顺序读取文件夹,在文件夹里顺序读取图片, 卷积层又称为滤波器,通道是说滤波器的个数,黑白通道数为1,RGB通道个数为3 在输入层,对于输入层而言,滤波…...
JavaWeb开发12
登陆拦截 会话技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应 会话跟踪:一种维护浏览器状态的方法,服务器需要识…...