当前位置: 首页 > article >正文

Go基础一(Maps Functions 可变参数 闭包 递归 Range 指针 字符串和符文 结构体)

Maps

1.创建map make(map[键类型]值类型)
2.设置键值对 name[key]=value;
3. name[key]获取键值
3.1 key不存在 则返回 0
4.len()方法 返回 map 上 键值对数量 len(name)
5.delete()方法 从map中删除 键值对 delete(name,key)
6.clear()方法 map中删除所有键值对 clear(name)
7.map获取值时,可选第二个返回值,第二个值表明map中是否有该键名
第二个返回值 false 表明 没有 该键, true 表示 有该键
用于区分 没有键名 返回的 0 和 有键值对 返回的 0
8.同时声明和初始化map n:=map[键类型]值类型{key1:value1,key2:value2}
9.maps包中有许多使用方法api
9.1 maps.Equal() 判断 两个map是否相同

package mainimport ("fmt""maps"
)func main() {//1.创建map make(map[键类型]值类型)m := make(map[string]int)//2.设置键值对  name[key]=valuem["k1"] = 7m["k2"] = 13fmt.Println("map:", m)//3. name[key]获取键值v1 := m["k1"]fmt.Println("v1:", v1) //7//3.1 key不存在 则返回 0v3 := m["k3"]fmt.Println("v3:", v3)//0//4.len()方法 返回 map 上 键值对数量 len(name)fmt.Println("len:", len(m))//5.delete()方法 从map中删除 键值对 delete(name,key)delete(m, "k2")fmt.Println("map:", m)//6.clear()方法 map中删除所有键值对 clear(name)clear(m)fmt.Println("map:", m)//7.map获取值时,可选第二个返回值,第二个值表明map中是否有该键名//第二个返回值 false 表明 没有 该键, true 表示 有该键//用于区分 没有键名 返回的 0 和 有键值对 返回的 0_, prs := m["k2"]fmt.Println("prs:", prs)//8.同时声明和初始化map     n:=map[键类型]值类型{key1:value1,key2:value2}n := map[string]int{"foo": 1, "bar": 2}fmt.Println("map:", n)//9.maps包中有许多使用方法api//9.1  maps.Equal() 判断 两个map是否相同n2 := map[string]int{"foo": 1, "bar": 2}if maps.Equal(n, n2) {fmt.Println("n == n2")}
}

使用 fmt.Println.打印时,映射以 map[k:v k:v] 格式显示
打印如下

$ go run maps.go 
map: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
map: map[k1:7]
map: map[]
prs: false
map: map[bar:2 foo:1]
n == n2

Functions

//0.定义函数 func name(args argesType) returnType { return value}
//1.Go 需要显式返回 return, 他不会自动返回最后一个表达式的值
//2.有多个相同类型参数 可以省略前面的类型定义
//3.调用函数 name(args)

package mainimport "fmt"//0.定义函数 func name(args argesType) returnType { return value}
//1.Go 需要显式返回 return, 他不会自动返回最后一个表达式的值
func plus(a int, b int) int {return a + b
}
//2.有多个相同类型参数 可以省略前面的类型定义
func plusPlus(a, b, c int) int {return a + b + c
}//3.调用函数 name(args)
func main() {res := plus(1, 2)fmt.Println("1+2 =", res)res = plusPlus(1, 2, 3)fmt.Println("1+2+3 =", res)
}

打印

	
$ go run functions.go 
1+2 = 3
1+2+3 = 6

Multiple Return Values 多返回值

//1. Go 内置了 多个返回值的支持 reurn 3,7
//2.不同 变量 接收不同返回值
//3.只需要接受 部分返回值,使用空标识符_

package mainimport "fmt"//1. Go 内置了 多个返回值的支持  reurn 3,7
func vals() (int, int) {return 3, 7
}func main() {//2.不同 变量 接收不同返回值a, b := vals()fmt.Println(a)fmt.Println(b)//3.只需要接受 部分返回值,使用空标识符__, c := vals()fmt.Println(c)
}

运行:

$ go run multiple-return-values.go
3
7
7

