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

Go:基本变量与数据类型

目录

前言

前期准备

Hello World!

一、基本变量

1.1 声明变量

1.2 初始化变量

1.3 变量声明到初始化的过程

1.4 变量值交换

1.5 匿名变量

1.6 变量的作用域

二、数据类型

1.1 整型

1.2 浮点型

1.3 字符串

1.4 布尔类型

1.5 数据类型判断

1.6 数据类型转换

1.7 指针类型(Pointer)


前言

        欢迎你踏上学习Go编程语言的旅程!本章节将为你介绍Go语言的基本变量与数据类型,这是掌握Go编程的重要基础。Go语言以其简洁、高效和强大的特性而闻名。作为一个静态类型语言,Go在编译时就能捕获许多常见错误,这使得开发更加安全和高效。同时,Go的语法设计简洁明了,使得学习曲线相对平缓,非常适合初学者入门。

        在接下来的内容中,将深入探讨Go语言的基本变量类型,如整数、浮点数、布尔值和字符串等。你将学习如何声明变量、理解变量的作用域,以及如何在程序中使用这些基本类型。还会介绍Go语言特有的一些类型,帮助你全面了解Go的类型系统。理解并掌握这些基本概念对于你未来编写高质量的Go程序至关重要。它们是构建更复杂程序的基石,也是理解Go语言设计哲学的窗口。

        记住,编程是一项实践性很强的技能。在学习过程中,我强烈建议你动手实践每个概念,编写并运行示例代码。这不仅能帮助你更好地理解理论知识,还能培养你的编程直觉。

        让我们一起开始这段激动人心的Go语言学习之旅吧!相信通过本章节的学习,你将为成为一名优秀的Go程序员奠定坚实的基础。

前期准备

编辑器 Visual Studio Code

环境配置:

All releases - The Go Programming Language 下载地址,找到你要下载的版本和符合你操作系统的,配置环境等问题...不知道,下好就能用了(๑¯∀¯๑)

学习资源:BiliBili,菜鸟文档,书记,go官方文档,Blog

下面开始写你的第一个go代码

Hello World!

  • Go 程序结构:
    • package main 声明这是主程序包
    • import "fmt" 导入格式化输出的包
    • func main() { ... } 定义程序的入口函数
  • 程序内容:
    • fmt.Println("Hello, World!") 打印 "Hello, World!" 到控制台
package mainimport "fmt"
/*
这是多行注释的演示,下面演示单行注释
*///注意 "{" 不能单独放在一行,代码在运行时会产生错误:
func main() {fmt.Println("Hello, World!")  //注意P要大写
}
  • 运行方式:
    • go run hello.go 直接编译并运行程序
$ go run hello.go 
Hello, World!
  • go build hello.go 编译生成可执行文件
  • ./hello.exe 运行编译后的可执行文件
$ go build hello.go 
$ ls
hello.exe    hello.go
$ ./hello.exe
Hello, World!

一、基本变量

变量是用来存储用户数据的,而不同的变量类型是用来存储不同的用户数据的。

编程语言中常见的数据类型有整型、浮点型、布尔型和结构体等。Go语言每个变量都有自己的类型,在使用它们前,必须经过声明。

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。与大部分语言相似

1.1 声明变量

  • 一般格式:使用var关键字声明变量,后跟变量名和类型。如var a int
  • 批量格式:可以将多个变量声明组合在一起,提高可读性。
var (a intb stringc bool
)

Go在声明变量时,会自动对每个变量的内存区域进行初始化,每个变量会有其对应默认值:

  • 未初始化的变量会被赋予零值(整型为0,字符串为"",布尔型为false)。
  • 切片、映射、函数和指针变量默认为nil。

nil相当于其他语言中的null、None、NULL等,指代零值。

1.2 初始化变量

可以在声明时或之后给变量赋值。

  • 一般格式:var 变量名 变量类型 = 表达式,如:var a int = 1。
  • 短变量声明:使用:=可以同时声明和初始化变量,如d := 20.5
  • 多变量声明:可以一次声明多个变量,如var e, f int = 30, 40
  • 类型推断:在初始化时可以省略类型。(最后会与数据类型例子结合展示)
