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

理解Go中的数据类型

引言

数据类型指定了编写程序时特定变量存储的值的类型。数据类型还决定了可以对数据执行哪些操作。

在本文中,我们将介绍Go的重要数据类型。这不是对数据类型的详尽研究,但将帮助您熟悉Go中可用的选项。理解一些基本的数据类型能让你写出更清晰、性能更高效的代码。

背景

理解数据类型的一种方法是考虑我们在现实世界中使用的不同类型的数据。现实世界中数据的一个例子是数字:例如,我们可以使用整数(0,1,2,…)、整数(…,-1,0,1,…)和无理数(π)。

通常,在数学中,我们可以组合不同类型的数字,并得到某种答案。我们可能想将π加5,例如:

5 + π

我们可以保留这个方程作为无理数的答案,也可以将π四舍五入到一个小数位较少的数字中,然后再将它们相加:

5 + π = 5 + 3.14 = 8.14 

但是,如果我们开始尝试用另一种数据类型(如单词)计算数字,就会变得不那么有意义。我们如何解下面的方程?

shark + 8

对于计算机来说,每种数据类型都非常不同,就像单词和数字一样。因此,我们必须小心如何使用不同的数据类型来赋值,以及如何通过操作操作它们。

Integers

与数学一样,计算机编程中的整数是整数,可以是正、负或0(…,- 1,0,1,…)。在Go中,整数被称为int。与其他编程语言一样,在4位或4位以上的数字中不应该使用逗号,因此,在程序中编写1000时,请将其写成1000

可以像下面这样简单地打印一个整数:

fmt.Println(-459)
Output-459

或者,我们可以声明一个变量,在本例中,它是我们正在使用或操作的数字的符号,如下所示:

var absoluteZero int = -459
fmt.Println(absoluteZero)
Output-459

我们也可以在Go中使用整数进行数学运算。在下面的代码块中,我们将使用:=赋值操作符来声明和实例化变量sum:

sum := 116 - 68
fmt.Println(sum)
Output48

如输出所示,数学运算符-116减去整数68,得到48。你将在为变量声明数据类型部分了解更多关于变量声明的内容。

在Go程序中,整数可以以多种方式使用。随着您继续学习Go,您将有很多机会使用整数并在此数据类型的知识基础上进行工作。

浮点数

浮点数浮点数用于表示不能表示为整数的实数。实数包含所有有理数和无理数,因此浮点数可以包含小数部分,如9.0或-116.42。为了理解Go程序中的浮点数,它是一个包含小数点的数字。

像处理整数一样,可以像下面这样简单地打印一个浮点数:

fmt.Println(-459.67)
Output-459.67

还可以声明一个变量来表示浮点数,如下所示:

absoluteZero := -459.67
fmt.Println(absoluteZero)
Output-459.67

就像整数一样,我们也可以在Go中使用浮点数进行数学运算:

var sum = 564.0 + 365.24
fmt.Println(sum)
Output929.24

对于整数和浮点数,重要的是要记住3≠3.0,因为3指整数,而3.0指浮点数。

数值类型的大小

除了整数和浮点数之间的区别之外,Go还有两种类型的数值数据,它们的区别在于其大小的静态或动态性质。第一种类型是体系结构无关类型,这意味着无论代码在什么机器上运行,以位为单位的数据长度都不会改变。

今天的大多数系统体系结构不是32位就是64位。例如,你可能正在为一台现代的Windows笔记本电脑开发应用程序,其操作系统运行在64位体系结构上。但是,如果您正在为健身手表之类的设备开发,则可能需要使用32位架构。如果你使用体系结构无关的类型,如int32,无论你编译的是什么体系结构,该类型都将具有固定的大小。

第二种是特定于实现的类型。在这种类型中,位长可能因程序所基于的体系结构而异。例如,如果我们使用int类型,当Go编译为32位体系结构时,数据类型的大小将为32位。如果程序是针对64位体系结构编译的,则该变量的大小为64位。

除了有不同大小的数据类型,像整数这样的数据类型也有两种基本类型:有符号无符号int8是一个有符号整数,它的值可以是-128到127。uint8是一个无符号整数,只能是0 ~ 255的正数。