Variadic Functions 可变参数函数

//0.可变参数 可以使用 任意数量的参数调用,例如fmt.Println
//1.将任意数量int 作为函数参数 nums …int
//1.1 该函数中 nums类型等效于 int[],可以调用 len(),用range迭代
//2.可变参数函数可以 以通常的方式 使用单个参数调用。
//3.如果一个切片slice中已经有多个args 可以这样使用 nums…

在 Go 语言中,nums… 是一种 ​语法糖,用于将切片(slice)展开为可变参数(variadic arguments)。它的作用是“动态解包切片”,而不是“写死”参数。以下是详细解释:

核心概念

  • 可变参数函数
    函数定义时使用 … 表示接受多个参数(数量不固定):

  • ​调用时的 slice…
    当已有数据存储在切片中时,通过 slice… ​动态解包切片元素,作为可变参数传递:

场景写法说明
定义可变参数函数func f(args ...T)...T 表示接受多个 T 类型的参数,函数内 args 类型为 []T(切片)
传递切片给函数f(slice...)必须显式使用 ... 解包切片,否则类型不匹配(需严格区分 []T...T
直接传递多个参数f(1, 2, 3)无需 ...,直接按可变参数传递
package mainimport "fmt"
//0.可变参数 可以使用 任意数量的参数调用,例如fmt.Println//1.将任意数量int 作为函数参数  nums ...int
func sum(nums ...int) {fmt.Print(nums, " ")total := 0//1.1 该函数中 nums类型等效于 int[],可以调用 len(),用range迭代for _, num := range nums {total += num}fmt.Println(total)
}func main() {//2.可变参数函数可以 以通常的方式 使用单个参数调用。sum(1, 2)sum(1, 2, 3)//3.如果一个切片slice中已经有多个args  可以这样使用 nums...nums := []int{1, 2, 3, 4}sum(nums...)
}

运行

$ go run variadic-functions.go 
[1 2] 3
[1 2 3] 6
[1 2 3 4] 10

Closures 闭包

//0.Go 支持匿名函数 ,这些函数可以形成闭包 。当您想要内联定义函数而不必命名它时,匿名函数非常有用。
//1.函数 intSeq 返回另一个函数 为匿名函数 返回的函数在 变量 i 上 形成闭包
//2.调用 intSeq 返回一个函数 给 nextInt
//2.1每次调用nextInt 更新 i
//2.2 如果重新 初始化一个 函数 状态是独立的

package mainimport "fmt"//0.Go 支持匿名函数 ,这些函数可以形成闭包 。当您想要内联定义函数而不必命名它时,匿名函数非常有用。
//1.函数 intSeq 返回另一个函数 为匿名函数  返回的函数在 变量 i 上 形成闭包
func intSeq() func() int {i := 0return func() int {i++return i}
}func main() {//2.调用 intSeq 返回一个函数 给 nextInt nextInt := intSeq()//2.1每次调用nextInt  更新 i fmt.Println(nextInt())fmt.Println(nextInt())fmt.Println(nextInt())//2.2 如果重新 初始化一个 函数  状态是独立的newInts := intSeq()fmt.Println(newInts())
}

执行:

	
$ go run closures.go
1
2
3
1

Recursion 递归

//1. fact函数会自行调用直到达到 fact(0)
//2.匿名函数 也可以是递归的 但是需要在 定义前 显示声明变量
//2.1 fib是在main中 声明的 因此Go知道这里fib调用那个函数

package mainimport "fmt"//1. fact函数会自行调用直到达到 fact(0)
func fact(n int) int {if n == 0 {return 1}return n * fact(n-1)
}func main() {fmt.Println(fact(7))//7的阶乘//2.匿名函数 也可以是递归的 但是需要在 定义前 显示声明变量var fib func(n int) intfib = func(n int) int {if n < 2 {return n}return fib(n-1) + fib(n-2)}//2.1 fib是在main中 声明的 因此Go知道这里fib调用那个函数fmt.Println(fib(7))
}

执行:

$ go run recursion.go 
5040
13

Range over Built-in Types ( Range over 内置类型)

//1.使用 range 对切片中数字求和,不需要索引 使用空标识符 _ 忽略
//2. range 在 切片和数组上 提供 索引 和 值 ,上面不需要索引 使用空标识符 _ 忽略
//3.range 迭代 map 返回 键和值
//3.1range 只迭代 map 键
//4.range 迭代字符串 返回 索引 和 Unicode 码点值

  • 在 Go 语言中,使用 range 遍历字符串时,会逐个迭代字符串中的 ​Unicode 字符(rune)​,并返回两个值:
    ​当前字符的起始字节索引(int 类型)​
    ​当前字符的 Unicode 码点值(rune 类型,即 int32 的别名)​
package mainimport "fmt"func main() {nums := []int{2, 3, 4}sum := 0//1.使用 range 对切片中数字求和,不需要索引 使用空标识符 _ 忽略for _, num := range nums {sum += num}fmt.Println("sum:", sum)//2. range 在 切片和数组上 提供 索引 和 值 ,上面不需要索引 使用空标识符 _ 忽略for i, num := range nums {if num == 3 {fmt.Println("index:", i)}}//3.range 迭代 map  返回 键和值kvs := map[string]string{"a": "apple", "b": "banana"}for k, v := range kvs {fmt.Printf("%s -> %s\n", k, v)}//3.1range 只迭代 map   键 for k := range kvs {fmt.Println("key:", k)}//4.range 迭代字符串 返回 索引 和 Unicode 码点值for i, c := range "go" {fmt.Println(i, c)}
}

执行:

	
$ go run range-over-built-in-types.go
sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111

Pointers 指针

//1.参数不使用指针 zeroval 获得的参数 是与传入参数 不同的副本
//2.参数使用指针 zeroptr 获得的参数 和 传入参数 是同一内存地址 修改值 会同时修改
//3.&i 语法 取出i的内存地址,即指向i的指针

package mainimport "fmt"//1.参数不使用指针  zeroval 获得的参数 是与传入参数  不同的副本
func zeroval(ival int) {ival = 0
}
//2.参数使用指针 zeroptr 获得的参数 和 传入参数 是同一内存地址  修改值 会同时修改
func zeroptr(iptr *int) {*iptr = 0
}func main() {i := 1fmt.Println("initial:", i)zeroval(i)fmt.Println("zeroval:", i)//3.&i 语法 取出i的内存地址,即指向i的指针zeroptr(&i)fmt.Println("zeroptr:", i)fmt.Println("pointer:", &i)
}

执行:

$ go run pointers.go
initial: 1
//4.zeroval 不会更改 main 中的 i,但 zeroptr 会,是因为它引用了该变量的内存地址。
zeroval: 1
zeroptr: 0
pointer: 0x42131100

Strings and Runes 字符串和符文

**//1.字符串 等同于 []byte len()返回 bytes 长度
//2.字符串 索引 对应的 值 是原始字节值 构成字节的16进制值
//3.计算字符串中 有多少符文 utf8.RuneCountInString(s) 按顺序解码UTF-8 rune
// range 循环 字符串 解码每个 符文
//4. utf8.DecodeRuneInString(s) 获取 符文 和 对应符文的 字节长度
**

  • Go 字符串是只读的字节切片。该语言和标准库专门将字符串视为以 UTF-8 编码的文本容器。在其他语言中,字符串由 “字符” 组成。在 Go 中,字符的概念称为符文 - 它是 表示 Unicode 码位的整数

  • 在 Go 语言中,utf8.DecodeRuneInString(s) 方法用于 ​解码字符串 s 中的第一个 UTF-8 字符,返回该字符的 Unicode 码点(rune)及其占用的字节数。该方法属于 unicode/utf8 包,专门处理 UTF-8 编码的字符串,适合需要逐字符解析的场景。

package mainimport ("fmt""unicode/utf8"
)func main() {//s 是一个字符串  泰语 表示 helloconst s = "สวัสดี"//1.字符串 等同于 []byte   len()返回 bytes 长度fmt.Println("Len:", len(s))//2.字符串 索引 对应的 值 是原始字节值  构成字节的16进制值for i := 0; i < len(s); i++ {fmt.Printf("%x ", s[i])}fmt.Println()//3.计算字符串中 有多少符文  utf8.RuneCountInString(s)  按顺序解码UTF-8 runefmt.Println("Rune count:", utf8.RuneCountInString(s))// range 循环 字符串 解码每个 符文for idx, runeValue := range s {fmt.Printf("%#U starts at %d\n", runeValue, idx)}//4.  utf8.DecodeRuneInString(s)  获取 符文 和 对应符文的 字节长度fmt.Println("\nUsing DecodeRuneInString")for i, w := 0, 0; i < len(s); i += w {runeValue, width := utf8.DecodeRuneInString(s[i:])fmt.Printf("%#U starts at %d\n", runeValue, i)w = widthexamineRune(runeValue)}
}func examineRune(r rune) {//单引号if r == 't' {fmt.Println("found tee")} else if r == 'ส' {fmt.Println("found so sua")}
}

执行:

	
$ go run strings-and-runes.go
Len: 18
e0 b8 aa e0 b8 a7 e0 b8 b1 e0 b8 aa e0 b8 94 e0 b8 b5 
Rune count: 6
U+0E2A 'ส' starts at 0
U+0E27 'ว' starts at 3
U+0E31 'ั' starts at 6
U+0E2A 'ส' starts at 9
U+0E14 'ด' starts at 12
U+0E35 'ี' starts at 15
Using DecodeRuneInString
U+0E2A 'ส' starts at 0
found so sua
U+0E27 'ว' starts at 3
U+0E31 'ั' starts at 6
U+0E2A 'ส' starts at 9
found so sua
U+0E14 'ด' starts at 12
U+0E35 'ี' starts at 15

Structs 结构体

1. 结构体定义
type person struct {name stringage  int
}

要点:使用 type 结构体名 struct 定义,字段通过 字段名 类型 声明。
代码对应:定义 person 结构体,包含 name(字符串)和 age(整型)字段。


2. 结构体初始化
// 方式1:顺序初始化(需全部字段)
fmt.Println(person{"Bob", 20})// 方式2:命名字段初始化(可省略部分字段)
fmt.Println(person{name: "Alice", age: 30})
fmt.Println(person{name: "Fred"}) // age 默认为 0

要点
• 支持顺序初始化或显式命名字段初始化。
• 未赋值的字段默认为零值(如 int0)。
代码对应:展示三种初始化方式,包括部分字段省略。


3. 结构体指针
// 直接返回结构体指针
fmt.Println(&person{name: "Ann", age: 40})// 通过函数返回指针
func newPerson(name string) *person {p := person{name: name}p.age = 42return &p
}
fmt.Println(newPerson("Jon"))

要点
• 使用 & 直接获取结构体指针。
• 函数返回局部结构体的指针是安全的(Go 自动分配在堆上)。
代码对应newPerson 函数返回指针,演示直接取址。


4. 访问结构体字段
s := person{name: "Sean", age: 50}
fmt.Println(s.name) // 直接访问sp := &s
fmt.Println(sp.age) // 指针自动解引用
sp.age = 51         // 修改字段值
fmt.Println(sp.age)

要点
• 通过 . 访问字段,指针类型会自动解引用。
• 修改指针指向的结构体会影响原变量。
代码对应s.namesp.age 的访问与修改。


5. 匿名结构体
dog := struct {name   stringisGood bool
}{"Rex",true,
}
fmt.Println(dog)

要点
• 无需预定义类型,直接声明匿名结构体并初始化。
• 适用于一次性使用的场景。
代码对应:定义并打印 dog 匿名结构体。


要点代码示例说明
结构体定义type person struct { ... }定义包含字段的结构体类型。
初始化方式person{"Bob", 20}person{name: "Alice"}支持顺序和命名初始化。
结构体指针&person{...}func newPerson() *person直接取址或函数返回指针。
字段访问/修改s.name, sp.age = 51指针自动解引用,直接修改字段。
匿名结构体dog := struct { ... }{...}临时使用的未命名结构体。

通过代码示例清晰展示了 Go 结构体的核心操作,适用于日常开发参考。

package mainimport "fmt"//1.创建结构体  type 结构体名 struct {字段名 类型 }
type person struct {name stringage  int
}//2.
func newPerson(name string) *person {p := person{name: name}p.age = 42return &p
}func main() {fmt.Println(person{"Bob", 20})fmt.Println(person{name: "Alice", age: 30})fmt.Println(person{name: "Fred"})fmt.Println(&person{name: "Ann", age: 40})fmt.Println(newPerson("Jon"))s := person{name: "Sean", age: 50}fmt.Println(s.name)sp := &sfmt.Println(sp.age)sp.age = 51fmt.Println(sp.age)dog := struct {name   stringisGood bool}{"Rex",true,}fmt.Println(dog)
}```
执行:```go
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
{Rex true}

相关文章:

Go基础一(Maps Functions 可变参数 闭包 递归 Range 指针 字符串和符文 结构体)

Maps 1.创建map make(map[键类型]值类型) 2.设置键值对 name[key]value; 3. name[key]获取键值 3.1 key不存在 则返回 0 4.len()方法 返回 map 上 键值对数量 len(name) 5.delete()方法 从map中删除 键值对 delete(name,key) 6.clear()方法 map中删除所有键值对 clear(name) 7…...

2025年渗透测试面试题总结-某 携程旅游-基础安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 携程旅游-基础安全工程师 反序列化原理 核心原理 扩展分析 SQL注入本质 核心原理 扩展分析 SQL注…...

wireshak抓手机包 wifi手机抓包工具

移动端接口测试抓包工具指南 在做手机或移动端APP的接口测试时&#xff0c;获取完整的接口文档是关键。但如果没有文档&#xff0c;我们就需要使用专业的抓包工具来分析网络请求。本文将介绍两种常用的抓包方案&#xff1a;Fiddler和Sniff Master&#xff08;抓包大师&#xf…...

niuhe插件, 在 go 中渲染网页内容

思路 niuhe 插件生成的 go 代码是基于 github.com/ma-guo/niuhe 库进行组织管理的, niuhe 库 是对 go gin 库的一个封装&#xff0c;因此要显示网页, 可通过给 gin.Engine 指定 HTMLRender 来实现。 实现 HTMLRender 我们使用 gitee.com/cnmade/pongo2gin 实现 1. main.go …...

java基础知识面试题总结

Java基础知识面试题 1.重载和重写的区别 重载&#xff08;Overload&#xff09;&#xff1a; ​ 同一个类中&#xff0c;方法名相同&#xff0c;参数列表不同&#xff08;个数、类型、顺序&#xff09;。 class Calculator {// 方法1&#xff1a;两个int相加public int add…...

使用MySQL时出现 Ignoring query to other database 错误

Ignoring query to other database 错误 当在远程连接软件中输入MySQL命令出现该错误 导致错误原因是&#xff1a;登录mysql时账户名没有加上u 如果出现该错误&#xff0c;退出mysql&#xff0c;重新输入正确格式进入即可&#xff01;...

MySQL介绍及使用

1. 安装、启动、配置 MySQL 1. 安装 MySQL 更新软件包索引 sudo apt update 安装 MySQL 服务器 sudo apt install mysql-server 安装过程中可能会提示你设置 root 用户密码。如果没有提示&#xff0c;可以跳过&#xff0c;后续可以手动设置。 2. 配置 MySQL 运行安全脚本…...

Vue2-实现elementUI的select全选功能

文章目录 使用 Element UI 的全选功能自定义选项来模拟全选 在使用 Element UI 的 el-select组件时&#xff0c;实现“全选”功能&#xff0c;通常有两种方式&#xff1a;一种是使用内置的全选功能&#xff0c;另一种是通过自定义选项来模拟全选。 使用 Element UI 的全选功能…...

java后端开发day34--脑子空空如何无痛想起所有知识点--概念拟人化

1.上半部学习思考 1.1反思–浮躁–二倍速 刚开始算半个小白吧&#xff0c;从最基础的知识点开始学习&#xff0c;到后面学习整个项目的布局和功能。可能是后面慢慢懂得多了&#xff0c;每次打代码搞项目啊什么的&#xff0c;就能明显感觉到自己很浮躁&#xff1a;脑子里已经明…...

fastGPT—前端开发获取api密钥调用机器人对话接口(HTML实现)

官网文档链接&#xff1a;OpenAPI 介绍 | FastGPT 首先按照文档说明创建api密钥 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…...

解决 PDF 难题:批量处理、文档清理与自由拆分合并

软件介绍 在日常办公与学习中&#xff0c;处理 PDF 文件常常让人头疼不已&#xff0c;不过别担心&#xff0c;今天有一款堪称神器的国产老牌 PDF 工具要分享给大家。它就是 PDF 补丁丁&#xff0c;凭借其强大功能&#xff0c;为大家排忧解难。 界面体验 初次打开 PDF 补丁丁&…...

使用pycharm社区版调试DIFY后端python代码

目录 背景 前置条件 DIFY使用的框架 API服务调试配置步骤&#xff08;基于tag为0.15.3的版本&#xff09; 1.配置.env文件 2.关闭docker里面的docker-api-1服务 3.使用DOCKER启动本地环境需要用到的中间件&#xff0c;并暴露端口 注意事项一&#xff1a; 注意事项二&#xff1a…...

量子计算与人工智能的结合:未来科技的双重革命

引言 在过去几十年里&#xff0c;人工智能&#xff08;AI&#xff09;和计算能力的提升一直是推动科技进步的重要力量。然而&#xff0c;随着深度学习和大规模数据处理的发展&#xff0c;传统计算架构的算力瓶颈逐渐显现&#xff0c;人工智能的训练和推理效率受到了限制。在此背…...

关于存储的笔记

存储简介 名称适用场景常见运用网络环境备注块存储高性能、低延迟数据库局域网专业文件存储数据共享共享文件夹、非结构化数据局域网通用对象存储大数据、云存储网盘、网络媒体公网&#xff08;断点续传、去重&#xff09;海量 存储协议 名称协议块存储FC-SAN或IP-SAN承载的…...

基于机器学习的三国时期诸葛亮北伐失败因素量化分析

一、研究背景与方法论 1.1 历史问题的数据化挑战 三国时期&#xff08;220-280年&#xff09;的战争史存在史料分散、数据缺失的特点。本研究通过构建包含军事、经济、地理、政治四大维度的结构化数据库&#xff0c;收录建安十二年&#xff08;207年&#xff09;至建兴十二年…...

MySQL 中的 MVCC 版本控制机制原理

1. MVCC&#xff08;多版本并发控制&#xff09;概述 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是一种数据库事务并发控制机制&#xff0c;主要用于提高数据库的读写性能。它通过维护数据的多个版本&#xff0c;使得读操作无…...

JWT认证服务

JSON Web Token&#xff08;JWT&#xff09;是一种用于在网络应用间安全地传递信息的紧凑、自包含的方式。以下是关于 JWT 认证服务器更详细的介绍&#xff0c;包括其意义、作用、工作原理、组成部分、时效性相关内容、搭建条件以及代码案例。 JWT 的意义与作用 意义&#xf…...

RAG中对于PDF复杂格式文件的预处理的解决方案:MinerU

RAG中对于PDF复杂格式文件的预处理的解决方案:MinerU 1. 场景 在RAG场景下,我们所遇到的文档格式可不仅仅局限于txt文件,而对于复杂的PDF文件,里面有图片格式的Excel、图片格式的文字、以及公式等等复杂的格式,我们很难用传统的方式去解析预处理成我们可以用的类似于TXT…...

手机中的type-C是如何防水的呢?

防水类型的type-C座子&#xff1a; 电子产品防水等级的区分&#xff1a; 这里的“IP”是国际防护标准等级&#xff1b;简而言之&#xff0c;IPXX中“XX”两位数字分别代表防尘和防水等级&#xff0c;其中防尘等级从0&#xff5e;6&#xff0c;防水等级则从0&#xff5e;8。 第…...

[Redis]Redis学习开篇概述

欢迎来到啾啾的博客&#x1f431;。 这是一个致力于构建完善 Java 程序员知识体系的博客&#x1f4da;。 它记录学习点滴&#xff0c;分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 引言 大家好…...

WordPress浮动广告插件+飘动效果客服插件

源码介绍 WordPress浮动广告插件飘动效果客服插件 将源码上传到wordpress的插件根目录下&#xff0c;解压&#xff0c;然后后台启用即可 截图 源码免费获取 WordPress浮动广告插件飘动效果客服插件...

Java基础关键_034_网络编程

目 录 一、概述 二、网络编程三要素 1.IP 地址 2.端口号 3.通信协议 &#xff08;1&#xff09;说明 &#xff08;2&#xff09;OSI 七层参考模型 &#xff08;3&#xff09;TCP/IP 四层参考模型 三、网络编程基础类 1.InetAddress 2.URL &#xff08;1&#xff09…...

Ubuntu交叉编译器工具链安装

声明 本博客所记录的关于正点原子i.MX6ULL开发板的学习笔记&#xff0c;&#xff08;内容参照正点原子I.MX6U嵌入式linux驱动开发指南&#xff0c;可在正点原子官方获取正点原子Linux开发板 — 正点原子资料下载中心 1.0.0 文档&#xff09;&#xff0c;旨在如实记录我在学校学…...

C# 操作 Redis

一、简介 C# 中通过 StackExchange.Redis 库可以方便地操作 Redis&#xff0c;实现高性能的数据缓存和存储。StackExchange.Redis 提供了强大的 API&#xff0c;允许开发者轻松连接、读取和写入 Redis 数据。通过使用 ConnectionMultiplexer 类&#xff0c;可以建立与 Redis 服…...

基于Python的招聘推荐数据可视化分析系统

【Python】基于Python的招聘推荐数据可视化分析系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 &#x1f680;&#x1f31f; 基于Python的招聘推荐数据可视化分析系统&#xff01;&#x1…...

光谱相机在工业中的应用

光谱相机&#xff08;多光谱、高光谱、超光谱成像技术&#xff09;在工业领域通过捕捉物质的光谱特征&#xff08;反射、透射、辐射等&#xff09;&#xff0c;结合化学计量学与人工智能算法&#xff0c;为工业检测、质量控制和工艺优化提供高精度、非接触式的解决方案。以下是…...

Nginx介绍及使用

1.Nginx介绍 Nginx是一款开源的、高性能的HTTP和反向代理服务器 1.正向代理和反向代理 正向代理&#xff08;代理客户端&#xff09;是一种位于客户端和目标服务器之间的中间服务器。客户端通过正向代理服务器向目标服务器发送请求&#xff0c;代理服务器将请求转发给目标服…...

使用PyQt5绘制水波浪形的柱状显示流量—学习QTimer+QPainterPath

前言&#xff1a;进入学习Python开发上位机界面的第二阶段&#xff0c;学习如何开发自定义控件&#xff0c;从常用的控件入手学习&#xff0c;本期主要学习如何使用PyQt5绘制水波浪形的柱状显示流量。但是最后我放弃了&#xff0c;因为水波的效果达不到我想要的。 1. 明确想要…...

C++蓝桥杯实训篇(二)

片头 嗨咯~小伙伴们&#xff01;今天我们来一起学习算法和贪心思维&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 数位排序 对于这道题&#xff0c;我们需要自己写一个排序算法&#xff0c;也就是自定义排序&#xff0c;按照数位从小到大进行排序。 举一…...

如何将本地更改的README文件同步到自己的GitHub项目仓库

如何将本地更改的 README 文件同步到 GitHub 仓库 在你 git clone 下来的工程目录下&#xff1a; 先使用 robocopy YOUR\SOURCE\CODE\DIR YOUR\GIT\CLONE\DIR /E /XD .git /DCOPY:T 将你的更改Copy到你git下来的工程中&#xff08;上面的命令会自动处理&#xff0c;例如只会C…...