package mainimport "fmt"func main() {var name stringname := "Tom"fmt.Println(name)
}

在开发中,短变量声明是使用最为普遍的,但是在使用的过程中需要注意变量重复声明问题

//result
# command-line-arguments
.\demo.go:9:7: no new variables on left side of :=

1.3 变量声明到初始化的过程

  • 变量声明的核心目的是在内存中分配空间并为这个空间创建一个引用。
  • 变量初始化是在声明后(有时与声明同时)为变量赋予初始值的过程。

package mainimport ("fmt""unsafe"
)func main() {// 变量声明var a int// 打印a的内存地址和初始(零)值fmt.Printf("After declaration:\n")fmt.Printf("a's address: %p\n", &a)fmt.Printf("a's value: %d\n", a)fmt.Printf("a's size in bytes: %d\n\n", unsafe.Sizeof(a))// 变量初始化a = 42// 再次打印a的内存地址和新值fmt.Printf("After initialization:\n")fmt.Printf("a's address: %p\n", &a)fmt.Printf("a's value: %d\n", a)
}

变量声明后,内存已分配(我们可以打印地址),并且被初始化为零值。
初始化改变了内存位置的内容,但地址保持不变。
我们可以看到分配给int类型变量的内存大小。

After declaration:
a's address: 0xc00000a0b8
a's value: 0
a's size in bytes: 8After initialization:
a's address: 0xc00000a0b8
a's value: 42

1.4 变量值交换

  • 通过中间值交换
package mainimport "fmt"func main() {// 声明并初始化两个变量a := 5b := 10// 打印原始值fmt.Println("Before swap: a =", a, "b =", b)// 使用多重赋值语句交换两个变量的值a, b = b, a// 打印交换后的值fmt.Println("After swap: a =", a, "b =", b)
}
//result
Before swap: a = 5 b = 10
After swap: a = 10 b = 5
  • 直接交换
package mainimport "fmt"func main() {// 声明并初始化两个变量a := 5b := 10// 打印原始值fmt.Println("Before swap: a =", a, "b =", b)// 使用多重赋值语句交换两个变量的值a, b = b, a// 打印交换后的值fmt.Println("After swap: a =", a, "b =", b)
}
//result
Before swap: a = 5 b = 10
After swap: a = 10 b = 5

1.5 匿名变量

在赋值给多个变量时,如果存在不需要接受值的变量,可以使用匿名变量来代替。

由于匿名不占用匿名空间,也不会分配系统内存,匿名变量与匿名变量之间不会因为多次声明而无法使用。

package mainimport "fmt"// 函数返回两个整数值
func ReturnData() (int, int) {return 1, 2
}func main() {a, _ := ReturnData() //a 接受第一个返回值,匿名变量接受第二个返回值_, b := ReturnData() //匿名变量接受第一个返回值,b 接受第二个返回值fmt.Println(a, b)
}
//result
1, 2

1.6 变量的作用域

变量的作用域是指变量在程序中可以被访问的范围。在Go语言中,变量的作用域主要分为以下几种:局部作用域(函数内部)、包级作用域、全局作用域

  • 包级作用域
    • packageVar 是在函数外声明的,属于包级作用域。
    • 它可以在整个包(这个例子中就是 main 包)的任何地方被访问。
  • 局部作用域(函数级):
    • localVar 是在 main 函数内声明的,只能在 main 函数内访问。
    • funcVar 是在 exampleFunction 内声明的,只能在该函数内访问。
  • 代码块作用域
    • blockVar 是在 main 函数内的一个代码块中声明的,只能在该代码块内访问。
