【Goalng】第九弹-----文件操作、JSON处理
🎁个人主页:星云爱编程
🔍所属专栏:【Go】
🎉欢迎大家点赞👍评论📝收藏⭐文章
长风破浪会有时,直挂云帆济沧海
目录
1.文件操作
1.1文件介绍
1.2.文件流
1.3.打开和关闭文件
1.4.读文件操作
1.5.写文件操作
1.6判断文件是否存在
1.7拷贝文件
2.flag解析命令行参数
2.1.命令行参数基本使用
2.2flag包解析命令行参数
2.3flag包处理命令行参数
3.json处理
3.1JSON介绍
3.2Json数据格式说明
3.3JSON序列化
3.4JSON反序列化
结语
1.文件操作
1.1文件介绍
文件是保存数据的地方,例如word文档、txt文本文件,excel文件等都是文件。文件能保存图片,视屏,音频等。
1.2.文件流
文件在程序中是以流的形式来操作的:
流:数据在数据源(文件)和程序(内存)之间经历的路程。
输入流:数据从数据源(文件)到程序(内存)的路径。
输出流:数据从程序(内存)到数据源(文件)的路径。
1.3.打开和关闭文件
打开文件用到的方法:
(1)默认文件模式:
(2) 可指定文件模式:
其flag可为的常量:
const (O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件O_RDWR int = syscall.O_RDWR // 读写模式打开文件O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/OO_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
)
关闭文件用到的方法:
使用案例:
package main
import ("fmt""os"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/a.txt"//打开文件file ,err:=os.Open(path)if err!=nil{//打开失败fmt.Printf("open err:%v\n",err)}//输出文件,看看会输出什么?fmt.Printf("%v",file)//&{0xc00008c6c8}err=file.Close()if err!=nil{//关闭失败fmt.Printf("close err:%v\n",err)}
}
说明:
- Open方法和Close方法都在os包下,使用时要导入os包
- file就是个指针
1.4.读文件操作
(1)带缓冲读文件
package main
import ("fmt""os""bufio""io"
)func main(){path:="D:/goProject/src/basic/io/main/text/a.txt"file ,err:=os.Open(path)if err!=nil{//打开失败fmt.Printf("open err:%v\n",err)}defer file.Close()// 创建一个 *Reader,是带缓冲的/*const(defaultBufsize= 4096 //默认的缓冲区为4096)*/readr:=bufio.NewReader(file)//循环的读取文件的内容for{str,err:=readr.ReadString('\n')//读取到\n就结束,即一行一行的读if err==io.EOF{//io.EOF表示文件的末尾break}//输出内容fmt.Print(str)}fmt.Println("\n文件读取结束")
}
(2)一次性读文件
案例:
package main
import("fmt""io/ioutil"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/a.txt"//一次性读取文件content,err:=ioutil.ReadFile(path)if err!=nil{fmt.Println("read err:",err)}// fmt.Println(content) 此时输出的是byte[],得用string转化才能输出原内容 fmt.Println(string(content))//我们没有显式的open文件,因此也不需要显式的close文件//因为,文件的open和close被封装到 ReadFile 函数内部
}
1.5.写文件操作
(1)创建新文件并写入数据
package main
import ("fmt""os""bufio"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/b.txt"//打开文件file,err:=os.OpenFile(path,os.O_WRONLY | os.O_CREATE,0666)if err!=nil{fmt.Println("open err:",err)return}//最后关闭file文件defer file.Close()//写入内容str:="好好学习,天天向上"//用带缓存的*writer写入writer:=bufio.NewWriter(file)for i:=0;i<5;i++{writer.WriteString(str)writer.WriteString("\n") // 添加换行}//因为writer是带缓存的,因此在调用WriteString时//是先将内容写入到缓存中,所以需要用Flush方法//将缓存的数据真正的写入到文件中,否则文件中会没有数据writer.Flush()fmt.Println("写入完成")
}
(2)打开原有文件,将原内容覆盖写入
package main
import ("fmt""os""bufio"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/b.txt"//打开原有文件file,err:=os.OpenFile(path,os.O_WRONLY | os.O_TRUNC,0666)if err!=nil{fmt.Println("open err:",err)return}//最后关闭file文件defer file.Close()//写入内容str:="温故而知新,可以为师矣"//用带缓存的*writer写入writer:=bufio.NewWriter(file)for i:=0;i<5;i++{writer.WriteString(str) writer.WriteString("\n") // 添加换行}//因为writer是带缓存的,因此在调用WriteString时//是先将内容写入到缓存中,所以需要用Flush方法//将缓存的数据真正的写入到文件中,否则文件中会没有数据writer.Flush()fmt.Println("写入完成")
}
(3)打开原有文件,在原文件上追加写入
package main
import ("fmt""os""bufio"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/b.txt"//打开原有文件file,err:=os.OpenFile(path,os.O_WRONLY | os.O_APPEND,0666)if err!=nil{fmt.Println("open err:",err)return}//最后关闭file文件defer file.Close()//写入内容str:="实迷途其未远,觉今是而昨非"//用带缓存的*writer写入writer:=bufio.NewWriter(file)for i:=0;i<5;i++{writer.WriteString(str) writer.WriteString("\n") // 添加换行}//因为writer是带缓存的,因此在调用WriteString时//是先将内容写入到缓存中,所以需要用Flush方法//将缓存的数据真正的写入到文件中,否则文件中会没有数据writer.Flush()fmt.Println("写入完成")
}
(4)打开原有文件,并进行读和写操作
package main
import ("fmt""os""bufio""io"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/b.txt"//打开原有文件file,err:=os.OpenFile(path,os.O_RDWR | os.O_APPEND,0666)if err!=nil{fmt.Println("open err:",err)return}//最后关闭file文件defer file.Close()//读操作reader:=bufio.NewReader(file)for{str1,err:=reader.ReadString('\n')if err==io.EOF{break}fmt.Print(str1)}//写操作//写入内容str:="故有之以为用,无之以为利"//用带缓存的*writer写入writer:=bufio.NewWriter(file)for i:=0;i<5;i++{writer.WriteString(str) writer.WriteString("\n") // 添加换行}//因为writer是带缓存的,因此在调用WriteString时//是先将内容写入到缓存中,所以需要用Flush方法//将缓存的数据真正的写入到文件中,否则文件中会没有数据writer.Flush()fmt.Println("写入完成")
}
1.6判断文件是否存在
golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:
- 如果返回的错误为nil,说明文件或文件夹存在
- 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
- 如果返回的错误为其它类型,则不确定是否在存在
package main
import ("fmt""os""bufio"
)func main(){//文件路径path:="D:/goProject/src/basic/io/main/text/b.txt"// 检查文件是否存在if _, err := os.Stat(path); os.IsNotExist(err) {fmt.Println("文件不存在,将创建新文件")} else if err != nil {fmt.Println("检查文件出错:", err)return} else {fmt.Println("文件已存在,将追加内容")}
}
1.7拷贝文件
package main
import ("fmt""os""io"
)func CopyFile(srcPath, destPath string)(written int64, err error){// 打开源文件src, err := os.Open(srcPath)if err != nil{return 0, fmt.Errorf("打开源文件错误: %v", err)}defer src.Close()// 创建目标文件dest, err := os.Create(destPath)if err != nil{return 0, fmt.Errorf("创建目标文件错误: %v", err)}defer dest.Close()// 复制文件内容return io.Copy(dest, src)
}func main(){srcPath := "D:\\goProject\\src\\basic\\io\\main\\c.jpg"destPath := "D:\\goProject\\src\\basic\\io\\main\\text\\copy.jpg"written, err := CopyFile(srcPath, destPath)if err != nil {fmt.Println("复制失败:", err)return}fmt.Printf("成功复制 %d 字节\n", written)
}
2.flag解析命令行参数
2.1.命令行参数基本使用
package main
import ("fmt""os"
)func main(){fmt.Println("命令行参数有",len(os.Args))//遍历命令行参数for i,v:=range os.Args{fmt.Printf("args[%v]=%v\n",i,v)}}
2.2flag包解析命令行参数
前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行;
Go提供了flag包,可以方便的解析命令行参数,并且参数顺序可以随意
package main
import("fmt""flag"
)func main(){//定义几个变量,用于接受命令行的参数值var user stringvar pwd stringvar host stringvar port int//此例子用于mysql的连接/*func (f *FlagSet) StringVar(p *string, name string, value string, usage string)String用指定的名称、默认值、使用信息注册一个string类型flag。返回一个保存了该flag的值的指针。*/// u就是-u指定参数// ""为-u指定参数的默认值//"用户名,默认为空" -说明flag.StringVar(&user,"u","","用户名,默认为空")flag.StringVar(&pwd,"pwd","","密码,默认为空")flag.StringVar(&host,"h","localhost","主机名,默认为localhost")flag.IntVar(&port,"port",3306,"端口号,默认为3306")//这里有一个非常重要的操作,转换,必须调用该方法flag.Parse()//输出结果fmt.Printf(" user=%v\n pwd=%v\n host=%v\n port=%v\n",user,pwd,host,port)
}
2.3flag包处理命令行参数
package mainimport ("flag""fmt"
)func main() {// 定义命令行参数name := flag.String("name", "Guest", "用户姓名")age := flag.Int("age", 18, "用户年龄")verbose := flag.Bool("v", false, "是否显示详细信息")// 解析命令行参数flag.Parse()// 使用解析后的参数fmt.Printf("姓名: %s\n", *name)fmt.Printf("年龄: %d\n", *age)if *verbose {fmt.Println("显示详细信息")}
}
说明:
(1)定义参数:
- flag.String() :定义字符串类型参数
- flag.Int() :定义整数类型参数
- flag.Bool() :定义布尔类型参数
(2)参数解析
- flag.Parse() :解析命令行参数
(3)使用参数
- 通过 * 解引用获取参数值
3.json处理
3.1JSON介绍
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成
JSON是在2001年开始推广使用的数据格式,目前已经成为主流的数据格式。
JSON易于机器解析和生成,并有效地提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,在反序列化恢复成原来的数据类型(结构体、map等)。这种方式已然成为各个语言的标准。
3.2Json数据格式说明
在JS语言中,一切都是对象,因此任何的数据类型都可以通过JSON来表示
JSON键值对是用来保存数据的一种方式,键值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值
基本结构:
(1)对象:用 {} 表示,包含键值对
{"name": "Alice","age": 25
}
(2)数组:用 [] 表示,包含多个值
["apple", "banana", "orange"]
(3)值 :可以是字符串、数字、布尔值、null、对象或数组
JSON在线解析: JSON在线解析
3.3JSON序列化
JSON序列化是将对应的数据结构(例如struct,map,slice)转换为JSON格式字符串的过程。
案例:
package main
import("fmt""encoding/json"
)type Stu struct{Name stringAge intGender stringScore float64Phone string
}
//将结构体序列化
func testStruct(){stu:=Stu{Name:"jack",Age: 12,Gender: "男",Score:85.6,Phone:"1581689988",}//将stu序列化data,err:=json.Marshal(&stu)if err!=nil{panic(err)}//输出序列化后的结果fmt.Println(string(data))//{"Name":"jack","Age":12,"Gender":"男","Score":85.6,"Phone":"1581689988"}
}//将map序列化
func testMap(){//定义一个mapvar a map[string]interface{}//使用map前,需要makea = make(map[string]interface{})a["name"]="李星云"a["age"]=21a["skill"]="九幽玄天神功"a["lover"]="姬如雪"a["address"]="长安"//将a序列化data,err:=json.Marshal(a)if err!=nil{panic(err)}//输出序列化的结果fmt.Println(string(data))//{"address":"长安","age":21,"lover":"姬如雪","name":"李星云","skill":"九幽玄天神功"}}//对切片序列化
func testSlice(){var slice []map[string]interface{}var a map[string]interface{}//使用map前,需要makea = make(map[string]interface{})a["name"]="李星云"a["age"]=21a["skill"]="九幽玄天神功"a["lover"]="姬如雪"a["address"]="长安"var b map[string]interface{}//使用map前,需要makeb = make(map[string]interface{})b["name"]="姬如雪"b["age"]=19b["skill"]="幻音诀"b["lover"]="李星云"b["address"]="幻音坊"//将a,b添加到slice中slice=append(slice,a)slice=append(slice,b)//将切片进行序列化操作data,err:=json.Marshal(slice)if err!=nil{panic(err)}//输出序列化结果fmt.Println(string(data))//[{"address":"长安","age":21,"lover":"姬如雪","name":"李星云","skill":"九幽玄天神功"},{"address":"幻音坊","age":19,"lover":"李星云","name":"姬如雪","skill":"幻音诀"}]
}//对基本数据类型进行序列化
//对基本数据类型进行序列化意义不大
func testFloat64(){var num float64=3.1415926535//对num进行序列化data,err:=json.Marshal(num)if err!=nil{panic(err)}//输出序列化后的结果fmt.Println(string(data))
}func main(){testStruct()testMap()testSlice()testFloat64()
}
注意事项:
- 结构体字段首字母必须大写,否则无法被序列化
- 若想让序列化后的结构体字段首字母小写,可以使用tag标签
- 可以使用 json:",omitempty" 标签来忽略空值字段
- 可以使用 json:"-" 标签来忽略某个字段
3.4JSON反序列化
JSON反序列化是将JSON格式字符串转换为对应的数据结构(例如struct,map,slice)的过程
package main
import("fmt""encoding/json"
)type Stu struct{Name stringAge intGender stringScore float64Phone string
}//演示将json字符串,反序列化为struct
func unmarshalStruct(){str:="{\"Name\":\"jack\",\"Age\":12,\"Gender\":\"男\",\"Score\":85.6,\"Phone\":\"1581689988\"}"//定义一个Stu实例var stu Stuerr:=json.Unmarshal([]byte(str),&stu)if err!=nil{panic(err)}//输出反序列化后的strfmt.Println(stu)
}//演示将json字符串,反序列化为map
func unmarshalMap(){str:=`{"address":"长安","age":21,"lover":"姬如雪","name":"李星云","skill":"九幽玄天神功"}`//定义一个map实例var a map[string]interface{}err:=json.Unmarshal([]byte(str),&a)if err!=nil{panic(err)}//输出反序列化后的strfmt.Println(a)
}//演示将json字符串,反序列化为slice
func unmarshalSlice(){str:=`[{"address":"长安","age":21,"lover":"姬如雪","name":"李星云","skill":"九幽玄天神功"},{"address":"幻音坊","age":19,"lover":"李星云","name":"姬如雪","skill":"幻音诀"}]`//定义一个slice实例var slice []map[string]interface{}//进行反序列化err:=json.Unmarshal([]byte(str),&slice)if err!=nil{panic(err)}//输出反序列化后的结果fmt.Println(slice)
}func main(){unmarshalStruct()unmarshalMap()unmarshalSlice()
}
说明:
(1)在反序列化一个json字符串时,要确保反序列化后的数据类型和原来序列化前的数据类型一致。
(2)如果json字符串是通过程序获取到的,则不需要再对"进行转义处理
结语
感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!
相关文章:
【Goalng】第九弹-----文件操作、JSON处理
🎁个人主页:星云爱编程 🔍所属专栏:【Go】 🎉欢迎大家点赞👍评论📝收藏⭐文章 长风破浪会有时,直挂云帆济沧海 目录 1.文件操作 1.1文件介绍 1.2.文件流 1.3.打开和关闭文件 1…...
锐评|希捷NVMe闪存+磁盘混合存储阵列
近日,希捷在英伟达GTC 2025会议上展示了NVMe混合闪存/磁盘阵列技术。这个混合存储阵列确实在当前AI数据存储困境中撕开了一道新口子,但远称不上完美,优缺点都极为鲜明。 从优点来看,希捷切中了大多数企业的痛点。AI领域数据量呈爆…...
如何缩短研发周期,降低研发成本?全星APQP软件为您提供解决方案
如何缩短研发周期,降低研发成本?全星APQP软件为您提供解决方案 一、 系统概述 全星研发管理APQP软件系统是一款专为产品研发和质量管控打造的智能化平台,旨在帮助企业高效推进APQP(先期产品质量策划)流程,…...
Centos7安装cat美化工具lolcat
Centos7安装cat美化工具lolcat Centos7安装lolcat使用ruby安装lolcat配置cat系统别名 结果验证 Centos7安装lolcat lolcat :一个在Linux 终端中输出彩虹特效的命令行工具 使用ruby安装lolcat # 安装ruby和zip yum install -y ruby# 查看ruby版本 ruby --version# …...
bluecode-20240913_1_数据解码
时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 256MB,其他语言 512MB 难度:困难 数据解码 指定有一段经过编码的二进制数据,数据由0个或多个"编码单元"组成。"编码单元"的编码方式…...
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…...
典范硬币系统(Canonical Coin System)→ 贪心算法
【典范硬币系统】 ● 典范硬币系统(Canonical Coin System)是指使用贪心算法总能得到最少硬币数量解的货币面值组合。 ● 给定一个硬币系统 ,若使其为典范硬币系统,则要求其各相邻面值比例 ,及各开区间 内各金额…...
hbuilderx打包iOS上传苹果商店的最简流程
无需Mac电脑,无需安装xcode和transporter,其实使用hbuilderx开发的ios软件,也可以上架到苹果的app store商店的。 只需要有苹果开发者中心的苹果开发者账号就行了。 假如你还在了解上架阶段,还没打包,也还没有创建任…...
DeepSeek详解:探索下一代语言模型
文章目录 前言一、什么是DeepSeek二、DeepSeek核心技术2.1 Transformer架构2.1.1 自注意力机制 (Self-Attention Mechanism)(a) 核心思想(b) 计算过程(c) 代码实现 2.1.2 多头注意力 (Multi-Head Attention)(a) 核心思想(b) 工作原理(c) 数学描述(d) 代码实现 2.1.3 位置编码 (…...
python的内存管理
目录 1. 引用计数 2. 垃圾收集(GC) python的内存管理主要是引用计数和垃圾回收器来进行内存管理 1. 引用计数 每个 Python 对象都有一个引用计数,当引用计数为零时,对象的内存会被释放。 import sysa [] # 创建一个空列表对…...
【STL】list
l i s t list list 是 C C C 标准模板库( S T L STL STL)中的一个序列容器( S e q u e n c e C o n t a i n e r Sequence\ Container Sequence Container),它允许在容器的任意位置快速插入和删除元素,是一…...
证券公司主要业务分析及当前佣金最低免五情况探讨
我是StockMasterX,今日想分析证券公司主要业务,并探讨当前佣金最低且免五的证券公司情况,此议题具有一定研究价值,我从事股票交易多年,与证券公司互动频繁,前日晚间饮茶之际,浏览手机时对此深思…...
C++ 变量的声明与定义分离式编译与静态类型(十六)
1. 声明与定义的区别 声明(declaration):向编译器表明某个变量(或其他实体)的类型与名字,使它在后续的编译过程中可见或可用。定义(definition):除了声明变量的名字和类…...
黑盒测试的等价类划分法(输入数据划分为有效的等价类和无效的等价类)
重点: 有效等价和单个无效等价各取1个即可 1、正向用例:一条尽可能覆盖多条2、逆向用例:每一条数据,都是一条单独用例。 步骤: 1、明确需求 2、确定有效和无效等价 3、根据有效和无效造数据编写用例 3、适用场景 针对:需要有大量数据测试输入, …...
通过Appium理解MCP架构
MCP即Model Context Protocol(模型上下文协议),是由Anthropic公司于2024年11月26日推出的开放标准框架,旨在为大型语言模型与外部数据源、工具及系统建立标准化交互协议,以打破AI与数据之间的连接壁垒。 MCP架构与Appi…...
uWebSockets开发入门
一、常用C++ WebSocket开源库 一些常用的 C++ WebSocket 开源库,它们支持 WebSocket 协议的实现,适用于客户端或服务器端开发。 1. Boost.Beast (推荐) 特点:基于 Boost.Asio 的高性能库,支持 HTTP/WebSocket,属于 Boost 官方库的一部分,稳定且跨平台。 适用场景:需要高…...
Python自动化模块:开启高效编程新时代
一、写在前面 在数字化时代,自动化技术已成为提高效率、降低成本的关键手段。Python 作为一种简洁、高效且功能强大的编程语言,凭借其丰富的库和框架,在自动化领域占据了举足轻重的地位,成为众多开发者的首选工具之一。从简单的文…...
Android7 Input(二)Linux 驱动层输入事件管理
概述 在Linux系统中,将键盘,鼠标,触摸屏等这类交互设备交由Linux Input子系统进行管理,Linux Input驱动子系统由于具有良好的和用户空间交互的接口。因此Linux Input驱动子系统,不止于只管理输入类型的设备。也可以将其…...
前端给后端发送数据时都需要包含哪些内容?(HTTP请求的基本组成部分)
1 [TOC](1)一、**必须传递的内容**1. **URL(请求地址)** 二、**可选内容**1. **请求方法(HTTP Method)**2. **请求头(Headers)**3. **请求体(Body)**4. **其他配置** 技术无关 一、必…...
记录vite引入sass预编译报错error during build: [vite:css] [sass] Undefined variable.问题
vite.config.ts resolve: {alias: {: path.resolve(__dirname, src),},},css: {// css预处理器preprocessorOptions: {scss: {additionalData: use "/assets/styles/block.scss" as *;,}}},block.scss $colorGreen: #00ff00;index.vue :v-deep .font-size-14{colo…...
智慧运维平台:赋能未来,开启高效运维新时代
在当今数字化浪潮下,企业IT基础设施、工业设备及智慧城市系统的复杂度与日俱增,传统人工运维方式已难以满足高效、精准、智能的管理需求。停机故障、低效响应、数据孤岛等问题直接影响企业运营效率和成本控制。大型智慧运维平台(AIOps, Smart…...
【log4j】配置Slf4j
配置Slf4j 引入lombok包 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version><scope>provided</scope> </dependency>引入log4j相关api <dependency…...
静态网页应用开发环境搭建实战教程
1. 前言 静态网页开发是前端工程师的基础技能之一,无论是个人博客、企业官网还是简单的Web应用,都离不开HTML、CSS和JavaScript。搭建一个高效的开发环境,能够极大提升开发效率,减少重复工作,并优化调试体验。 本教程…...
AP 场景架构设计(一) :OceanBase 读写分离策略解析
说明:本文内容对应的是 OceanBase 社区版,架构部分不涉及企业版的仲裁副本功能。OceanBase社区版和企业版的能力区别详见: 官网链接。 概述 当两种类型的业务共同运行在同一个数据库集群上时,这对数据库的配置等条件提出了较高…...
未来村庄智慧灯杆:点亮乡村智慧生活
在乡村振兴与数字乡村建设的时代进程中,未来村庄智慧灯杆凭借其多功能集成与智能化特性,已成为乡村基础设施建设领域的崭新焦点,为乡村生活带来了前所未有的便利,推动着乡村生活模式的深刻变革。 多功能集成:一杆多能…...
MySQL基础语法DDLDML
目录 #1.创建和删除数据库 #2.如果有lyt就删除,没有则创建一个新的lyt #3.切换到lyt数据库下 #4.创建数据表并设置列及其属性,name是关键词要用name包围 编辑 #5.删除数据表 #5.查看创建的student表 #6.向student表中添加数据,数据要与列名一一对应 #7.查询studen…...
利用 VSCode 配置提升 vibe coding 开发效率
利用 VSCode 配置提升 vibe coding 开发效率 Vibe Coding(氛围编程)是一种基于AI的编程方法,其核心在于通过自然语言描述软件需求,再由大规模语言模型(LLM)自动生成代码,从而实现对传统手写编程…...
使用 Chromedp 监听网页请求和响应
使用 Chromedp 监听网页请求和响应 在进行网络爬虫的时候,有很多网站都有反爬机制,比如你想抓点数据,结果发现每次请求都带一堆奇奇怪怪的参数 —— 什么 timestamp 签名、AES 加密的字段,还有各种 Token 令牌,跟密码…...
AB包介绍及导出工具实现+AB包资源简单加载
Resource原理 项目中建立Resources目录,资源导入内部 生成项目包 资源文件存储路径 结论:存储在Resources下的资源,最终会存储在游戏的主体包中,发送给用户,手机系统上,如果需要做资源的更新,是…...
TCP/IP协议簇
文章目录 应用层http/httpsDNS补充 传输层TCP1. 序列号与确认机制2. 超时重传3. 流量控制(滑动窗口机制)4. 拥塞控制5. 错误检测与校验6. 连接管理总结 网络层ARP**ARP 的核心功能**ARP 的工作流程1. ARP 请求(Broadcast)2. ARP 缓…...
vector的模拟实现01
文章目录 vector的模拟实现构造函数析构函数迭代器容量sizecapacityreverse 遍历下标[] 修改push_backpop_backinsert 结语 我们大家有又见面了,给生活加点</font color red>impetus!!开启今天的编程之路 今天我们来学习vector。了解一…...
信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport
【题目链接】 ybt 1609:【例 4】Cats Transport 洛谷 CF311B Cats Transport 【题目考点】 1. 动态规划:斜率优化动规 【解题思路】 解法1:设a点的前缀和 输入的 d d d序列是从 d 2 d_2 d2到 d n d_n dn,共n-1个数字。人…...
shared_ptr和 weak_ptr的详细介绍
关于 shared_ptr 和 weak_ptr 的详细介绍及使用示例: 1. shared_ptr(共享所有权智能指针) 核心特性 引用计数:记录当前有多少个 shared_ptr 共享同一个对象。自动释放:当引用计数归零时,自动释放对象内存…...
electron打包vue2项目流程
1,安装一个node vue2 的项目 2,安装electron: npm install electron -g//如果安装还是 特比慢 或 不想安装cnpn 淘宝镜像查看是否安装成功:electron -v 3,进入到项目目录:cd electron-demo 进入项目目录…...
Baklib驱动企业知识管理数字化转型
Baklib驱动知识资产激活 在信息碎片化与数据爆炸的产业环境下,企业知识中台正成为重构组织智慧的核心枢纽。Baklib通过构建全生命周期知识管理模型,将分散于邮件、文档及协作系统的非结构化数据转化为可检索、可分析的标准化资产。其内置的智能分类引擎…...
Elasticsearch 高级
Elasticsearch 高级 建议阅读顺序: Elasticsearch 入门Elasticsearch 搜索Elasticsearch 搜索高级Elasticsearch高级(本文) 1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个…...
1--当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南(知识点讲解版)
当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南 引言:论暴力破解的哲学意义 “世界上本没有漏洞,密码设得简单了,便成了漏洞。” —— 鲁迅(并没有说过) 想象你是个不会撬锁的小偷,面…...
jdk 支持路线图
https://www.oracle.com/java/technologies/java-se-support-roadmap.html 按照路线图得知,在2025.09 发布openjdk 25,是一个LTS版本。...
VsCode启用右括号自动跳过(自动重写) - 自录制gif演示
VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号,输入完左括号的内容后,是按→跳过右括号还是按)跳过右括号呢? for (int i 0; i < a.s…...
Android设计模式之模板方法模式
一、定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二、结构: AbstractClass抽象类:定义算法的骨架,包含模板方法和若干…...
纯个人整理,蓝桥杯使用的算法模板day1(dfs、bfs)
算法索引 dfs(深度优先搜索)bfs(广度优先搜索)迷宫树结构 dfs(深度优先搜索) 功能: 适合搜索所有的解 代码模板: class Solution{public void dfs(int[][] graph, int i, int j){i…...
【第34节】windows原理:PE文件的导出表和导入表
目录 一、导出表 1.1 导出表概述 1.2 说明与使用 二、导入表 2.1 导入表概述 2.2 说明与使用 一、导出表 1.1 导出表概述 (1)导出行为和导出表用途:PE文件能把自身的函数、变量或者类,提供给其他PE文件使用,这…...
Spring Boot事务管理详解(附银行转账案例)
一、事务基础概念 事务的ACID特性: 原子性(Atomicity):操作要么全部成功,要么全部失败一致性(Consistency):数据在事务前后保持合法状态隔离性(Isolation)&…...
(头歌作业—python)3.2 个人所得税计算器(project)
第1关:个人所得税计算器 任务描述 本关任务:编写一个个人所得税计算器的小程序。 相关知识 个人所得税缴纳标准 2018 年 10 月 1 日以前,个税免征额为 3500 元/月,调整后,个税免征额为 5000 元/月, 7 级超…...
在一个scss文件中定义变量,在另一个scss文件中使用
_variables.scss文件 : $line-gradient-init-color: linear-gradient(90deg, #8057ff 0%, #936bff 50%, #b892ff 100%); $line-gradient-hover-color: linear-gradient(90deg, #936bff 0%, #b892ff 50%, #f781ce 100%); $line-gradient-active-color: linear-gradient(90deg, …...
【计网】网络交换技术之电路交换(复习自用)
复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 1.电路交换定义 电路交换是一种通信方法,在通信开始之前,源和目的地之间建立一条专用的物理路径…...
MacOS 安装open webui
open-webui 不是一个 Python 包,所以 pip install open-webui 会失败。它是一个独立的 Web UI 应用,通常通过 Docker 或 手动构建 来运行。 如何正确安装 Open WebUI? 你可以选择 Docker 方式(推荐)或 手动安装。 方法…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌套表格拖拽排序
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌…...
开启ipv6与关闭的区别
在运行P2P CDN时,开启IPv6与关闭IPv6存在以下核心区别,需从技术、合规、运营等维度综合评估: 一、性能与效率 开启IPv6的优势 更大地址空间:IPv6支持海量设备接入,解决IPv4地址枯竭问题,便于P2P CDN节点扩…...
Redis + Caffeine多级缓存电商场景深度解析
Redis Caffeine多级缓存 Redis Caffeine多级缓存电商场景深度解析一、实施目的二、具体实施2.1 架构设计2.2 组件配置2.3 核心代码实现 三、实施效果3.1 性能指标对比3.2 业务指标改善3.3 系统稳定性 四、关键策略4.1 缓存预热4.2 一致性保障4.3 监控配置Prometheus监控指标 …...