自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(203)
  • 收藏
  • 关注

原创 go-ini配置文件操作

go-ini是golang ini文件操作库,也兼容其他格式,包括但不限于 my.cnf、.gitconfig使用三方库 "gopkg.in/ini.v1"ini文件格式语法; 注释使用分号; ini文件语法env = test; [] 分区符[mysql]Host = 127.0.0.1Port = 3306User = rootP...

2024-03-05 13:57:00 435

原创 gin-gorm操作数据库

GORM 是 Golang 的一个 orm 框架。简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。使用 ORM框架可以让我们更方便的操作数据库。GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server安装gorm.io/gorm...

2024-03-05 11:09:00 406

原创 gin cookie和session

Cookie● HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用 Cookie 或者 Session 实现● cookie 是存储于访问者计算机的浏览器中(比如保存用户的登录状态),可以让我们用同一个浏览器访问同一个域...

2024-02-27 16:14:00 248

原创 gin 文件上传&存储

单文件上传需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data"router.POST("/newFile", func(context *gin.Context) { // FormFile 返回两个值,一个是对应的文件,一个是err,参数是是一个字符串,指定表单中文件字段的名称 file, err := context.FormF...

2024-02-27 14:31:00 455

原创 gin中间件&控制器&model

中间件Gin 框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。通俗的讲:中间件就是匹配路由前和匹配路由完成后执行的一系列操作路由中间件Gin 中的中间件必须是一个 gin.HandlerFunc 类型,配置路由的时候可以传递多个 func 回调函数...

2024-02-27 11:52:00 375

原创 gin 路由处理&控制器

获取请求传参获取get请求传参Query和DefaultQueryrouter := gin.Default() // 127.0.0.1:8080/index?page=1&category=2 router.GET("/index", func(context *gin.Context) { // 通过Query获取get请求url传入的参数 page := co...

2024-02-26 18:07:00 407

原创 gin环境&路由配置&模版渲染

Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快Gin 的官网:https://gin-gonic.com/zh-cn/Gin Github 地址:https://github.com/gin-gonic/gingin环境搭建下载并安装# go mod 同级目录下go get -u github.com/gin-gonic/gin ...

2024-02-26 13:13:00 323

原创 golang文件和目录操作