这些范围是基于位的大小。对于二进制数据,8位可以表示256个不同的值。因为int类型需要同时支持正数和负数,一个8位整数(int8)的范围是-128到127,总共有256个不同的可能值。

Go有以下体系结构无关的整数类型:

uint8       无符号8位整数 (0 to 255)
uint16      无符号16位整数 (0 to 65535)
uint32      无符号32位整数 (0 to 4294967295)
uint64      无符号64位整数 (0 to 18446744073709551615)
int8        带符号的8位整数 (-128 to 127)
int16       带符号的16位整数 (-32768 to 32767)
int32       带符号的32位整数 (-2147483648 to 2147483647)
int64       带符号的64位整数 (-9223372036854775808 to 9223372036854775807)

浮点数和复数的大小也各不相同:

float32     IEEE-754 32位浮点数
float64     IEEE-754 64位浮点数
complex64   具有float32类型变量实部和虚部的复数
complex128  具有float64类型变量实部和虚部的复数

还有一些别名编号类型,可以为特定的数据类型指定有用的名称。

byte        uint8的别名
rune        int32的别名

byte别名的目的是,当你的程序使用字节作为字符串元素的常见计算度量时,而不是与字节数据度量无关的小整数时,可以明确这一点。即使byteuint8在程序编译时是相同的,byte通常用于表示数字形式的字符数据,而uint8在程序中是一个数字。

rune别名有点不同。其中byteuint8是完全相同的数据,rune可以是一个字节或四个字节,一个范围由int32决定。rune用于表示Unicode字符,而只有ASCII字符可以只用int32数据类型表示。

此外,Go有以下特定于实现的类型:

uint     无符号,32或64位
int      有符号,32或64位
uintptr  大到足以存储指针值的未解释位的无符号整数

特定于实现的类型的大小由编译程序的体系结构定义。

选择数值数据类型

选择正确的大小通常与您正在编程的目标架构的性能有关,而不是与您正在使用的数据的大小有关。不过,在不需要知道程序性能的具体影响的情况下,你可以在刚开始时遵循这些基本指导方针。

如本文前面所讨论的,有体系结构无关的类型和特定于实现的类型。对于整数数据,通常在Go中使用intuint等实现类型,而不是int64uint64。这通常会为您的目标架构带来最快的处理速度。例如,如果你使用int64并编译为32位架构,那么处理这些值需要至少两倍的时间,因为在架构中移动数据需要额外的CPU周期。如果你使用int,程序会将其定义为32位体系结构的32位大小,处理速度会明显更快。

如果您知道不会超过特定的大小范围,那么选择一种体系结构无关的类型可以提高速度并减少内存使用。例如,如果你知道你的数据不会超过100的值,并且只会是一个正数,那么选择uint8将使你的程序更高效,因为它将需要更少的内存。

我们已经了解了数值数据类型的一些可能的范围,下面来看看在程序中超出这些范围会发生什么。

溢出vs.环绕

当您尝试存储大于设计数据类型的值时,Go有可能溢出数字和包装数字,这取决于该值是在编译时还是在运行时计算的。当程序在尝试构建程序时发现错误时,就会发生编译时错误。运行时错误发生在程序被编译之后,但它实际上正在执行。

在下面的例子中,我们将maxint32设置为最大值:

package mainimport "fmt"func main() {var maxUint32 uint32 = 4294967295 // Max uint32 sizefmt.Println(maxUint32)
}

它将编译并运行,结果如下:

Output4294967295

如果我们在运行时给值加上1,它会被转换成0:

Output0

另一方面,让我们修改程序,在编译前给变量赋值时加上1:

package mainimport "fmt"func main() {var maxUint32 uint32 = 4294967295 + 1fmt.Println(maxUint32)}

在编译时,如果编译器可以确定指定的数据类型容纳的值太大,它将抛出overflow错误。这意味着计算的值对于指定的数据类型来说太大。

因为编译器可以确定它会溢出这个值,所以它会抛出一个错误:

Outputprog.go:6:36: constant 4294967296 overflows uint32

理解数据的边界将帮助你在将来的程序中避免潜在的错误。

我们已经介绍了数值类型,下面来看看如何存储布尔值。

布尔值

boolean数据类型可以是两个值之一,truefalse,当声明它为数据类型时,它被定义为bool。布尔值用于表示与数学逻辑分支相关的真值,它指示计算机科学中的算法。

