Go:基本数据
文章目录
- 整数
- 浮点数
- 复数
- 布尔值
- 字符串
- 字符串字面量
- Unicode
- UTF - 8
- 字符串和字节 slice
- 字符串和数字的相互转换
- 常量
- 常量生成器 iota
- 无类型常量
整数
分类
- Go 的整数类型按大小分有 8 位、16 位、32 位、64 位 ,同时有符号整数包括
int8
、int16
、int32
、int64
,无符号整数包括uint8
、uint16
、uint32
、uint64
。int
和uint
大小依平台而定,可能是 32 位或 64 位 。 rune
是int32
同义词,用于指明 Unicode 码点 ;byte
是uint8
同义词,强调原始数据 。uintptr
用于底层编程存放指针,大小不明确 。
范围
- 有符号整数以补码表示,最高位为符号位,
n
位有符号整数取值范围是-2^(n - 1)
到2^(n - 1) - 1
;无符号整数取值范围是0
到2^n - 1
,如int8
取值范围是-128
到127
,uint8
取值范围是0
到255
。
运算
- 二元操作符:涵盖算术、逻辑和比较运算,按优先级分五级,同级别运算满足左结合律 。算术运算符(
+
、-
、*
、/
、%
)中,取模运算%
仅用于整数,除法运算/
在整数相除时结果为整数 。运算结果超出类型范围会溢出,溢出高位部分丢弃 。比较运算符用于比较同类型整数,结果为布尔型 。 - 一元操作符:有一元加法(
+x
,等同于0 + x
)和一元减法(-x
,等同于0 - x
) 。 - 位运算符:包括
&
(位运算 AND )、|
(位运算 OR )、^
(位运算 XOR )、&^
(位清空 AND NOT )、<<
(左移 )、>>
(右移 ) 。位运算符对操作数逐位运算,不涉及算术进位或正负号 。左移运算x << n
等价于x
乘以2^n
,右移运算x >> n
等价于x
除以2^n
向下取整 ,有符号整数右移按符号位填充 。
类型转换
- 不同整数类型间转换需显式转换 。算术和逻辑(不含移位 )二元运算符要求操作数类型相同 ,否则需转换为同一类型 。整数与浮点型相互转换可能改变值或损失精度 ,浮点型转整型会舍弃小数部分 。
- 底层数据结构相同但数据名称不同也需类型转化,如
tpye MyInt int
,MyInt
类型数据无法赋值给int
类型数据。
Go中无隐式类型的转化。
格式化输出
- 整数可写成十进制、八进制(以
0
开头 )、十六进制(以0x
或0X
开头 ) 。使用fmt
包输出整数时,可用%d
(十进制 )、%o
(八进制 )、%x
(十六进制 )等谓词指定进制 。
浮点数
- Go 语言有
float32
和float64
两种浮点数类型,算术特性遵循 IEEE 754 标准 。float32
有效数字约 6 位,float64
约 15 位 ,应优先选用float64
,因float32
运算易累积误差 。
范围与表示
math
包给出浮点值极限,math.MaxFloat32
约为3.4e38
,math.MaxFloat64
约为1.8e308
,最小正浮点数分别约为1.4e - 45
和4.9e - 324
。浮点数在源码中可写成小数(小数点前后数字可省略 )或科学记数法(如6.02214129e23
) 。- 通过
fmt.Printf
的%g
谓词可输出浮点值,也可用%e
(有指数 )或%f
(无指数 ) 。
特殊值
math
包含创建和判断 IEEE 754 标准特殊值(正无穷大、负无穷大、NaN )的函数 。math.IsNaN
判断参数是否为非数值,math.NaN
返回非数值 。与 NaN 比较除!=
外总不成立 。
运算与应用
- 函数返回浮点型且可能出错时,最好单独报错 。
复数
- Go 语言有
complex64
和complex128
两种复数类型,分别由float32
和float64
构成 。
操作函数
complex
函数用于根据给定实部和虚部创建复数,如var x complex128 = complex(1, 2)
创建复数1 + 2i
。real
函数提取复数实部,imag
函数提取虚部,如real(x*y)
、imag(x*y)
。
表示
- 在源码中,浮点数或十进制整数后紧跟
i
表示虚数(实部为 0 ),如3.141592i
、2i
,复数常量可与其他常量相加,如1 + 2i
。可用==
和!=
判断复数是否相等,需实部和虚部都相等 。 math/cmplx
包提供复数运算库函数,如cmplx.Sqrt(-1)
计算复数平方根 。
布尔值
bool
型值即布尔值,只有true
(真 )和false
(假 )两种取值 。if
和for
语句中的条件以及比较操作符(如==
、<
)的运算结果都是布尔值 。一元操作符!
表示逻辑取反,如!true
为false
,且(!true==false)==true
。代码风格上,x==true
常简化为x
。
运算规则
- 布尔值可通过
&&
(逻辑与 )和||
(逻辑或 )组合运算,存在短路行为:当&&
左边操作数为false
,或||
左边操作数为true
时,右边操作数不会计算 。例如s != "" && s[0] == 'x'
,若s
为空字符串,不会计算s[0]
。 &&
和||
优先级高于==
和<
,形如'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9'
这样的条件表达式无需加括号 。
与C++,Java等,运算规则相同。
与数值的转换
- 布尔值不能隐式转换成数值(如 0 或 1 ),反之亦然 。若需转换,要使用显式
if
语句,如if b { i = 1 }
。
字符串
- 字符串是不可变的字节序列,可包含任意数据,主要用于存储人类可读文本,文本字符串按 UTF - 8 编码的 Unicode 码点序列解读 。
操作函数与运算
- 长度获取:内置
len
函数返回字符串字节数,如len("hello, world")
结果为12
。 - 字符访问:通过下标操作
s[i]
获取第i
个字符(0 ≤ i < len(s)
),访问越界会触发宕机异常 。非 ASCII 字符的 UTF - 8 码点可能占多个字节,所以第i
个字节不一定是第i
个字符 。 - 子串生成:用
s[i:j]
生成子字符串,从下标i
(含 )到j
(不含 ),结果长度为j - i
,i
和j
默认值分别为0
和len(s)
,下标越界或j < i
会触发宕机异常 。 - 字符串连接:用加号
+
连接两个字符串生成新字符串,如"goodbye" + s[5:]
。 - 字符串比较:可通过
==
和<
等比较运算符比较,按字节进行字典排序 。
不可变性
- 字符串值不可改变,不能直接修改字符串内部字节,如
s[0] = 'L'
会编译报错 。可通过+=
等方式生成新字符串并赋值给原变量实现拼接等操作 。字符串不可变性使得字符串及其子串可安全共用底层内存,复制和子串生成操作开销低 。
存储方式
字符串字面量
常规字符串字面量
- 形式:带双引号的字节序列,如
"Hello, 世界"
。由于 Go 源文件按 UTF - 8 编码,字符串也按 UTF - 8 解读,可写入 Unicode 码点 。 - 转义序列:以反斜杠
\
开始,用于插入特定字节或表示 ASCII 控制码等,如\a
(“警告” 或响铃 )、\n
(换行符 )、\"
(双引号 )、\\
(反斜杠 )等 。还可包含十六进制(\xhh
,h
为十六进制数字 )或八进制(\ooo
,o
为八进制数字 )转义字符来表示单个字节 。
原生字符串字面量
- 形式:用反引号包裹,如:
const GoUsage = `Go is a tool for manageing Go source code.
Usage:go command [arguments]
...`
- 特性:转义序列不起作用,内容严格按字面写法,包括反斜杠和换行符,可跨多行书写,回车符会被删除以保证字符串在各平台值相同 。适用于正则表达式、HTML 模板、JSON 字面量、命令行提示信息等场景 。
Unicode
从 ASCII 到 Unicode 的演进
-
早期软件主要处理 ASCII 字符集,US - ASCII 码用 7 位表示 128 个字符,包含英文字母、数字、标点等,能满足早期计算机行业需求,但无法支持其他语言的文字体系 。随着互联网发展,数据包含多种语言,ASCII 无法满足需求,于是出现了 Unicode 。
-
定义:Unicode 囊括世界上所有文书体系的字符,给每个字符赋予标准数字,即 Unicode 码点 。
-
Go 语言实现:在 Go 语言中,这些字符记号称为文字符号(
rune
),Unicode
第 8 版定义超 100 种语言文字的 12 万个字符码点 。Go 采用int32
类型保存单个文字符号,rune
是int32
的别名 。可将文字符号序列表示成int32
值序列,即 UTF - 32 或 UCS - 4 编码,每个码点编码长度固定为 32 位 。但这种编码因多数文本是 ASCII 码(每个字符 8 位 ),会造成存储空间浪费,且多数常用字符用 16 位就能容纳。
UTF - 8
编码原理
- UTF - 8 是以字节为单位对 Unicode 码点作变长编码,由 Ken Thompson 和 Rob Pike 发明 。每个文字符号用 1 - 4 个字节表示,ASCII 字符编码占 1 字节,与传统 ASCII 码一致 ;若最高位是 110,编码占 2 个字节;若最高位是 1110,编码占 3 个字节;若最高位是 11110,编码占 4 个字节 。
编码特性
- 紧凑兼容:紧凑且兼容 ASCII,从左向右解码不超过 3 字节就能定位一个字符,能快速搜索字符,无需考虑前文,字符顺序与 Unicode 码点顺序一致,编码本身不会嵌入 NUL 字节 。
- 操作便利:基于 UTF - 8 编码的字符串操作无需解码即可进行,如判断前缀(
HasPrefix
函数 )、后缀(HasSuffix
函数 )、包含子串(Contains
函数 )等 。
转义与码点表示
Unicode 转义符可用于文字符号,码点值小于 256 的可写成单个十六进制数转义形式,更高码点需用\u
或\U
转义 。不同转义序列形式的字符串字面量,实质字符串值相同 。
字符串操作与解码
- 统计与遍历:可使用
unicode/utf8
包中的函数,如RuneCountInString
统计字符串中文字符号数目 。通过for i, r := range s
循环可隐式解码遍历 UTF - 8 编码字符串,对于非 ASCII 文字符号,下标增量大于 1 。 - 显式解码:
utf8.DecodeRuneInString
函数可返回文字符号本身和其按 UTF - 8 编码所占字节数 ,用于显式解码操作 。
类型转换相关
[]rune
转换用于 UTF - 8 编码字符串时,返回其 Unicode 码点序列 。- 将文字符号类型的
slice
转换成字符串,会输出各文字符号的 UTF - 8 编码拼接结果 。 - 整数转换为字符串时,按文字符号类型解读,产生代表该文字符号值的 UTF - 8 编码 。
字符串和字节 slice
标准包功能
- strings 包:提供字符串搜索、替换、比较、修整、切分与连接等操作函数 。
- bytes 包:功能类似 strings 包,用于操作字节 slice(
[]byte
),且提供Buffer
类型,能高效处理字符串构建,避免多次内存分配和复制 。 - strconv 包:用于布尔值、整数、浮点数与字符串间的类型转换,以及字符串添加 / 去除引号等操作 。
- unicode 包:包含判别文字符号值特性(如是否为数字
IsDigit
、字母IsLetter
、大写IsUpper
、小写IsLower
)的函数,还有转换大小写(ToUpper
、ToLower
)的函数,遵循 Unicode 标准 。
函数示例
func main() {fmt.Println(basename2("a/b/c.go"))fmt.Println(basename2("c.d.go"))fmt.Println(basename2("abc"))
}func basename2(s string) string {slash := strings.LastIndex(s, "/")s = s[slash+1:]if dot := strings.LastIndex(s, "."); dot >= 0 {s = s[:dot]}return s
}func basename1(s string) string{for i := len(s) - 1; i >= 0; i-- {if s[i] == '/' {s = s[i + 1:]break;}}for i := len(s) - 1; i >= 0; i-- {if s[i] == '.'{s = s[:i]break}}return s
}
- basename 函数:有两种实现方式,初版独立完成工作,移除字符串中类似文件系统路径的前缀和文件类型后缀 ;简化版利用
strings.LastIndex
函数,更简洁高效 。
字符串与字节 slice 转换
- 字符串和字节 slice 可相互转换,
[]byte(s)
将字符串s
转换为字节 slice ,会分配新字节数组并拷贝内容;string(b)
将字节 sliceb
转换为字符串,会生成副本 。strings 包和 bytes 包有功能对应的实用函数,只是操作对象分别为字符串和字节 slice 。
func main() {fmt.Println(intsToString([]int{1, 2, 3}))
}func intsToString(values []int) string {var buf bytes.Bufferbuf.WriteByte('[')for i, v := range values {if i > 0 {buf.WriteString(", ")}fmt.Fprintf(&buf, "%d", v)}buf.WriteByte(']')return buf.String()
}
- intsToString 函数:将字节 slice 转化为 string。
字符串和数字的相互转换
整数转字符串
- 可使用
fmt.Sprintf
函数,通过格式化谓词(如%d
)将整数转换为字符串,例如x := 123; y := fmt.Sprintf("%d", x)
。 - 也可使用
strconv.Itoa
函数,它专门用于将整数转换为 ASCII 字符串 ,如strconv.Itoa(x)
。 strconv.FormatInt
和strconv.FormatUint
函数可按不同进位制格式化数字 ,如strconv.FormatInt(int64(x), 2)
可将整数按二进制格式输出 。相比之下,fmt.Printf
的%b
、%d
、%o
、%x
等谓词在包含额外信息时更方便 。
字符串转整数
strconv.Atoi
函数用于将表示整数的字符串转换为整型 ,如x, err := strconv.Atoi("123")
。strconv.ParseInt
函数可指定进制和结果匹配的整型大小(第三个参数 ),如y, err := strconv.ParseInt("123", 10, 64)
,结果类型为int64
,可再转换为较小类型 。strconv.ParseUint
用于无符号整数转换 。
输入处理
- 对于字符串和数字混合的单行输入,可尝试用
fmt.Scanf
解释 ,但它在处理不完整或不规则输入时灵活性欠佳 。
常量
- 定义:常量是在编译阶段就能计算出值的表达式,本质属于基本类型(布尔型、字符串、数字 ) 。其声明类似变量,但值恒定,防止程序运行中被意外修改,适合表示数学常量(如圆周率
pi
) 。 - 计算时机:许多常量计算在编译时完成,减少运行时工作量,利于编译器优化 。操作数为常量时,一些运行时才报错的情况(如整数除 0 )编译时就会报错 。常量参与的数学、逻辑、比较运算结果仍是常量,类型转换结果和部分内置函数(
len
、cap
等 )返回值也是常量 。
声明与使用
- 单个常量声明:用
const
关键字,如const pi = 3.14159
。 - 多个常量声明:可在一个
const
声明中定义一系列常量,适用于相关值,如const ( e = 2.71828… pi = 3.14159… )
。 - 在类型声明中使用:常量表达式可用于数组类型长度声明,如
const IPv4Len = 4; var p [IPv4Len]byte
。 - 类型推断:常量声明可指定类型和值,未显式指定类型时,根据右边表达式推断 ,如
const noDelay time.Duration = 0
。 - 复用表达式:同时声明一组常量时,除第一项外,其他项等号右侧表达式可省略,复用前面一项的表达式及其类型 。
常量生成器 iota
iota
是常量生成器,用于创建一系列相关值,在常量声明中,它从 0 开始取值,逐项加 1 。
应用示例
type Weekday int
const (Sunday Weekday = iotaMondayTuesdayWednesdayThursdayFridaySaturday
)
- 枚举类型定义:以
time
包中Weekday
类型定义为例,声明每周 7 天为Weekday
类型常量,从Sunday
开始,Sunday
值为 0 ,Monday
值为 1 ,依此类推 。
type Flags uint
cosnt (FlagUp Flags = 1 << itoaFlagBroadcastFlagLoopbackFlagPointToPointFlagMulticast
)func IsUp(v Flags) bool { return v&FlagUp == FlagUp }
func TurnDown(v *Flags) { *v &^= FlagUp }
func SetBroadcast(v *Flags) { *v |= FlagBroadcast }
func IsCast(v Flags) bool { return v&(FlagBroadcast|FlagMulticast) != 0}
- 位标志定义:借助
net
包代码,定义Flags
类型常量,如FlagUp = 1 << iota
,随着iota
递增,每个常量按1 << iota
赋值,等价于 2 的连续次幂,用于表示不同的位标志,如FlagUp
(向上 )、FlagBroadcast
(支持广播访问 )等 ,还有相关函数用于判定、设置或清除这些位标志 。
const (_ = 1 << (10 * itoa)KiBMiBGiBTiBPiBEiBZiBYiB
)
- 幂值定义:声明表示 1024 的幂的常量,如
const { _ = 1 << (10 * iota); KiB; MiB; … }
,iota
递增,对应值为 1024 的不同幂次 。
局限性
- 由于 Go 语言不存在指数运算符,
iota
无法直接生成 1000 的幂(如KB
、MB
) 。
无类型常量
- Go 语言中许多常量不从属具体类型,编译器将其表示为精度更高的值(算术精度可达 256 位 ),有 6 种无类型常量,即无类型布尔、无类型整数、无类型文字符号、无类型浮点数、无类型复数、无类型字符串 。
优势
-
可暂时维持高精度,能用于更多表达式且无需转换类型 。如计算中值过大无法用常规整型存储的常量,可参与运算;
math.Pi
作为无类型常量可用于需浮点值或复数的地方,若一开始确定类型(如float64
),会导致精度下降 。 -
类型推断:常量字面量类型由语法决定,如
0
(无类型整数 )、0.0
(无类型浮点数 )、0i
(无类型复数 )、'\u0000'
(无类型文字符号 ) 。常量除法中,操作数写法影响结果类型(如整数除法结果可能是整型,浮点数除法结果是浮点型 ) 。 -
类型转换:无类型常量声明为变量或给变量赋值时,会隐式转换成变量类型 。显式或隐式转换时,目标类型要能表示原值,实数和复数允许舍入取整 。变量声明未显式指定类型时,无类型常量会隐式转换为变量默认类型 。无类型整数可转成
int
,无类型浮点数和复数分别转成float64
和complex128
。要将变量转成不同类型,需显式转换无类型常量或在声明时指明类型 。
接口值与默认类型
- 将无类型常量转换为接口值时,其默认类型决定接口值动态类型,如
fmt.Printf("%T\n", 0)
输出int
,fmt.Printf("%T\n", 0.0)
输出float64
等 。
浮点型 ) 。
- 类型转换:无类型常量声明为变量或给变量赋值时,会隐式转换成变量类型 。显式或隐式转换时,目标类型要能表示原值,实数和复数允许舍入取整 。变量声明未显式指定类型时,无类型常量会隐式转换为变量默认类型 。无类型整数可转成
int
,无类型浮点数和复数分别转成float64
和complex128
。要将变量转成不同类型,需显式转换无类型常量或在声明时指明类型 。
接口值与默认类型
- 将无类型常量转换为接口值时,其默认类型决定接口值动态类型,如
fmt.Printf("%T\n", 0)
输出int
,fmt.Printf("%T\n", 0.0)
输出float64
等 。
参考资料:《Go程序设计语言》
相关文章:
Go:基本数据
文章目录 整数浮点数复数布尔值字符串字符串字面量UnicodeUTF - 8字符串和字节 slice字符串和数字的相互转换 常量常量生成器 iota无类型常量 整数 分类 Go 的整数类型按大小分有 8 位、16 位、32 位、64 位 ,同时有符号整数包括int8、int16、int32、int64 &#…...
金融行业软件介绍
金融,本质为货币资金的融通,是经济活动中至关重要的领域。它围绕货币、信用、利率等核心要素运转,借助银行、证券机构、保险机构等众多主体,在货币市场与资本市场中实现资金的调配与流转,具有优化资源配置、分散风险及…...
Python的那些事第四十九篇:基于Python的智能客服系统设计与实现
基于Python的智能客服系统设计与实现 摘要 随着人工智能技术的飞速发展,智能客服系统逐渐成为企业提升客户服务质量和效率的关键工具。本文详细介绍了基于Python的智能客服系统的设计与实现方案,涵盖了系统架构、核心功能、技术选型及优化建议,旨在为企业构建高效、智能的客…...
vscode报错:unins000.exe 尝试在目标目录创建文件时发生一个错误
打开vscode,报错 这个错误提示表明在卸载或安装 Visual Studio Code 时,系统拒绝访问目标目录中的文件 unins000.exe。以下是解决此问题的有效方法: 检查文件权限 找到文件所在目录(如 D:\software\Microsoft VS Codeÿ…...
当气象水文遇见R语言——破解时空数据的“达芬奇密码“
在气象水文科学领域,数据从来不只是简单的数字阵列。台风路径的时空跳跃、流域径流的非线性涨落、气候要素的混沌演变,这些充满不确定性的自然现象转化为数据时,呈现出多维时空交织的复杂图景。研究人员常常要在TB级遥感数据中捕捉毫米级降水…...
LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】
LEARNING DYNAMICS OF LLM FINETUNING 一句话总结 作者将LLM的学习动力机制拆解成AKG三项,并分别观察了SFT和DPO训练过程中正梯度信号和负梯度信号的变化及其带来的影响,并得到以下结论: SFT通过梯度相似性间接提升无关…...
【射频仿真学习笔记】变压器参数的Mathematica计算以及ADS仿真建模
变压器模型理论分析 对于任意的无源电路或者等效电路,当画完原理图后,能否认为已经知道其中的两个节点?vin和vout之间的明确解析解 是否存在一个通用的算法,将这里的所有元素都变成了符号,使得这个算法本身就是一个函…...
改善 Maven 的依赖性
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项: 还有另一个用例, mvn dependency:analyze 它可…...
循环神经网络 - LSTM 网络的各种变体
前面的博文中,我们了解和学习了长短期记忆网络,本文我们来学习LSTM 网络的各种变体。 目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息.我们可以对门控机制进行改进并获…...
LangGraph 概述
LangGraph 介绍 LangGraph 是 LangChain 框架的扩展,专为创建基于大型语言模型(LLMs)的有状态、多角色应用而设计。它提供了一个灵活的架构,用于构建复杂的多步骤 LLM 应用,其中状态管理和流程控制至关重要。 为什么…...
Linux系统06---信号
目录 信号 1.1 进程间通信方式 1.2 信号的概念 1.3 查看信号 1.4 信号的产生 1.5 信号的处理 信号的 API 函数 2.1 函数名:kill() 2.2 函数名:raise() 2.3 函数名:alarm() 2.4 函数名:pause() 2.5…...
Java 程序调试与生产问题排查工具Arthas
好的,以下是修改后的博客内容,将公司信息替换为通用的占位符: 深入探索 Arthas:Java 程序调试与生产问题排查的利器 在 Java 开发中,调试和诊断问题往往是一个复杂且耗时的过程。Arthas(Alibaba Java Dia…...
PH热榜 | 2025-04-11
1. Voicenotes Pages 标语:如果出版的感觉像是在和朋友聊天呢? 介绍:Voicenotes Pages 是一个极其简单的发布创意和故事的方式。它就像是一个简易的博客或播客,但更容易上手。你只需录制内容,点击发布,就…...
从三围学校项目看:中建海龙智能建造的崛起与突破
在建筑行业迈向智能化、数字化的浪潮里,中建海龙科技有限公司(以下简称“中建海龙”)从中脱颖而出,成为推动智能建造发展的重要力量。凭借深厚的技术积累、创新的理念以及先进的实践,中建海龙正引领着建筑行业的变革&a…...
aviator 自定义表达式
引入依赖 如果你使用的是 Maven 项目,在 pom.xml 中添加以下依赖: <dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>5.3.2</version> </dependency>…...
电商中的购物车(redis的hash类型操作)
购物车样式 ①、创建service-cart模块 spring:profiles:active: devserver:port: 8513 spring:application:name: service-cartcloud:nacos:discovery:server-addr: localhost:8848data:redis:host: localhostport: 6379启动类 SpringBootApplication(excludeDataSourceAutoC…...
Ubuntu 系统错误日志常见问题
一、Ubuntu 系统日志文件位置 1. 核心系统日志 日志文件用途说明/var/log/syslog所有系统级别的日志(包括内核、服务等)/var/log/kern.log内核相关的详细日志(如硬件驱动问题)/var/log/auth.log用户认证日志(SSH登录、sudo权限等)/var/log/dpkg.log软件包安装/卸载日志/…...
《Uniapp-Vue 3-TS 实战开发》TypeScript 泛型详解
泛型(Generics)是 TypeScript 中非常重要的特性,它允许我们创建可重用的组件,这些组件可以支持多种类型,而不会丢失类型安全性。 一、泛型基础 1. 基本概念 泛型允许我们在定义函数、接口或类时不预先指定具体类型,而是在使用时再指定类型。 // 不使用泛型 function …...
mysql 删除表等待
今天有个表加字段,语句是先删除,后重新建,表没有数据 ,但是删除一个表的时候,语句drop table 提示超时 show processlist 后,等待类型是 Waiting for table metadata lock 取消重试几次后仍然是如此…...
如何深入理解protobuf
Protocol Buffers(protobuf)是一种轻便高效的结构化数据存储格式,用于数据序列化和反序列化,具有语言无关、平台无关、可扩展性强等特点,能有效提高数据存储和传输的效率。 一.协议的设计 我们在介绍protobuf之前我们…...
《分布式软总线牵手云服务,拓展应用新维度》
分布式软总线与云服务的融合,正掀起一场前所未有的变革,重塑着我们工作、生活和交互的方式。二者的结合,犹如天作之合,不仅打破了设备与数据之间的壁垒,更开启了一系列令人瞩目的全新应用场景。 分布式软总线…...
ReentrantLock 实现公平锁和非公平锁的原理!
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! 🌟了解 ThreadLocal请看: ThreadLocal有趣讲解,小白也能听懂ÿ…...
算法训练之动态规划(四)——简单多状态问题
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
【JavaScript】错误处理与调试
个人主页:Guiat 归属专栏:HTML CSS JavaScript 文章目录 1. JavaScript 错误处理基础1.1 错误类型1.2 try...catch 语句 2. 错误抛出与自定义错误2.1 throw 语句2.2 自定义错误类型 3. 异步错误处理3.1 Promise 错误处理3.2 async/await 错误处理 4. 调试…...
MySQL 管理与配置:查看端口、修改密码与数据存储位置
1.MySQL查看端口号 show global variables like port; 2.MySQL修改密码 grant all privileges on *.* to root% identified by 你的mysql密码 with grant option;flush privileges; 3.查询 MySQL 数据库的数据存储目录 MySQL 的所有数据库文件、表数据、索引、日志文件等都存…...
(四十二)Dart 中的接口与抽象类
Dart 中的接口与抽象类 Dart 的接口特性 在 Dart 中,接口的实现方式与 Java 有所不同。Dart 没有专门的 interface 关键字来定义接口,而是通过普通类或抽象类来实现接口的功能。以下是 Dart 接口的主要特点: 普通类或抽象类都可以作为接口 …...
Java习题:合并两个有序数组
文章目录 前言一、题目描述二、方法2.1 方法一2.2 方法二 前言 虽然这个题目很简单,但是在使用java语言实现的过程中,存在多种方法这是很有意思的一道题,所以小编在这里写下它的各种方法加深javase语法的学习。 提示:以下是本篇文…...
spm12_fMRI 2*4混合方差分析 Flexible factorial 对比矩阵
实验设计:2*4被试内设计 分析模型:spm 二阶分析中的 Flexible factorial 问题:Flexible factorial交互作用对比矩阵如何编写? 老师:deepseek老师【大神们看看这个矩阵是否可以如下编写?】 以下是来自de…...
力扣第272场周赛
周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 这场周赛是在课堂上模拟的, 总体来说比较简单, 但不幸被老师压力了。以下分享一下我的解题思路 如果你每天没有时间刷题的话, 可以看一下我写的东西, 我尽量讲解的通俗一些, 不会…...
【5】深入学习npm-Nodejs开发入门
深入学习npm npm详解npm的组成-registrynpm的组成-websitenpm的组成-clinpm-confignpm-initnpm-installnpm-startnpm-uninstallnpm-version其他命令 再谈registrypackage.json配置基本结构必填字段可选字段依赖管理其他配置完整配置 node_modules其他 npm详解 我们在前面安装N…...
2025.04.05 广东汕尾两日游记
2025.04.05 广东汕尾两日游记 文章目录 2025.04.05 广东汕尾两日游记一、前言二、我的两日游行程1、行程2、这两天吃喝玩乐的地方 三、其他1、汕尾两日游小结2、汕尾前十景点(1)玄武山旅游区(2)红海湾遮浪旅游区(3&…...
【数学建模】(智能优化算法)鲸鱼优化算法(Whale Optimization Algorithm)详解与应用
鲸鱼优化算法(Whale Optimization Algorithm)详解与应用 文章目录 鲸鱼优化算法(Whale Optimization Algorithm)详解与应用1. 引言2. 算法原理2.1 生物学基础2.2 数学模型[^3]1. 包围猎物阶段2. 气泡网攻击(螺旋更新)3. 随机搜索猎物(全局探索…...
11-Java并发编程终极指南:ThreadLocal与并发设计模式实战
Java并发编程终极指南:ThreadLocal与并发设计模式实战 一、ThreadLocal核心原理剖析 1. 线程本地存储实现机制 #mermaid-svg-EX865K5oO873R6OO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EX865K5o…...
数据库数据恢复——sql server数据库被加密怎么恢复数据?
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。 SQL server数据库数据恢复过程: 1、将所有数据库做完整只读备份。后续所有数据恢…...
0501路由-react-仿低代码平台项目
文章目录 1 react路由1.1 核心库:React Router安装 1.2 基本路由配置路由入口组件定义路由 1.3 导航方式使用 <Link> 组件编程式导航 1.4 动态路由参数定义参数获取参数 1.5 嵌套路由父路由配置子路由占位符 1.6 重定向与404页面重定向404页面 1.7 路由守卫&a…...
C++二分查找
一、模板①:向下取整(mid (l r) >> 1) while (l < r) {int mid l r >> 1; // 等价于 (l r) / 2(向下取整)if (check(mid)) r mid; // 保留左半区else l mid 1; // 舍弃左半区 } 适用场…...
c++将jpg转换为灰度图
c将jpg转换为灰度图 step1:添加依赖 下载这两个文件,放在cpp同一目录下,编译生成 https://github.com/nothings/stb/blob/master/stb_image_write.h https://github.com/nothings/stb/blob/master/stb_image.hstep2:C:\Users\wangrusheng\source\repos…...
react/vue中前端多图片展示页面优化图片加载速度的五种方案
需求背景 在多项目中 例如官网项目中 会出现很多大图片显示的情况 这个时候就会出现图片过大 公司带宽不够之类导致页面加载速度过慢及页面出现后图片仍然占位但并未加载出来 或者因为网络问题导致图片区域黑块等等场景 这个时候我们就要对图片和当前场景进行优化 方案定…...
第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
重要信息 2025年4月25-27日 中国广州 官网: http://www.icetae.com/ 部分 征稿主题 Track 1:电气工程 输配电、电磁兼容、高电压和绝缘技术、电气工程、电气测量、电力电子及其应用、机电一体化、电路与系统、电能质量和电磁兼容性、电力系统及其自…...
Windows 图形显示驱动开发-WDDM 2.0功能_上下文监视
功能概述 上下文监视机制是GPU与CPU协同计算的核心同步技术,通过受监视围栏(Monitored Fence)实现跨硬件单元的高效协调。其核心目标是解决以下场景的同步需求: GPU引擎间同步:例如在多渲染管线中,后处理…...
YOLOv12即插即用---PPA
1.模块介绍 多分支特征提取:PPA 模块采用局部卷积、全局卷积和串行卷积三种并行分支,从多个尺度和层次提取特征,有效保留小目标在多次下采样过程中的关键信息。 特征融合与注意力增强:在特征提取后,PPA 模块引入高效的通道注意力和空间注意力机制,实现自适应特征增强,…...
MySql主从相关概念
想象一下,你的业务飞速增长,用户请求如潮水般涌来,突然数据库主库宕机,数据丢失,服务瘫痪——这简直是开发者的噩梦!MySQL主从复制就像一张安全网,通过主库写、从库读的协作模式,不仅…...
精品推荐-最新大模型MCP核心架构及最佳实践资料合集(18份).zip
精品推荐-最新大模型MCP核心架构及最佳实践资料合集,共18份。 1、2025年程序员必学技能:大模型MCP核心技术.pdf 2、MCP 架构设计剖析:从 Service Mesh 演进到 Agentic Mesh.pdf 3、MCP 架构设计深度剖析:使用 Spring AI MCP 四步…...
Qt模型-视图架构
引言 在GUI开发中,数据与界面的同步一直是核心挑战。传统方法将数据存储在界面组件内部容器中,容易引发数据冗余和同步问题。Qt的模型-视图(Model-View)架构通过解耦数据与界面,提供了更优雅的解决方案。本文将深入剖…...
Transformers 是工具箱,BERT 是工具。
Transformers 是工具箱,BERT 是工具。 🔍 详细解释: 名称作用比喻理解举例🤖 transformers(库)一个框架,提供很多 NLP 模型的“使用方式”,包括文本分类、问答、摘要等相当于一个“…...
AI应用企业研发方案
一、引言 在当今数字化时代,人工智能(AI)技术正以前所未有的速度融入各个行业,推动着企业的创新与变革。对于医药流通行业批发公司而言,面对日益激烈的市场竞争和不断变化的客户需求,借助AI技术提升企业的…...
Python实例题:Python实现iavaweb项目远端自动化更新部署
目录 Python实例题 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 execute_remote_command 函数: deploy_java_web_project 函数: 主程序: 运行思路 结束语 Python实例题 题目 Python实现iavaweb项目远端…...
NO.90十六届蓝桥杯备战|动态规划-区间DP|回文字串|Treats for the Cows|石子合并|248(C++)
区间dp也是线性dp的⼀种,它⽤区间的左右端点来描述状态,通过⼩区间的解来推导出⼤区间的解。因此,区间DP的核⼼思想是将⼤区间划分为⼩区间,它的状态转移⽅程通常依赖于区间的划分点。 常⽤的划分点的⽅式有两个: 基于…...
无人机在极端环境材料的选择
一、材料选择与优化 1. 耐低温/高温复合材料 碳纤维增强聚合物(CFRP):具备高强度、低膨胀系数特性,适用于极寒(-40℃)和高温(50℃)环境,减少因温度变化导致的结构变形。…...
视觉目标检测大模型GAIA
中国科学院自动化研究所智能感知与计算研究中心携手华为等领军企业,共同推出面向产业应用的视觉目标检测全流程解决方案——GAIA智能检测平台。该研究成果已获CVPR 2021会议收录(论文链接: 论文地址:https://arxiv.org/pdf/2106.…...