读取文件通过Read方法读取import ( "fmt" "os")func main() { /* 打开文件 */ // 以只读的方式打开文件,返回一个文件指针类型的对象和error file, err := os.Open("./test.txt") // 文件打开操作完之后必须关闭文件流,可以使用defer 延迟关闭 defer file.Close()...

2024-02-25 21:32:00 397

原创 golang反射

反射有时我们需要写一个函数,这个函数有能力统一处理各种值类型,而这些类型可能无法共享同一个接口,也可能布局未知,也有可能这个类型在我们设计函数时还不存在,这个时候我们就可以用到反射反射是指在程序运行期间对程序本身进行访问和修改的能力。正常情况程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量...

2024-02-25 19:09:00 370

原创 golang中协程&管道&锁

进程和线程进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基 本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进 程都有一个自己的地址空间。一个进程至少有 5 种基本状态,它们是:初始态,执行态, 等待状态,就绪状态,终止状态,通俗的讲进程就是一个正在执行的程序。线程 是进程的一个执行实例,是程序执行的最小单元,它是比进程更...

2024-02-23 16:09:00 282

原创 golang中的接口(数据类型)

golang中的接口Golang 中的接口是一种抽象数据类型,Golang 中接口定义了对象的行为规范,只定义规范 不实现。接口中定义的规范由具体的对象来实现,通俗的讲接口就一个标准,它是对一个对象的行为和规范进行约定,约定实现接口的对象必须得按照接口的规范接口的定义在go中接口(interface)是一种类型,一种抽象的类型。接口(interface)是一组函数 method ...

2024-02-22 18:43:00 334

原创 golang 包&go mod

go mod初始化项目 go mod init项目开发中首先要在项目目录中用 go mod 命令生成一个 go.mod 文件管理项目的依赖自定义包自定义包:// 自定义包 一定要放在第一行package calc/* 定义的方法、变量、结构体等首字母大写表示公有方法,其他包中可以引入该方法 首字母小写表示私有方法,其他包中不能引入,只能在当前包使用*/func...

2024-02-22 11:28:00 405

原创 golang指针和结构体

指针指针操作指针包括指针地址、指针类型和指针取值&: &符号放在变量前面进行取地址操作**:*放在变量前面根据地址进行取值指针地址:func main() { var a int = 1 // a的值是1--类型是int--,地址是0xc0000120c0,&是地址符号 fmt.Printf("a的值是%v--类型是%T--,地址是%...

2024-02-21 19:02:00 426

原创 golang time包和日期函数

获取当前时间// 获取当前时间对象 timeObj := time.Now() /* 获取当前日期 语法一 */ // 打印当前日期 fmt.Println(timeObj) // 2024-02-20 17:50:54.085353 +0800 CST m=+0.000323093 // 当前年 year := timeObj.Year() // 打印当月 month :...

2024-02-20 19:01:00 348

原创 golang函数

函数定义/*函数定义关键字 funcfunc 函数名 (参数 参数类型) 函数返回值的类型*/func getInfo(name string, age int) string { return name}// 函数返回多个返回值:则返回类型括号包裹(返回值类型,类型..),即时返回两个int,也需要(int,int)func getNum(x int, status boo...

2024-02-20 17:34:00 386

原创 golang数组&切片&map

数组数组声明func main() { /* 语法一 */ // 数组名字 [数组长度] 数组类型 // 声明一个数组 长度为3 类型是int 会初始化为int类型的零值,默认值是[0 0 0 ] // 声明数组的时候指定长度是一个常量,数组的不可改变,超出长度会报错 var arr [3]int // 数组赋值 arr[0] = 1 arr[1] = 2 fmt.Pr...

2024-02-20 14:55:00 362

原创 golang运算符&流程控制

运算符算数运算func main() { var a int = 10 var b int = 8 var c = 3.14 var d = 5.15 fmt.Println(a + b) // 18 fmt.Println(a - b) // 2 fmt.Println(a * b) // 80 fmt.Println(a / b) // 1, Go中,如果运算的都是...

2024-02-19 22:46:00 326

原创 golang基本数据类型

数据类型介绍Go语言中的数据类型分为:基本数据类型和复合数据类型基本数据类型:整型、浮点型、布尔型、字符串复合数据类型:数组、切片、结构体、函数、map、通道(channel)、接口等基本数据类型:整型整型分为两个大类:有符号整型按长度分为:int8、int16、int32、int64对应的无符号整型:uint8、uint16、uint32、uint64特殊整...

2024-02-19 16:34:00 519

原创 fmt、变量、常量

fmt包fmt包主要用于打印数据,常用的有Printf、Print、Printf// 文件所属包package main// 导入fmt包,主要用于打印数据import "fmt"func main() { fmt.Println("golang1","golang2") fmt.Print("golang1","golang2") fmt.Printf("golang"...

2024-02-18 17:39:00 292

原创 CSS浮动&定位&布局

浮动简介浮动最早起设计出来是为了实现文字环绕图片或者文字环绕的效果,现在浮动是主流的页面布局方式之一float:浮动属性,值可以是left、right对应向左和向右浮动元素浮动之后的特点脱离文档流不管浮动前是什么元素,浮动后,默认宽高都是被内容撑开,而且可以设置宽高不会独占一行,可以与其他元素共用一行不会margin合并,也不会margin塌陷,能够完美设置四个方向的pa...

2024-01-14 20:49:00 910

原创 CSS盒模型

盒模型的组成部分CSS会把所有的HTML元素都看成一个盒子,所有的样式也是基于这个盒子内容区(content):元素中的文本或后代元素都是它的内容内边距(padding)又称:补白,紧贴内容的补白区域边框(border): 盒子的边框外边距(margin):盒子与外界的距离,外边距不会影响盒子的大小,但会影响盒子的位置盒子的大小=content+左右paddin...

2024-01-02 18:45:00 919

原创 CSS选择器

CSS选择器是一种用于选择HTML或XML文档中特定元素的模式。允许你根据元素的标签名、类名、ID、属性等来选择元素,并将样式应用于这些选中的元素基本选择器通配配选择器通配选择器:可以选中所有的HTML元素通配选择器使用 符号 *,命中页面所有的元素语法* { 属性名:属性值;}通配选择器在实际设置样式应用较少,在对应场景清除样式使用较多元素...

2023-11-17 17:49:00 96

原创 css基础样式

CSS简介CSS全称层叠样式表(Cascading Style Sheets)CSS也是一种标记语言,用于给HTML结构设置样式,例如文字大小、颜色元素宽高效果等等核心思想:HTML搭建结构,CSS添加样式,实现结构与样式的分离CSS行内样式行内样式又称内联样式直接在标签内通过style属性设置样式格式为style="样式key:样式value;"如果设置多个...

2023-11-14 19:08:00 84

原创 html基础了解

CS架构与BS架构C/S架构Client(客户端) / Server(服务器)需要安装客户端使用,哔哩哔哩客户端、腾讯视频客户端等需求安装、需要更新、不跨平台B/S架构Browser(浏览器) / Server(服务器)浏览器直接访问不需要安装,哔哩哔哩网页端、腾讯视频网页端等无需安装、无需更新浏览器内核内核是浏览器的核心,用于处...

2023-11-04 21:14:00 134

原创 Python枚举类型enum

为什么需要枚举枚举(Enum)是一种数据类型,也是一种特别的类,是绑定到唯一值的符号表示,可以使用它来创建用于变量和属性的常量集枚举类可以看成是一个下拉菜单,给出特定的选项且这些选项不可修改,更贴近自然语言的方式表达数据,可以让代码更容易阅读、维护,减少转换或者错误值引起的问题,enum定义了四个类 Enum、IntEnum、Flag 和 IntFlag和一个装饰器unique()、辅助类a...

2023-05-17 13:22:00 401

原创 Python MQTT客户端 paho-mqtt

Python中MQTTPython有许多优秀的MQTT客户端,比较有代表性的有paho-mqtt、hbmqtt、gmqtt等,各有特色paho-mqtt 有着最优秀的文档,代码风格易于理解,同时有着强大的基金会支持,目前新版本支持 MQTT 5.0hbmqtt 使用 asyncio 库实现,可以优化网络 I/O 带来的延迟,但是代码风格不友好,文档较少,不支持 MQTT 5.0,且...

2023-05-15 15:42:00 5082

原创 MQTT-保留消息和遗嘱消息

遗嘱消息为什么需要遗嘱消息 MQTT的订阅发布机制,解耦了消息的发送方和接收方,这使我们没有办法获取对端的状态,为了解决该问题,MQTT提供了遗嘱消息,为意外断线的客户端提供了对外发出通知的能力如何使用遗嘱消息 使用遗嘱消息,客户端需要在连接时,也就是connect报文中指定遗嘱消息,除了正常CONNECT报文字段,需要为遗嘱消息提...

2023-05-09 16:48:00 1122

原创 MQTT-QoS与协议流程

QoS的报文收发流程QoS 0最多交付一次,消息有可能丢失,最低的QoS等级,没有任何的机制,不需要等待确认和重传,只要保证消息发送,也可能到达不了接收端QoS0消息发送流程:发送端调用API发送消息消息将被拷贝内核层的至发送缓冲区中发送缓冲区的消息会在合适的时机被发送到网络中经过路由跳转以后,消息被接收端的网卡接收,然后消息来到接收端的接收缓冲区接收缓冲区有了消息,接收端的...

2023-04-28 17:49:00 351

原创 MQTT-会话

MQTT会话为什么需要会话​ 假如有以下场景,客户端A发送消息到服务端,服务端转发给客户端B,如果这个时候服务端和客户端B的网络连接断开,那么就无法保证消息到达,并且客户端A不知道B连接断开,还会继续发送消息,消息到达服务端之后会因为没有订阅者被丢弃,后面如果客户端B和服务端重新进行连接,但是还需要重新订阅进行正常通信​ 根据以上的场景,问题的关键在于服务端和客户...

2023-04-28 13:54:00 186

原创 MQTT-主题基础

MQTT主题MQTT的主题是一个utf-8编码的字符串,最大长度65535字节,严格区分大小写MQTT主题支持分层结构,主题分隔符用'/'表示,主题的层级长度可以为0# 将主题划分为3个层级'level1/level2/level3'# 第二层级长度为0'level1//level3 '# 下面三个level 实际属于三个不同的主题 , /前后如果没有内容视为一个长度为0...

2023-04-27 16:04:00 650

原创 MQTT-发布与订阅的报文

MQTT发布订阅流程在MQTT发布/订阅模式中,一个客户端既可以是发布者,也可以是订阅者,也可以同时具备这两个身份。当客户端发布一条消息时,它会被发送到代理,然后代理将消息路由到该主题的所有订阅者。当客户端订阅一个主题时,它会收到代理转发到该主题的所有消息发布消息报文-Publish客户端连接broker后就可以发布消息,发布消息需要用Publish报文Publish报文基础字段:...

2023-04-21 17:14:00 320

原创 MQTT-基础理念

MQTT与HTTP的区别HTTP协议是客户端与服务端直连请求与响应MQTT是基于发布订阅模型的轻量级的消息传输协议MQTT能力发布:Publish订阅:Subscribe代理:Broker,管理通信执行模式:客户端发送消息到broker,broker将消息发送给订阅过的客户端MQTT通信模式一对一:点对点通信一对多:消息广播多对一:数据采集MQTT 底层协议基于...

2023-04-21 15:38:00 90

原创 Python property、setter、deleter

面向对象封装特点之一就是通过实现好的方法来访问,限制对数据的不合理访问,把对象状态私有化,仅供类的内部进行操作下方示例,Test方法的number属性类实例的时候传递1,number是一个公开属性,可以在外部任意修改、访问,没有对属性进行进行约束class Test: def __init__(self,number) self.number = numberif __...

2023-04-11 14:27:00 375 1

原创 property、setter、deleter

面向对象封装特点之一就是通过实现好的方法来访问,限制对数据的不合理访问,把对象状态私有化,仅供类的内部进行操作下方示例,Test方法的number属性类实例的时候传递1,number是一个公开属性,可以在外部任意修改、访问,没有对属性进行进行约束。

2023-04-11 14:25:48 146 1

原创 Python抽象基类abc

ABC类全称是Abstract Base Classes抽象基类可以通过ABC派生来简单创建抽象基类的特点:基类不应允许初始化接口方法未实现时报告相关错误可以把抽象基类想象成建筑的设计图纸,然后子类按图施工abc模块提供了一个元类ABCMeta可定义抽象类还有一个工具类ABC 可有以继承的方式定义抽象基类# -*- coding: utf-8 -*-# @Time: ...

2023-04-07 15:54:00 218

原创 《将博客搬至CSDN》

《将博客搬至CSDN》

2023-04-03 10:41:00 44

原创 栈与队列

栈stack栈是一种容器,也称堆栈,可以存入数据元素、访问、删除元素特点在于只允许容易的一端(栈顶端指标)进行加入数据和输出没有位置概念,保证任何时候可以访问、删除的元素都会最后存入的元素,确定了一种默认的访问顺序由于栈数据结构只允许在一端操作,按照后进先出的原理运作队列queue队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表队列是一种先进先出的线性表,简称F...

2023-03-27 11:03:00 49

原创 Django日志配置

Django使用Python内建的logging模块打印日志,配置由四个部分组成记录器:Logger处理程序:Handler过滤器:Filter格式化:formatter记录器-LoggerLogger为日志系统的入口,每个logger命名都是bucket,可以向bucket写入需要处理的消息Python定义以及几种日志级别:DEBUG:用于调试目的的日志INFO:...

2023-02-14 20:21:00 297

原创 DRF解决跨域问题

Django Rest Framework提供了corsheaders模块解决跨域问题安装模块pip3.9 install django-cors-headers注册应用# 注册 corsheaders 模块INSTALLED_APPS = [ ... 'corsheaders', ]配置中间件MIDDLEWARE = [ 'django.mi...

2023-01-10 19:25:00 152

原创 48.DRF版本控制

版本控制版本控制是前后端分离开发一个非常重要的内容,比如说我们重要服务修改、升级等发生版本变化v1、v2、v3等,但是版本发生了变化比如 v1升级到了v2版本,v1版本还有业务在继续使用,相当于同时多个版本接口共存使用DRF版本控制配置DRF中的版本控制默认是不开启的,request.version返回None,当开启API版本控制后,request.version属性中将包含与当前版本相...

2023-01-03 13:45:00 128

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除