truefalse将始终分别是小写的tf,因为它们是Go中预先声明的标识符。

许多数学运算的结果要么为true,要么为false:

  • 大于
    • 500 > 100 true
    • 1 > 5 false
  • 小于
    • 200 < 400 true
    • 4 < 2 false
  • 等于
    • 5 = 5 true
    • 500 = 400 false

和数字一样,我们也可以将布尔值存储在变量中:

myBool := 5 > 8

然后我们可以调用fmt.Println()函数来打印布尔值:

fmt.Println(myBool)

由于5不大于8,我们将收到以下输出:

Outputfalse

随着你在Go中编写更多的程序,你将更加熟悉布尔值的工作原理,以及计算为truefalse的不同函数和操作如何改变程序的进程。

字符串

字符串是由一个或多个字符(字母、数字、符号)组成的序列,可以是常量,也可以是变量。在Go中,字符串存在于反引号`或双引号"中,并根据您使用的引号具有不同的特征。

如果你使用反引号,你就是在创建一个原始字符串字面量。如果你使用双引号,你是在创建一个解释字符串字面量。

原始字符串字面量

原始字符串字面量是位于反引号之间的字符序列,通常称为反引号。在引号内,任何字符都将与反引号之间显示的字符一样,除了反引号字符本身。

a := `Say "hello" to Go!`
fmt.Println(a)
OutputSay "hello" to Go!

通常,反斜杠用于表示字符串中的特殊字符。例如,在解释字符串中,\n表示字符串中的新行。然而,反斜杠在原始字符串字面量中没有特殊含义:

a := `Say "hello" to Go!\n`
fmt.Println(a)

因为反斜杠在字符串字面量中没有特殊的含义,它实际上会打印出\n的值,而不是新建一行:

OutputSay "hello" to Go!\n

原始字符串字面量也可以用来创建多行字符串:

a := `This string is on 
multiple lines
within a single back 
quote on either side.`
fmt.Println(a)
OutputThis string is on 
multiple lines
within a single back 
quote on either side.

在前面的代码块中,新行从输入转移到输出。

解释的字符串字面量

解释字符串字面量是双引号之间的字符序列,如"bar"。在引号中,除了换行符和未转义的双引号外,任何字符都可以出现。要在解释过的字符串中显示双引号,可以使用反斜杠作为转义字符,如下所示:

a := "Say \"hello\" to Go!"
fmt.Println(a)
OutputSay "hello" to Go!

几乎总是使用解释过的字符串字面量,因为它们允许转义字符。

包含UTF-8字符的字符串

UTF-8是一种编码方案,用于将可变宽度字符编码为1到4个字节。Go支持开箱即用的UTF-8字符,不需要任何特殊设置、库或包。罗马字符(如字母 A )可以用ASCII值(如数字65)表示。但是,对于特殊字符,如国际字符,则需要使用UTF-8。Go对UTF-8数据使用rune别名类型。

a := "Hello, 世界"

你可以在for循环中使用range关键字来索引Go中的任何字符串,即使是UTF-8字符串。for循环和range将在本系列的后面部分更深入地介绍;现在,重要的是要知道,我们可以使用它来对给定字符串中的字节数进行计数:

package mainimport "fmt"func main() {a := "Hello, 世界"for i, c := range a {fmt.Printf("%d: %s\n", i, string(c))}fmt.Println("length of 'Hello, 世界': ", len(a))
}

在上面的代码块中,我们声明了变量a,并将值Hello,世界赋给它。赋值的文本包含UTF-8字符。

然后我们使用标准的for循环和range关键字。在Go中,range关键字将索引一个每次返回一个字符的字符串,以及该字符在字符串中的字节索引。

使用fmt.Printf函数,我们提供了一个%d: %s\n的格式字符串。’ %d '是数字(在本例中是整数)的打印动词,而%s是字符串的打印动词。然后我们提供了i的值,ifor循环的当前索引,cfor循环的当前字符。

最后,我们使用内置的len函数打印出变量a的整个长度。

前面我们提到过,rune是int32的别名,由1到4个字节组成。字符需要三个字节来定义,在UTF-8字符串范围内,索引相应地移动。这就是i在打印出来时不是顺序的原因。

Output0: H
1: e
2: l
3: l
4: o
5: ,
6:
7: 世
10: 界
length of 'Hello, 世界':  13

如你所见,这个长度比在字符串上进行范围搜索的次数要长。

你不会总是使用UTF-8字符串,但当你使用时,你现在会明白为什么它们是runes而不是单个的int32

声明变量的数据类型

现在您已经了解了不同的基本数据类型,我们将介绍如何在go中将这些类型分配给变量。

在Go中,我们可以使用关键字var定义一个变量,后跟变量名和所需的数据类型。

在下面的例子中,我们将声明一个类型为float64的名为pi的变量。

关键字var是第一个声明的东西:

var pi float64

然后是我们的变量名pi:

var pi float64

最后是数据类型float64:

var pi float64

我们也可以指定一个可选的初始值,例如3.14:

var pi float64 = 3.14

Go是一门静态类型的语言。静态类型意味着程序中的每条语句都会在编译时被检查。这也意味着数据类型绑定到变量,而在动态链接的语言中,数据类型绑定到值。

例如,在Go中,在声明变量时声明类型:

var pi float64 = 3.14
var week int = 7

如果声明方式不同,每个变量都可能是不同的数据类型。

这与PHP等语言不同,PHP的数据类型与值相关:

$s = "sammy";         // $s 自动为字符串类型
$s = 123;             // $s 自动为数字类型

在上面的代码块中,第一个$s是一个字符串,因为它被赋值为"sammy",第二个$s是一个整数,因为它的值为123

接下来,让我们看看更复杂的数据类型,如数组。

数组

An array of strings looks like this:
数组是一组有序的元素序列。数组的容量在创建时定义。一旦数组分配了大小,就不能再改变它的大小。因为数组的大小是静态的,这意味着它只分配一次内存。这使得数组的使用有些死板,但提高了程序的性能。因此,优化程序时通常会用到数组。接下来介绍的切片更灵活,在其他语言中构成了你所认为的数组。

数组通过声明数组的大小,然后在花括号{ }中定义数据类型来定义。

字符串数组如下所示:

[3]string{"blue coral", "staghorn coral", "pillar coral"}

我们可以将数组存储在变量中,并将其打印出来:

coral := [3]string{"blue coral", "staghorn coral", "pillar coral"}
fmt.Println(coral)
Output[blue coral staghorn coral pillar coral

如前所述,切片类似于数组,但要灵活得多。让我们来看看这个可变数据类型。

切片

切片是一个长度可以改变的有序元素序列。切片可以动态地增加它们的大小。当你向切片中添加新项目时,如果切片没有足够的内存来存储新项目,它将根据需要向系统请求更多的内存。因为切片可以在需要时扩展以添加更多元素,所以切片比数组更常用。

切片是通过在左方括号[]和右方括号{}之间声明数据类型来定义的。

整数切片如下所示:

[]int{-3, -2, -1, 0, 1, 2, 3}

浮点数的切片如下所示:

[]float64{3.14, 9.23, 111.11, 312.12, 1.05}

字符串切片如下所示:

[]string{"shark", "cuttlefish", "squid", "mantis shrimp"}

让我们将字符串切片定义为seaCreatures:

seaCreatures := []string{"shark", "cuttlefish", "squid", "mantis shrimp"}

我们可以通过调用这个变量来打印它们:

fmt.Println(seaCreatures)
Output[shark cuttlefish squid mantis shrimp

我们可以使用append关键字将元素添加到切片中。下面的命令将字符串’ seahorse '添加到切片中:

seaCreatures = append(seaCreatures, "seahorse")

你可以通过打印它来验证它是否被添加了:

fmt.Println(seaCreatures)
Output[shark cuttlefish squid mantis shrimp seahorse

如你所见,如果你需要管理未知大小的元素,切片比数组更通用。

Maps

map是Go内置的哈希或字典类型。map使用作为一对来存储数据。这在编程中很有用,可以通过索引(本例中是键)快速查找值。例如,你可能想保存一个用户映射,按用户ID索引。键是用户ID, user对象是值。map的构造方法是使用关键字map,后面是方括号[]中的键数据类型,后面是花括号中的值数据类型和键值对。

map[key]value{}

map通常用于保存相关的数据,例如ID中包含的信息,如下所示:

map[string]string{"name": "Sammy", "animal": "shark", "color": "blue", "location": "ocean"}

您会注意到,除了大括号之外,整个映射中还有冒号。冒号左边的单词是键。在Go中键可以是任何可比较的类型。可比类型是基本类型,如stringsints等。基本类型是由语言定义的,不是由任何其他类型组合而成的。虽然它们可以是用户定义的类型,但保持简单是最佳实践,以避免编程错误。上述字典中的键是:nameanimalcolorlocation

冒号右边的单词是值。值可以由任何数据类型组成。上述字典中的值是:Sammysharkblueocean

让我们将map存储在一个变量中并打印出来:

sammy := map[string]string{"name": "Sammy", "animal": "shark", "color": "blue", "location": "ocean"}
fmt.Println(sammy)
Outputmap[animal:shark color:blue location:ocean name:Sammy

如果我们想要分离萨米的颜色,我们可以通过调用sammy ["color"]来实现。我们把它打印出来:

fmt.Println(sammy["color"])
Outputblue

由于map提供了用于存储数据的键值对,因此它们可以成为Go程序中的重要元素。

总结

此时,您应该更好地了解Go中可供使用的一些主要数据类型。当您使用Go语言开发编程项目时,这些数据类型中的每一种都将变得非常重要。

相关文章:

理解Go中的数据类型

引言 数据类型指定了编写程序时特定变量存储的值的类型。数据类型还决定了可以对数据执行哪些操作。 在本文中&#xff0c;我们将介绍Go的重要数据类型。这不是对数据类型的详尽研究&#xff0c;但将帮助您熟悉Go中可用的选项。理解一些基本的数据类型能让你写出更清晰、性能…...

【人工智能导论】线性回归模型

一、线性回归模型概述 线性回归是利用函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。简单来说&#xff0c;就是试图找到自变量与因变量之间的关系。 二、线性回归案例&#xff1a;房价预测 1、案例分析 问题&#xff1a;现在要预测140平方的房屋的价格&…...

十大常见排序算法详解(附Java代码实现和代码解析)

文章目录 十大排序算法⛅前言&#x1f331;1、排序概述&#x1f334;2、排序的实现&#x1f335;2.1 插入排序&#x1f433;2.1.1 直接插入排序算法介绍算法实现 &#x1f433;2.1.2 希尔排序算法介绍算法实现 &#x1f335;2.2 选择排序&#x1f433;2.2.1 选择排序算法介绍算…...

在Ubuntu上通过Portainer部署微服务项目

这篇文章主要记录自己在ubuntu上部署自己的微服务应用的过程&#xff0c;文章中使用了docker、docker-compose和portainer&#xff0c;在部署过程中遇到了不少问题&#xff0c;因为博主也是初学docker-compose&#xff0c;通过这次部署实战确实有所收获&#xff0c;在这篇文章一…...

软件测试基础学习

注意&#xff1a; 各位同学们&#xff0c;今年本人求职目前遇到的情况大体是这样了&#xff0c;开发太卷&#xff0c;学历高的话优势非常的大&#xff0c;公司会根据实际情况考虑是否值得培养&#xff08;哪怕技术差一点&#xff09;&#xff1b;学历稍微低一些但是技术熟练的…...

移动手机截图,读取图片尺寸

这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下&#xff0c;我们都曾遇到过这样的情况&#xff1a;相机拍摄出来的照片、网络下载的图片&#xff0c;尺寸五花八门&#xff0c;大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片&#xff0c;让它们更…...

服务器应用程序不可用的原因是什么引起的

服务器应用程序不可用的原因是什么引起的 服务器应用程序不可用的原因是什么引起的?其实服务器应用程序不可用可能是由多种原因引起的。主要包括软件故障、网络问题、硬件故障、安全问题、配置错误、容量不足、数据库问题等&#xff0c;具体详细服务器应用程序不可用的原因如下…...

使用SPY++查看窗口信息去排查客户端UI软件问题

目录 1、使用SPY++查看窗口的信息 2、使用SPY++查看某些软件UI窗口用什么UI组件实现的...

Flink CDC MySQL同步MySQL错误记录

1、启动 Flink SQL [appuserwhtpjfscpt01 flink-1.17.1]$ bin/sql-client.sh2、新建源表 问题1&#xff1a;Encountered “(” 处理方法&#xff1a;去掉int(11)&#xff0c;改为int Flink SQL> CREATE TABLE t_user ( > uid int(11) NOT NULL AUTO_INCREMENT COMME…...

深入了解 Linux 中的 AWK 命令:文本处理的瑞士军刀

简介 在Linux和Unix操作系统中&#xff0c;文本处理是一个常见的任务。AWK命令是一个强大的文本处理工具&#xff0c;专门进行文本截取和分析&#xff0c;它允许你在文本文件中查找、过滤、处理和格式化数据。本文将深入介绍Linux中的AWK命令&#xff0c;让你了解其基本用法和…...

【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限

文章目录 1. 功能介绍2. AuthFilter的配置3. AuthFilter实现分析4. 资料参考 过滤器的功能是检验经过网关的每一个请求&#xff0c;检查 token 中的信息是否有效。 注意是“认证检查”&#xff0c;而不是“权限” 1. 功能介绍 1、在用户完成登录后&#xff0c;程序会把用户相关…...

excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中,并按照文件名保存在新文件的不同sheet中

excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中&#xff0c;并按照文件名保存在新文件的不同sheet中 import pandas as pd import ositems os.listdir("./") sheetname"" for item in items:if item.__contains__(xls):dfpd.read_exc…...

IIS管理器无法打开。启动后,在任务栏中有,但是窗口不见了

找到IIS管理器启动程序的所在位置 并在cmd命令行中调用 inetmgr.exe /reset 进行重启 先查看IIS管理器属性&#xff0c;找到其位置 管理员模式打开cmd命令行&#xff0c;并切换到上面的文件夹下运行Inetmgr.exe /reset 运行完成后可以重新看到IIS窗口 原因&#xff1a;由于某…...

使用VBA实现快速模糊查询数据

实例需求&#xff1a;基础数据保存在Database工作表中&#xff0c;如下图所示。 基础数据有37个字段&#xff0c;上图仅展示部分字段内容&#xff0c;下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字&#xff0c;包…...

spring boot flowable多人前加签

1、前加签插件 package com.xxx.flowable.cmd;import com.xxx.auth.security.user.SecurityUser; import com.xxx.commons.ApplicationContextHolder; import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; import org.apache.co…...

结构体运算符重载

1.降序 struct Point{int x, y;//重载比较符bool operator < (const Point &a) const{return x > a.x;//当前元素大时&#xff0c;是降序} };2.升序 struct Point{int x, y;//重载比较符 // bool operator < (const Point &a) const{ // return x…...

幽默直观的文档作者注释

注释是程序中非常重要的一部分&#xff0c;在不同的编程语言中&#xff0c;注释的风格和语言描述会有所不同。以下是一些常用的注释风格和语言描述&#xff1a; 直观注释&#xff1a;这种注释使用简洁、明了的语言&#xff0c;帮助读者快速地理解代码。例如&#xff0c;代码中…...

前端开发网站推荐

每个人都会遇见那么一个人&#xff0c;永远无法忘却&#xff0c;也永远不能拥有。 以下是一些可以用来查找和比较前端框架的推荐网站&#xff1a; JavaScript框架比较&#xff1a; 这些网站提供了对不同JavaScript框架和库的详细比较和评估。 JavaScripting: 提供了大量的JavaS…...

【C语言】通讯录管理系统(保姆级教程+内含源码)

C系列文章目录 目录 C系列文章目录 前言 一&#xff0c;模块化编程 二&#xff0c;系统框架构建 1.成员信息的创建 2.菜单实现 3.系统功能声明 三、系统功能实现 1.初始化通讯录 2.增加联系人 3.显示所有联系人 4.根据姓名查找位置 5.删除指定联系人 6.查找指定联…...

python自动解析301、302重定向链接

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 使用模块requests 方式代码如下&#xff1a; import requests url_string"http://******" r requests.head(url_string, streamTrue) print r.h…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...

AWSLambda之设置时区

目标 希望Lambda运行的时区是东八区。 解决 只需要设置lambda的环境变量TZ为东八区时区即可&#xff0c;即Asia/Shanghai。 参考 使用 Lambda 环境变量...