package mainimport "fmt"// 包级变量,在整个包内可访问
var packageVar = "我是包级变量"func main() {// 局部变量,只在main函数内可访问localVar := "我是局部变量"fmt.Println(packageVar) // 可以访问包级变量fmt.Println(localVar)   // 可以访问局部变量// 演示代码块作用域{blockVar := "我是代码块变量"fmt.Println(blockVar)}// fmt.Println(blockVar) // 这行如果取消注释会报错,因为blockVar在这里不可访问demo()// fmt.Println(funcVar) // 这行如果取消注释会报错,因为funcVar只在exampleFunction中可访问
}func demo() {funcVar := "我是函数内的变量"fmt.Println(funcVar)fmt.Println(packageVar) // 可以访问包级变量// fmt.Println(localVar) // 这行如果取消注释会报错,因为localVar只在main函数中可访问
}
//result
我是包级变量
我是局部变量
我是代码块变量
我是函数内的变量
我是包级变量

需要注意的几点:

  1. 在Go中,花括号 {} 定义了一个新的作用域。
  2. 内部作用域可以访问外部作用域的变量,但外部作用域不能访问内部作用域的变量。
  3. 如果在不同作用域中声明了同名变量,内部作用域的变量会"遮蔽"外部作用域的变量。
  4. Go语言不支持全局变量的概念,但包级变量在很多情况下可以起到类似的作用。
  5. 使用 := 声明的变量只能在函数内部使用,不能用于声明包级变量。

二、数据类型

Go语言的数据类型十分丰富,常见的包括整型、浮点型、字符串和布尔型等。Go语言特有的数据类型包括接口和通道等。

1.1 整型

  • 有符号整型:
    • int: 依据系统架构,在32位系统上为32位,在64位系统上为64位
    • int8: 8位有符号整数,范围 -128 到 127
    • int16: 16位有符号整数,范围 -32,768 到 32,767
    • int32: 32位有符号整数,范围 -2,147,483,648 到 2,147,483,647
    • int64: 64位有符号整数,范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
  • 无符号整型:
    • uint: 依据系统架构,在32位系统上为32位,在64位系统上为64位
    • uint8: 8位无符号整数,范围 0 到 255
    • uint16: 16位无符号整数,范围 0 到 65,535
    • uint32: 32位无符号整数,范围 0 到 4,294,967,295
    • uint64: 64位无符号整数,范围 0 到 18,446,744,073,709,551,615
  • 特殊整型:
    • byte: uint8 的别名,用于强调值是一个原始的字节
    • rune: int32 的别名,用于表示一个 Unicode 码点
    • uintptr: 无符号整型,大小足以存储指针值的未解释位
package mainimport "fmt"func main() {a := 3b := 2c := a / bfmt.Println(c)
}
//result
1

注意:在Go语言中,对于两个整型变量的除法运算,小数部分将会直接被截取,只取整数部分,不会存在四舍五入的情况。

1.2 浮点型

Go语言提供了两种浮点数类型:float32 和 float64。这两种类型遵循 IEEE-754 标准,分别为单精度和双精度浮点数。

  • float32(单精度浮点数):
    • 32位,4字节
    • 精度大约为6-9位十进制数字
    • 范围大约为 ±1.18 × 10^-38 到 ±3.4 × 10^38
  • float64(双精度浮点数):
    • 64位,8字节
    • 精度大约为15-17位十进制数字
    • 范围大约为 ±2.23 × 10^-308 到 ±1.80 × 10^308
package mainimport ("fmt""reflect"
)func main() {a := 3.0b := 2.0c := a / bfmt.Println(c)fmt.Println(reflect.TypeOf(c))fmt.Println(reflect.TypeOf(a))fmt.Println(reflect.TypeOf(b))
}
//result
1.5
float64
float64
float64

1.3 字符串

字符&转义字符

在Go中,单个字符通常用rune (int32)类型表示,用于表示一个 Unicode 码点(可以说对任何字符转ASCII码,汉字也是可以的)。而转义字符则是用来在字符串中表示特殊字符或不可打印字符的方式。

  • 常用转义字符:
    • \n: 换行
    • \t: 制表符
    • \r: 回车
    • \": 双引号
    • \\: 反斜杠
package mainimport "fmt"func main() {str1 := '我'str2 := 'w'fmt.Println(str1, str2)
}
//result
25105 105

