golang格式化输入输出
fmt包使用类似于C的printf和scanf的函数实现格式化I/O
1输出格式化
一般的:
| 动词 | 效果 | 解释 |
|---|---|---|
| %v | [1 -23 3]、[1 -23 3]、&{sdlkjf 23} | 以默认格式显示的值,与bool(%t)、int, int8 etc(%d)、uint, uint8 etc(%d)、float32, complex64, etc(%g)、string(%s)、chan(%p)、pointer(%p )等效 |
| %+v | [1 -23 3]、[1 -23 3]、&{Name:sdlkjf Age:23} | 打印结构时添加字段名称 |
| %#v | [3]int{1, -23, 3}、[]int{1, -23, 3}、&main.Student{Name:“sdlkjf”, Age:23} | 值的 Go 语法表示(浮点无穷大和 NaN 打印为 ±Inf 和 NaN) |
| %T | [3]int、[]int、*main.Student | %T 值类型的 Go 语法表示 |
| %% | %%!(EXTRA int=1)、%%!(EXTRA [3]int=[1 -23 3])、%%!(EXTRA []int=[1 -23 3])、%%!(EXTRA *main.Student=&{sdlkjf 23}) | 文字百分号;不消耗任何值 |
布尔:
| 动词 | 效果 | 解释 |
|---|---|---|
| %t | true、false | 单词 true 或 false |
整形:
| 动词 | 效果 | 解释 |
|---|---|---|
| %d | 5 6 7 8 -9 10 11 12 13 14 | 十进制 |
| %+d | +5 +6 +7 +8 -9 +10 +11 +12 +13 +14 | 显示正负号的十进制 |
| %4d | - 5 6 7 8 -9 10 11 12 13 14- | 宽度为4,右对齐 |
| %-4d | -5 6 7 8 -9 10 11 12 13 14 - | 宽度为4,左对齐 |
| %b | 101 110 111 1000 -1001 1010 1011 1100 1101 1110 | 二进制 |
| %o | 5 6 7 10 -11 12 13 14 15 16 | 八进制 |
| %O | 0o5 0o6 0o7 0o10 -0o11 0o12 0o13 0o14 0o15 0o16 | 前缀为 0o的八进制 |
| %x | 5 6 7 8 -9 a b c d e | 十六进制,af 为小写字母 |
| %X | 5 6 7 8 -9 A B C D E | 十六进制,AF 为大写字母 |
| %U | U+0005 U+0006 U+0007 U+0008 U+FFFFFFFFFFFFFFF7 U+000A U+000B U+000C U+000D U+000E | Unicode 格式:U+1234;与“U+%04X”相同 |
| %q | ‘\x05’ ‘\x06’ ‘\a’ ‘\b’ ‘�’ ‘\n’ ‘\v’ ‘\f’ ‘\r’ ‘\x0e’ | 使用 Go 语法安全转义的单引号字符文字 |
| %c | (输出为空,都是特殊字符) | 相应 Unicode 代码点所表示的字符 |
浮点和复数:
| 动词 | 效果 | 解释 |
|---|---|---|
| %f | 2.230000 5.780000 | 有小数点但没有指数,例如 123.456 |
| %.4f | 2.2300 5.7800 | 有小数点但没有指数,精度为4 |
| %9f | - 2.230000 5.780000- | 有小数点但没有指数,宽度为9,右对齐 |
| %9f | - 2.230000 5.780000- | 有小数点但没有指数,宽度为9,右对齐 |
| %9.f | - 2 6- | 有小数点但没有指数,宽度为9,右对齐,精度为0 |
| %9.4f | - 2.2300 5.7800- | 有小数点但没有指数,宽度为9,右对齐,精度为4 |
| %F | 2.230000 5.780000 | %F 与 %f 同义 |
| %b | 9353298p-22 6507701461550367p-50 | 无小数的科学计数法,指数为 2 的幂,与 strconv.FormatFloat 类似,但格式为 ‘b’,例如 -123456p-78 |
| %e | 2.230000e+00 5.780000e+00 | 科学计数法,例如 -1.234456e+78 |
| %E | 2.230000E+00 5.780000E+00 | 科学计数法,例如 -1.234456E+78 |
| %g | 2.23 5.78 | 表示大指数,否则为 %f |
| %e | 2.230000e+00 5.780000e+00 | 表示大指数,否则为 %f |
| %G | 2.23 5.78 | 表示大指数,否则为 %F |
| %E | 2.230000E+00 5.780000E+00 | 表示大指数,否则为 %F |
| %x | 0x1.1d70a4p+01 0x1.71eb851eb851fp+02 | 十六进制计数法(指数为 2 的十进制幂),例如 -0x1.23abcp+20 |
| %X | 0X1.1D70A4P+01 0X1.71EB851EB851FP+02 | 大写十六进制计数法,例如 -0X1.23ABCP+20 |
字符串和字节切片:
| 动词 | 效果 | 解释 |
|---|---|---|
| %s | sdlkfjasdfja HelloWord | 字符串或切片的未解释字节 |
| %q | “sdlkfjasdfja” “HelloWord” | 使用 Go 语法安全转义的双引号字符串 |
| %x | 73646c6b666a617364666a61 48656c6c6f576f7264 | 以 16 为基数,小写,每个字节两个字符 |
| %X | 73646C6B666A617364666A61 48656C6C6F576F7264 | %X 以 16 为基数,大写,每个字节两个字符 |
| %p | 0xc000092020 0xc000092030 | 以 16 进制表示的第 0 个元素的地址,以 0x 开头 |
指针:
| 动词 | 效果 | 解释 |
|---|---|---|
| %p | 0xc000092020 0xc000092030 | 以 16 为基数,以 0x 为前导 |
| %b | 1100000000000000000010010010000000100000 1100000000000000000010010010000000110000 | 二进制 |
| %d | 824634318880 824634318896 | 十进制 |
| %o | 14000002220040 14000002220060 | 八进制 |
| %x | c000092020 c000092030 | 十六进制小字母 |
| %X | C000092020 C000092030 | 十六进制大字母 |
其他标识:
| 动词 | 解释 |
|---|---|
| ‘+’ | 总是为数值打印符号;保证 %q 仅输出 ASCII 格式(%+q) |
| ‘-’ | 在右侧而不是左侧填充空格(左对齐该字段) |
| ‘#’ | 为二进制添加前导 0b(%#b)、为八进制添加 0(%#o)、为十六进制添加 0x 或 0X(%#x 或 %#X);为 %p 隐藏 0x(%#p);对于 %q,如果 strconv.CanBackquote返回 true,则打印原始(反引号)字符串;总是为 %e、%E、%f、%F、%g 和 %G 打印小数点;不要删除 %g 和 %G 的尾随零;如果字符对 %U(%#U)可打印,则写入例如 U+0078 ‘x’’ (空格)为数字中的省略符号留一个空格(% d);在打印字符串或十六进制切片的字节之间放置空格(%x,%X);没有备用十进制格式,因此 %#d 和 %d 的行为相同 |
| ‘0’ | 用前导零而不是空格填充;对于数字,这会将填充移动到符号后 |
2显示参数索引
在Printf、Sprintf和Fprintf中,每个格式化动词的默认行为是格式化在调用中传递的连续参数。但是,动词前面的符号 [n] 表示将格式化第 n 个 1 索引的参数。宽度或精度的 ‘*’ 之前的相同符号选择保存该值的参数索引。在处理括号表达式 [n] 之后,后续动词将使用参数 n+1、n+2 等,除非另有指示。
fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
//22 11//下面这两个等效
fmt.Printf("%[3]*.[2]*[1]f\n", 12.0, 2, 6)
fmt.Printf("%6.2f\n", 12.0)
//12.00
//12.00
3格式错误
所有错误都以字符串“%!”开头,有时后面跟着一个字符(动词),并以括号内的描述结尾。
//类型错误或动词未知:%!verb(type=value)
fmt.Printf("%d", "hi")
fmt.Println()
//%!d(string=hi)//参数太多:%!(EXTRA type=value)
fmt.Printf("hi", "guys")
fmt.Println()
//hi%!(EXTRA string=guys)//参数太少:%!verb(MISSING)
fmt.Printf("hi%d\n")
fmt.Println()
//hi%!d(MISSING)//宽度或精度非整数:%!(BADWIDTH) 或 %!(BADWIDTH)
fmt.Printf("%*s", 4.5, "hi")
fmt.Println()
//%!(BADWIDTH)hi
fmt.Printf("%.*s", 4.5, "hi")
fmt.Println()
//%!(BADPREC)hi//参数索引无效或使用不正确:%!(BADINDEX)
fmt.Printf("%*[2]d", 7)
fmt.Println()
//%!d(BADINDEX)
fmt.Printf("%.[2]d", 7)
fmt.Println()
//%!d(BADINDEX)
4输入输出
| 函数名 | 参数 | 返回值 | 解释 |
|---|---|---|---|
| Fprint | w io.Writer, a …any | n int, err error | Fprintf 根据格式说明符格式化并写入 w。它返回写入的字节数和遇到的任何写入错误。 |
| Fprintf | w io.Writer, format string, a …any | n int, err error | Fprintf 根据格式说明符格式化并写入 w。它返回写入的字节数和遇到的任何写入错误。 |
| Fprintln | w io.Writer, a …any | n int, err error | Fprintln 使用其操作数的默认格式进行格式化并写入 w。操作数之间始终添加空格并附加换行符。它返回写入的字节数和遇到的任何写入错误。 |
| Fscan | r io.Reader, a …any | n int, err error | Fscan 扫描从 r 读取的文本,将连续的空格分隔值存储到连续的参数中。换行符算作空格。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。 |
| Fscanf | r io.Reader, a …any | n int, err error | n int , err error |
| Fscanln | r io . Reader , a … any | n int , err error | Fscanln 与Fscan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。返回值n是变量数 |
| Fscanln | r io . Reader , a … any | n int , err error | Fscanln 与Fscan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。返回值n是变量数 |
| a … any | n int,err error | 使用默认格式打印其操作数的格式并写入标准输出。当操作数都不是字符串时,会在操作数之间添加空格。它返回写入的字节数和遇到的任何写入错误。 | |
| Println | a … any | n int,err error | Println 使用其操作数的默认格式进行格式化并写入标准输出。操作数之间始终添加空格并附加换行符。它返回写入的字节数和遇到的任何写入错误。 |
| Scan | a … any | n int,err error | Scan 扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中。换行符算作空格。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。 |
| Scanf | format string, a …any | n int, err error | Scanf 扫描从标准输入读取的文本,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。输入中的换行符必须与格式中的换行符匹配。一个例外:动词 %c 始终扫描输入中的下一个符文,即使它是空格(或制表符等)或换行符。 |
| Scanln | a …any | n int, err error | Scanln 与Scan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。 |
| Sprint | a …any | string | Sprintf 根据格式说明符进行格式化并返回结果字符串。 |
| Sprintf | format string, a …any | string | Sprintf 根据格式说明符进行格式化并返回结果字符串。 |
| Sprintln | a …any | string | Sprintln 使用其操作数的默认格式进行格式化并返回结果字符串。操作数之间始终添加空格并附加换行符。 |
| Sscan | str string , a … any | n int , err error | Sscan 扫描参数字符串,将连续的空格分隔值存储到连续的参数中。换行符算作空格。它返回成功扫描的项目数。如果该数量小于参数数量,err 将报告原因。 |
| Sscanf | str string, format string, a …any | n int , err error | Sscanf 扫描参数字符串,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功解析的项目数。输入中的换行符必须与格式中的换行符匹配。 |
| Sscanf | str string, format string, a …any | n int , err error | Sscanf 扫描参数字符串,将连续的空格分隔值存储到由格式确定的连续参数中。它返回成功解析的项目数。输入中的换行符必须与格式中的换行符匹配。 |
| Sscanln | str string,a … any | n int , err error | Sscanln 与Sscan类似,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或 EOF。 |
| Format | f State , verb runey | - | 该实现控制如何解释State和 rune,并可能调用Sprint或Fprint (f) 等来生成其输出。 |
| GoStringer | - | string | 该方法定义该值的 Go 语法。GoString 方法用于打印作为操作数传递给 %#v 格式的 |
| ReadRune | - | r rune , size int , err error | ReadRune 从输入中读取下一个符文(Unicode 代码点)。 如果在 Scanln、Fscanln 或 Sscanln 期间调用,ReadRune() 将在返回第一个 ‘\n’ 或读取超出指定宽度后返回 EOF。 |
| UnreadRune | - | error | 导致下一次调用ReadRune返回相同的符文。 |
| SkipSpace | - | - | SkipSpace跳过输入中的空格。新线路得到适当处理,用于正在执行的操作;请参阅软件包文档,了解更多信息。 |
| Token | skipSpace bool, f func(rune) bool | token []byte, err error | 如果skipSpace为真,则Token跳过输入中的空格,然后返回满足f©的Unicode码点c的运行。如果f为零!unicode。使用IsSpace©;也就是说,令牌将包含非空格字符。对新管线进行适当处理,以适应正在进行的操作;有关更多信息,请参阅软件包文档。返回的切片指向共享数据,这些数据可能会被下一次调用Token、使用ScanState作为输入调用Scan函数或调用Scan方法返回时覆盖。 |
| Width | - | wid int, ok bool | Width返回宽度选项的值以及是否已设置。单位是Unicode码位。 |
| Read | buf []byte | n int, err error | 因为ReadRune是由接口实现的,所以扫描例程永远不应该调用Read,有效的ScanState实现可能会选择始终从Read返回错误。 |
| Scan | state ScanState, verb rune | error | Scanner 由具有 Scan 方法的任何值实现,该方法扫描输入以查找值的表示形式并将结果存储在接收器中,接收器必须是指针才有用。对于实现它的Scan、Scanf或Scanln的任何参数,都会调用 Scan 方法。 |
| Write | b []byte | n int, err error | Write是调用以发出要打印的格式化输出的函数。 |
| Width | - | wid int, ok bool | Width返回宽度选项的值以及是否已设置。 |
| Precision | - | prec int, ok bool | Precision返回精度选项的值以及是否已设置。 |
| Flag | c int | bool | Flag报告是否已设置标志c(一个字符)。 |
| String | - | string |
测试代码
相关文章:
golang格式化输入输出
fmt包使用类似于C的printf和scanf的函数实现格式化I/O 1输出格式化 一般的: 动词效果解释%v[1 -23 3]、[1 -23 3]、&{sdlkjf 23}以默认格式显示的值,与bool(%t)、int, int8 etc(%d)、uint, uint8 et…...
Jenkins基于tag的构建
文章目录 Jenkins参数化构建设置设置gitlab tag在工程中维护构建的版本按指定tag的版本启动服务 Jenkins参数化构建设置 选择参数化构建: 在gradle构建之前,增加执行shell的步骤: 把新增的shell框挪到gradle构建之前, 最后保存 …...
性能设计模式
class Singleton { public: static Singleton& getInstance() {static Singleton instance; // 局部静态变量return instance; } private:Singleton() {}Singleton(const Singleton&) delete; // 禁止拷贝Singleton& operator(const Singleton&) delete; // …...
Android 热点分享二维码功能简单介绍
Android 热点分享二维码 文章目录 Android 热点分享二维码一、前言二、热点二维码1、热点分享的字符串2、代码中热点字符串拼接和设置示例3、一个图片示例 三、其他1、Android 热点分享二维码小结2、Android11 设置默认热点名称和热点密码、密码长度 一、前言 比较新的Android…...
SIEM之王,能否克服创新者的窘境?
《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…...
(JAVA)浅尝关于 “栈” 数据结构
1. 栈的概述: 1.1 生活中的栈 存储货物或供旅客住宿的地方,可引申为仓库、中转站。例如酒店,在古时候叫客栈,是供旅客休息的地方,旅客可以进客栈休息,休息完毕后就离开客栈 1.2计算机中的栈 将生活中的…...
【前端】ES13:ES13新特性
文章目录 1 类新增特性1.1 私有属性和方法1.2 静态成员的私有属性和方法1.3 静态代码块1.4 使用in来判断某个对象是否拥有某个私有属性 2 支持在最外层写await3 at函数来索引元素4 正则匹配的开始和结束索引5 findLast() 和 findLastIndex() 函数6 Error对象的Cause属性 1 类新…...
vuepress 浏览器加载缓存,总是显示旧页面,无法自动刷新数据的解决方法
vuepress 采用多页面形式,每个md文件在打包时,都会被转为一个html页面;而浏览器默认会缓存页面,导致更新的页面必须手动刷新才行 对于更新较为频繁的文档 全局可在config.js里设置 参考文档: https://vuepress.github.io/zh/ref…...
如何使用代理IP解决反爬虫问题
在网络爬虫的世界里,反爬虫机制就像是守卫城池的士兵,时刻准备着抵御外来的“入侵者”。为了突破这些守卫,代理IP就像是你的隐形斗篷,帮助你在网络世界中自由穿梭。今天,我们就来聊聊如何使用代理IP解决反爬虫问题。 …...
QT学习笔记之绘图
或许有人会等你到天黑,但是你不该在天黑后再找他(她)。 1.绘图事件 在ui文件中添加一个按钮,同时在资源文件中添加一个名字为1.jpg的图片。 widget.cpp #include "widget.h" #include "ui_widget.h" #incl…...
大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
基于QT的C++中小项目软件开发架构源码
描述 基于QT信号槽机制实现类之间的交互调用通信,适用于使用不同枚举作为消息交互的类型场景,支持附带任意参数,代码使用方式参考前一篇文章 特性 代码简洁,不超过100行仅需包含一个头文件Communicator.h,需要通信的…...
self-supervised, weakly supervised, and supervised respectively区别
Self-supervised learning(自监督学习)、weakly supervised learning(弱监督学习)和supervised learning(监督学习)是机器学习中的不同学习范式,它们的主要区别如下: 一、监督学习&…...
安卓好软-----手机屏幕自动点击工具 无需root权限
工具可以设置后自动点击屏幕。可以用于一些操作。例如自动刷视频等等哦 工具介绍 一款可以帮你实现自动操作的软件。软件中你可以根据实际需要设置点击位置,可以是屏幕上的特定位置,也可以是按钮或控件。功能非常强大,但是操作非常简单&…...
【Redis】主从复制(下)--主从复制原理和流程
文章目录 主从复制原理主从节点建立复制流程图数据同步 psyncpsync的语法格式 psync运行流程全量复制全量复制的流程全量复制的缺陷有磁盘复制 vs 无磁盘复制 部分复制部分复制的流程复制积压缓冲区 实时复制 主从复制原理 主从节点建立复制流程图 保存主节点的信息从节点(sla…...
Pencils Protocol上线 Vaults 产品,为 $DAPP 深入赋能
Pencils Protocol 是 Scroll 生态一站式综合收益平台,该平台以 DeFi 功能作为抓手,基于 Farming、Vaults、Auction 等功能不断向 LRT、LaunchPad、AI、FHE、RWA 等领域深入的拓展。 近期 Pencils Protocol 生态不断迎来重磅进展,一个是 $DAPP…...
uni-app+vue3+pina实现全局加载中效果,自定义全局变量和函数可供所有页面使用
首先自定义一个加载中组件 ccloading.vue <template><view class"request-loading-view" v-if"loadingShow"><view class"loading-view"><image class"loading-img" :src"loading" mode"aspectF…...
基于SSM+小程序的在线课堂微信管理系统(在线课堂1)(源码+sql脚本+视频导入教程+文档)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 &emsp1、管理员实现了首页、个人中心、用户管理、课程分类管理、课程信息管理、课程订阅管理、课程视频管理、公告栏管理、留言板管理、系统管理。 2、用户实现了首页、课程信息、公…...
Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用
文章目录 前言代码实现运行效果技术分析 前言 同事有个需求 授权获取用户头像 和 昵称 。之前做过线上小程序发版上线流程 就实现了下 最新的方法和 api 有些变化 记录下 代码实现 先直接上代码 <template><view class"container"><buttonclass&qu…...
儿童手抄报模板-200个(家有神兽必备)
在这个充满色彩与想象的世界里,每一位小朋友都是一位小小艺术家和梦想家。作为家长或老师,我们总是希望能为他们的学习生活增添一抹亮色,激发他们的创造力与探索欲。今天,就为大家带来一份超级实用的资源——儿童手抄报模板-200个…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...
基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...
Linux信号保存与处理机制详解
Linux信号的保存与处理涉及多个关键机制,以下是详细的总结: 1. 信号的保存 进程描述符(task_struct):每个进程的PCB中包含信号相关信息。 pending信号集:记录已到达但未处理的信号(未决信号&a…...