注意:单引号与双引号的区别,单引号只能输入一个字符且返还的结果是对应的ASCII码。

  • 基本定义:
    • 在Go中,字符串是一个不可变的字节序列。
    • 字符串可以包含任意数据,包括字节值0,但通常用于存储人类可读的文本。
    • UTF-8 编码:Go字符串默认使用UTF-8编码,可以方便地处理Unicode字符。
  • 声明和初始化:
    • 可以使用双引号 "" 或反引号 ``(多行表示) 来创建字符串。
    • 双引号创建的字符串可以包含转义字符。
    • 反引号创建的字符串是原始字面量,不处理任何转义字符,可以跨多行。
package mainimport "fmt"func main() {// ``示例str := `这是第一行
这是第二行
这是第三行`fmt.Println(str)
}
//result
这是第一行
这是第二行
这是第三行
  • 字符串连接:可以使用 + 运算符
package mainimport "fmt"func main() {str1 := "Hello, "str2 := "World!"fmt.Println(str1 + str2)
}
//result
Hello, World!

  • 字符串查找和替换
package mainimport ("fmt""strings"
)func main() {str := "Go语言是一个高效的编程语言"// 查找子串index := strings.Index(str, "高效")fmt.Printf("'高效' 的索引位置: %d\n", index)// 替换子串newStr := strings.Replace(str, "高效", "强大", 1)fmt.Printf("替换后的字符串: %s\n", newStr)// 统计子串出现次数count := strings.Count(str, "语言")fmt.Printf("'语言' 出现的次数: %d\n", count)
}
//result
'高效' 的索引位置: 11
替换后的字符串: Go语言是一个强大的编程语言
'语言' 出现的次数: 2
  • 字符串分割和连接
package mainimport ("fmt""strings"
)func main() {// 分割字符串str := "Go,Python,Java,C++"languages := strings.Split(str, ",")fmt.Println("分割后的切片:")for i, lang := range languages {fmt.Printf("%d: %s\n", i, lang)}// 连接字符串newStr := strings.Join(languages, " | ")fmt.Printf("连接后的字符串: %s\n", newStr)// 去除首尾空白spaceStr := "  Go language  "trimmed := strings.TrimSpace(spaceStr)fmt.Printf("去除空白后: '%s'\n", trimmed)
}
//result
分割后的切片:
0: Go
1: Python
2: Java
3: C++
连接后的字符串: Go | Python | Java | C++
去除空白后: 'Go language'

1.4 布尔类型

布尔型是最简单的数据类型,只有两个值:false(假)和true(真)。

package mainimport "fmt"func main() {var a boolfmt.Println(a)a = truefmt.Println(a)
}
//result
false
true

1.5 数据类型判断

如果我们需要判断变量的类型,可以使用Go语言标准库中的reflect包,通过将变量传入此包的 TypeOf()方法,得到变量的数据类型。

package mainimport ("fmt""reflect"
)func main() {a := 1b := "test"c := true//TypeOf()方法直接返回传入变量的类型,通过Println()方法打印到控制台。fmt.Println(reflect.TypeOf(a))fmt.Println(reflect.TypeOf(b))fmt.Println(reflect.TypeOf(c))
}
//result
int
string
bool

1.6 数据类型转换

Go是静态类型的,变量在声明时就确定了类型。Go语言常见的数据类型之间能够互相进行类型转换,通过使用类型前置加小括号的方式进行。

package mainimport "fmt"func main() {// 整数与浮点数之间的转换var f float64 = 3.14var i int32 = 100i = int32(f)fmt.Printf("float64 to int32: %v (%T)\n", i, i)
}
//result
float64 to int32: 3 (int32)

 静态类型语言 VS 动态类型语言 

静态类型语言动态类型语言
类型错误在编译时就能被发现变量类型可以在运行时改变
通常运行速度更快更加灵活,开发速度可能更快
代码通常更易于理解和维护某些类型错误只能在运行时被发现

静态类型语言在编译时进行类型检查。这意味着变量的类型在编译时就已经确定,并且不能在运行时改变。例子:Go、Java、C++、Rust

// Go (静态类型)
package mainimport "fmt"func main() {var x int = 5// x = "hello"  // 编译错误:不能将string类型赋值给int类型fmt.Println(x)// y := 10  // 类型推断// y = "world"  // 编译错误:不能将string类型赋值给int类型
}

与静态类型相对,动态类型语言在运行时进行类型检查。例子:Python、JavaScript、Ruby

# Python (动态类型)
x = 5
print(x)
x = "hello"  # 正常运行:x的类型从int变为str
print(x)y = 10
y = "world"  # 正常运行:y的类型从int变为str
print(y)

Go 倾向于明确和类型安全,而 python 提供了更大的灵活性,但代价是可能出现意外的行为。

显式 vs 隐式

  • Go 要求大多数类型转换是显式的,如 int64(i)strconv.Atoi(s)
  • JavaScript 允许许多隐式转换,如 "3" + 2"3" - 2

1.7 指针类型(Pointer)

        谈及指针,很多人可能马上会联想到C/C++中的指针,指针的存在是C/C++强大的根本所在, 但同时也带来很多安全问题,相比之下Go语言的指针则更加高效和安全。

  • 声明指针

指针是一种地址值,这个地址值代表着计算机内存空间中的某个位置。指针变量就是存放地 址值的变量,指针变量的声明格式如下:

var 变量名 *int

一般情况下,我们将指针变量的类型声明为*int,变量名为“p”开头(指代“point”)的单 词,如“p”或“ptr”。

package mainimport "fmt"func main() {var p *intfmt.Println(p)
}
//result
<nil> //由于指针变量未指向任何地址,所以打印值为nil。
  • 取变量地址 :Go语言中,使用操作符“&”取变量地址,取得的地址值可以赋给指针变量。由于指针变量本身也是变量,因此指针变量在计算机内存中也有自己的地址。
  • 获取指针所指向的内容:指针变量存储的值为地址值,通过在指针变量前面加上“*”符号可以获取指针所指向地址值 的内容。
package mainimport "fmt"func main() {num := 1var p *intp = &numfmt.Println("num变量的地址", p)fmt.Println("指针变量p的值", &p)fmt.Println("指针变量p所指向的值", *p)
}
//result
num变量的地址 0xc00000a0b8
指针变量p的值 0xc00006c028
指针变量p所指向的值 1

注意:p指针声明后其值为nil,这时如果获取指针p指向的地址内容,则会出错

package mainimport "fmt"func main() {var p *intfmt.Println("指针变量p指向的地址为:", p)fmt.Println("指针变量p所指向的内容:", *p)
}
//result
指针变量p指向的地址为: <nil>
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0xbb95cb]
  • 使用指针修改值

在指针变量有实际指向的地址值后,可以通过如下格式直接修改指针所指向内存地址的内容:

*变量名 = 修改值

package mainimport "fmt"func main() {num := 1var p *intp = &numfmt.Println("指针变量p所指向的内容:", *p)*p = 10fmt.Println("指针变量p所指向的内容:", *p)
}
//result
指针变量p所指向的内容: 1
指针变量p所指向的内容: 10

也可使用new()函数来给指针分配地址并初始化地址对应的值

package mainimport "fmt"func main() {var p *intp = new(int)fmt.Println("指针变量p所指向的内容:", *p)*p = 10fmt.Println("指针变量p所指向的内容:", *p)
}
//result
指针变量p所指向的内容: 0
指针变量p所指向的内容: 10

相关文章:

Go:基本变量与数据类型

目录 前言 前期准备 Hello World! 一、基本变量 1.1 声明变量 1.2 初始化变量 1.3 变量声明到初始化的过程 1.4 变量值交换 1.5 匿名变量 1.6 变量的作用域 二、数据类型 1.1 整型 1.2 浮点型 1.3 字符串 1.4 布尔类型 1.5 数据类型判断 1.6 数据类型转换 1.…...

计算器原生js

目录 1.HTML 2.CSS 2.JS 4.资源 5.运行截图 6.下载连接 7.注意事项 1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…...

怎样将aac转换mp3格式?推荐四个aac转MP3的方法

怎样将aac转换mp3格式&#xff1f;当需要将aac格式音频转换为MP3格式时&#xff0c;有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式&#xff0c;几乎所有设备和平台都能播放MP3文件&#xff0c;包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…...

MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询

文章目录 1. 构造数据2. MongoDB 比较查询操作符1. $eq 等于1.1 等于指定值1.2 嵌入式文档中的字段等于某个值1.3 数组元素等于某个值1.4 数组元素等于数组值 2. $ne 不等于3. $gt 大于3.1 匹配文档字段3.2 根据嵌入式文档字段执行更新 4. $gte 大于等于5. $lt 小于6. $lte 小于…...

html5——CSS高级选择器

目录 属性选择器 E[att^"value"] E[att$"http"] E[att*"http"] 关系选择器 子代&#xff1a; 相邻兄弟&#xff1a; 普通兄弟&#xff1a; 结构伪类选择器 链接伪类选择器 伪元素选择器 CSS的继承与层叠 CSS的继承性 CSS的层叠性 …...

Python-数据爬取(爬虫)

~~~理性爬取~~~ 杜绝从入门到入狱 1.简要描述一下Python爬虫的工作原理&#xff0c;并介绍几个常用的Python爬虫库。 Python爬虫的工作原理 发送请求&#xff1a;爬虫向目标网站发送HTTP请求&#xff0c;通常使用GET请求来获取网页内容。解析响应&#xff1a;接收并解析HTTP响…...

虚幻引擎ue5如何调节物体锚点

当发现锚点不在物体上时&#xff0c;如何调节瞄点在物体上。 步骤1&#xff1a;按住鼠标中键拖动锚点&#xff0c;在透视图中多次调节锚点位置。 步骤2:在物体上点击鼠标右键点击-》锚定--》“设置为枢轴偏移”即可。...

Xcode持续集成之道:自动化构建与部署的精粹

标题&#xff1a;Xcode持续集成之道&#xff1a;自动化构建与部署的精粹 在快节奏的软件开发中&#xff0c;持续集成&#xff08;Continuous Integration, CI&#xff09;是提升开发效率和软件质量的关键实践。Xcode作为苹果生态中的核心开发工具&#xff0c;提供了与多种持续…...

Java高频面试基础知识点整理13

干货分享&#xff0c;感谢您的阅读&#xff01;背景​​​​​​高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09; 最全文章见&#xff1a;Java高频面试基础知识点整理 &#xff08;一&#xff09;Java基础高频知识考点 针对人员&#xff1a; 1.全部人员都…...

css画半圆画圆弧

利用border-radius和border完成&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> <style> .semicircle {width: 100px;height: 50px;border-radius: 0 0 50px 50px;background:…...

LeetCode HOT100(四)字串

和为 K 的子数组&#xff08;mid&#xff09; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 解法1&#xff1a;前缀和Map 这…...

uniapp引入 uview( HBuilder 和 npm 两种安装方式) #按需引入

方式一、HBuilder 安装 uview 1.1. HBuider安装-链接-》》 1.2. 在uni.scss 中引入 import "uni_modules/uview-ui/theme.scss";1.3. main.js 引入&#xff08;import Vue from ‘vue’ 下面&#xff09; import uView from "uni_modules/uview-ui"; V…...

使用uni-app和Golang开发影音类小程序

在数字化时代&#xff0c;影音内容已成为人们日常生活中不可或缺的一部分。个人开发者如何快速构建一个功能丰富、性能优越的影音类小程序&#xff1f;本文将介绍如何使用uni-app前端框架和Golang后端语言来实现这一目标。 项目概述 本项目旨在开发一个个人影音类小程序&#…...

基于Go1.19的站点模板爬虫详细介绍

构建一个基于Go1.19的站点模板爬虫是一项有趣且具有挑战性的任务。这个爬虫将能够从网站上提取数据&#xff0c;并按照指定的模板进行格式化。以下是详细的介绍和实现步骤。 1. 准备工作 工具和库&#xff1a; Go 1.19colly&#xff1a;一个强大的Go爬虫库goquery&#xff1…...

永恒之蓝:一场网络风暴的启示

引言 在网络安全的漫长历史中&#xff0c;“永恒之蓝”&#xff08;EternalBlue&#xff09;是一个不可忽视的里程碑事件。它不仅揭示了网络世界的脆弱性&#xff0c;还促使全球范围内对网络安全的重视达到了前所未有的高度。本文将深入探讨“永恒之蓝”漏洞的起源、影响及其对…...

AI绘画:艺术与科技的交融,创新浪潮与无限可能

在科技日新月异的当下&#xff0c;AI 绘画作为人工智能领域的一颗璀璨新星&#xff0c;正以惊人的速度在国内崭露头角&#xff0c;引发了艺术与技术交融的全新变革。随着人工智能技术的飞速发展&#xff0c;AI绘画已成为艺术与科技交融的新宠。2024年&#xff0c;AI绘画行业在国…...

医疗健康信息的安全挑战与隐私保护最佳实践

医疗健康信息的安全挑战 医疗健康信息的安全挑战主要包括数据规模庞大、管理困难、数据类型多样导致的安全风险高、以及法律法规与伦理约束带来的挑战。随着医疗信息化的发展&#xff0c;医疗健康数据呈现出爆炸式的增长&#xff0c;医院信息系统、电子病历、健康管理等产生了海…...

《C++并发编程实战》笔记(一、二)

一、简介 抽象损失&#xff1a;对于实现某个功能时&#xff0c;可以使用高级工具&#xff0c;也可以直接使用底层工具。这两种方式运行的开销差异称为抽象损失。 二、线程管控 2.1 线程的基本控制 1. 创建线程 线程相关的管理函数和类在头文件&#xff1a; #include <…...

【日常bug记录】el-checkbox 绑定对象数组

版本说明 "vue": "2.6.10", "element-ui": "2.13.2", 这个写法很怪异哦&#xff0c;但确实管用。el-checkbox 绑定的 label 是双向绑定的值&#xff0c;也就是选中之后传到表单数据里面的值&#xff0c;一般设置为 id&#xff0c;然后…...

单元测试Mockito笔记

文章目录 单元测试Mockito1. 入门1.1 什么是Mockito1.2 优势1.3 原理 2. 使用2.0 环境准备2.1 Mock1) Mock对象创建2) 配置Mock对象的行为(打桩)3) 验证方法调用4) 参数匹配5) 静态方法 2.2 常用注解1) Mock2) BeforeEach 与 BeforeAfter3) InjectMocks4) Spy5) Captor6) RunWi…...

基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源代码参考

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…...

GitHub连接超时问题 Recv failure: Connection was reset

用手机热点WIF拉取git项目的时候&#xff0c;遇到Recv failure: Connection was reset问题。 解决办法 一、手动开启本地代理 二、在终端&#xff08;cmd&#xff09;输入命令 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy https:…...

浅谈PostCSS

1. 背景 css的预处理器语言&#xff08;比如 sass&#xff0c; less&#xff0c; stylus&#xff09;的扩展性不好&#xff0c;你可以使用它们已有的功能&#xff0c;但如果想做扩展就没那么容易。 sass是很常用的css预处理器语言&#xff0c;在webpack中要使用它&#xff0c;…...

GCN、GIN

# 使用TuDataset 中的PROTEINS数据集。 # 里边有1113个蛋白质图&#xff0c;区分是否为酶&#xff0c;即二分类问题。# 导包 from torch_geometric.datasets import TUDataset from torch_geometric.data import DataLoader import torch import torch.nn as nn import torch.…...

Web控件进阶交互

Web控件进阶交互 测试时常需要模拟键盘或鼠标操作&#xff0c;可以用Python的ActionChains来模拟。ActionChains是Selenium提供的一个子类&#xff0c;用于生成和执行复杂的用户交互操作&#xff0c;允许将一系列操作链接在一起&#xff0c;然后一次性执行。 from selenium im…...

基于SpringBoot的校园疫情防控系统

你好&#xff0c;我是专注于计算机科学与技术的研究者。如果你对我的工作感兴趣或有任何问题&#xff0c;欢迎随时联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架&#xff0c;B/S架构 工具&#xff1a;Eclipse&#xff0c;Mav…...

elasticsearch 查询超10000的解决方案

前言 默认情况下&#xff0c;Elasticsearch集群中每个分片的搜索结果数量限制为10000。这是为了避免潜在的性能问题。 但是我们 在实际工作过程中时常会遇到 需要深度分页&#xff0c;以及查询批量数据更新的情况 问题&#xff1a;当请求form size >10000 时&#xff0c…...

SpringCloud集成kafka集群

目录 1.引入kafka依赖 2.在yml文件配置配置kafka连接 3.注入KafkaTemplate模版 4.创建kafka消息监听和消费端 5.搭建kafka集群 5.1 下载 kafka Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/downloads.html 5.2 在config目录下做…...

Macos 远程登录 Ubuntu22.04 桌面

这里使用的桌面程序为 xfce, 而 gnome 桌面则测试失败。 1,安装 在ubuntu上&#xff0c;安装 vnc server与桌面程序xfce sudo apt install xfce4 xfce4-goodies tightvncserver 2&#xff0c;第一次启动和配置 $ tightvncserver :1 设置密码。 然后修改配置&#xff1a…...

第十届MathorCup高校数学建模挑战赛-A题:无车承运人平台线路定价问题

目录 摘 要 1 问题重述 1.1 研究背景 1.2 研究问题 2 符号说明与模型假设 2.1 符号说明 2.2 模型假设 3 问题一:模型建立与求解 3.1 问题分析与思路 3.2 模型建立 3.2.1 多因素回归模型 3.3 模型求解 3.3.1 数据预处理 3.3.2 重要度计算 4 问题二:模型建立与求…...

怎样建设好网站/嘉兴seo网络推广

规则1 每个 PR 审查至少需要 2 个同组开发者的批准&#xff0c;管理者的审批不统计。 首先要注意的是&#xff0c;由于我所在的是一个 3 人团队&#xff0c;这是最理想的。所有的 修改 3 个开发者都 100% 知情。如果团队规模更大&#xff0c;情况可能会有所不同。你所追求的是…...

桂林的网站建设公司/外链价格

2019独角兽企业重金招聘Python工程师标准>>> 副本集就是有自动故障恢复功能的主从集群。主从集群和副本集最为明显的区别就是副本集没有固定的主节点&#xff1a;整个集群会选举出一个主节点&#xff0c;当其不能工作时&#xff0c;则变更到其它节点。副本集总会有一…...

网站建设的基本步骤/友情链接你会回来感谢我

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85948720 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85948720 五子棋人机博弈问题 摘 要 五子棋的人机博弈是two-agent对抗搜索算法的一个很具有标志性的应用&#xff0…...

做网站怎么引流/成都关键词优化排名

文 | 曾响铃 来源 | 科技向令说 从只能想象的文字艺术概念&#xff0c;到能够视听的具象化影像&#xff0c;再到可实操的极致视听交互体验。电影&#xff0c;似乎成了元宇宙从科幻到科技&#xff0c;由虚变实的见证者。 1992年&#xff0c;美国科幻小说家尼尔斯蒂芬森在其小…...

建设一个购物网站需要什么/百度授权代理商

断言的概念 断言用于证明和测试程序的假设&#xff0c;比如“这里的值大于 5”。断言可以在运行时从代码中完全删除&#xff0c;所以对代码的运行速度没有影响。 断言的使用 断言有两种方法&#xff1a; 一种是 assert<<布尔表达式>> &#xff1b;另一种是 assert&…...

网站主体备案号/网站建站开发

前言 redis简单来说 就是一个数据库&#xff0c;不过与传统数据库不同的是 redis 的数据是存在内存中的&#xff0c;所以存写速度非常快&#xff0c;因此 redis 被广泛应用于缓存方向。另外&#xff0c;redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务…...