Go后端开发 -- main函数 变量 常量 函数
Go后端开发 – main函数 & 变量 & 常量 & 函数
文章目录
- Go后端开发 -- main函数 & 变量 & 常量 & 函数
- 一、第一个main函数
- 1.创建工程
- 2.main函数解析
- 二、变量声明
- 1.单变量声明
- 2.多变量声明
- 三、常量
- 1.常量的定义
- 2.优雅的常量 iota
- 四、函数
- 1.函数返回多个值
- 2.init函数与import本地导包
- 3.import匿名导包和别名导包
- 4.import导入的包不在同一个路径下
- 5.函数参数
- 5.1.值传递
- 5.2.引用传递(指针传递)
一、第一个main函数
1.创建工程
在$GOPATH/src
目录下创建一个hello.go
文件:
输入以下代码:
package main //程序的包名
//只要包含main函数的文件,就是main包
//main是主包,与工程文件名没有任何关系/*
import "fmt" //导入格式化的包
import "time"
*///也可以一块导入包,导入多个包建议这种方案
import ("fmt""time"
)func main() { // 函数的}一定和函数名在一行,否则编译报错fmt.Println("hello Go!")time.Sleep(1 * time.Second)
}
终端运行:
go run
表示直接编译go语言并执行应用程序,一步完成;
也可以通过go build
先编译,然后再执行:
2.main函数解析
- 第一行代码
package main
定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main
。package main
表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 - 下一行
import "fmt"
告诉 Go 编译器这个程序需要使用fmt
包(的函数,或其他元素),fmt
包实现了格式化 IO(输入/输出)的函数。 - 下一行
func main()
是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
注意:这里面go语言的语法,定义函数的时候,‘{’ 必须和函数名在同一行,不能另起一行。 - 注释,单行注释是最常见的注释形式,你可以在任何地方使用以
//
开头的单行注释。多行注释也叫块注释,均已以/*
开头,并以*/
结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。 - 下一行
fmt.Println(...)
可以将字符串输出到控制台,并在最后自动增加换行字符 \n。 使用 fmt.Print(“hello, world\n”) 可以得到相同的结果。Print
和Println
这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。 - go语言的语法中,加不加
;
都可以,建议不加 - 导入多个包的时候建议以下这种语法:
二、变量声明
1.单变量声明
声明变量的一般形式是使用var
关键字;
- 第一种:指定变量类型,声明后若不赋值,使用默认值0。
var v_name v_type
v_name = value
var v_name v_type = value
package mainimport "fmt"func main() {var a int = 5fmt.Printf("a = %d\n", a)
}
- 第二种:根据值自行判定变量类型
var v_name = value
package mainimport "fmt"func main() {var b = 10fmt.Printf("b = %d\n", b)
}
- 第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误(最常用)
v_name := value
:=
表示既初始化,又赋值
package mainimport "fmt"func main() {//var a int = 5//var b = 10a := 10fmt.Printf("a = %d\n", a)
}
- 全局变量的声明
package mainimport "fmt"var a int = 100
var b = "abc"// 这种分解的写法,一般用于声明全局变量
var (c intd bool
)func main() {fmt.Println("a = ", a)fmt.Println("b = ", b)
}
使用var
可以声明全局变量;
package mainimport "fmt"var a int = 100
var b = "abc"c := 1.2func main() {fmt.Println("a = ", a)fmt.Println("b = ", b)fmt.Println("c = ", c)
}
使用:=
不可以声明全局变量,只能够在函数体内使用;
- 可以使用
%T
格式化输出变量的类型
package mainimport "fmt"func main() {//默认值var a intfmt.Printf("a = %d\n", a)fmt.Printf("type of a = %T\n", a)var b int = 10fmt.Printf("b = %d\n", b)fmt.Printf("type of b = %T\n", b)var c = "golang"fmt.Printf("c = %s\n", c)fmt.Printf("type of c = %T\n", c)d := 20.15fmt.Printf("d = %f\n", d)fmt.Printf("type of d = %T\n", d)
}
2.多变量声明
- 方法一:
var c, d int = 1, 2
- 方法二:
var e, f = 123, "Golang"
- 方法三:
g, h := 333, "需要在函数体内实现"
- 方法四:
- 可以使用
_
来接受赋值,表示赋值被废弃,_
不具备读特性
package mainimport "fmt"var x, y int// 这种分解的写法,一般用于声明全局变量
var (a intb bool
)var c, d int = 1, 2
var e, f = 123, "Golang"//这种不带声明格式的只能在函数体内声明
//g, h := 123, "需要在func函数体内实现"func main() {g, h := 333, "需要在函数体内实现"//hfmt.Println(x, y, a, b, c, d, e, f, g, h)//不能对g变量再次做初始化声明//g := 400_, value := 7, 5 实际上7的赋值被废弃,变量 _ 不具备读特性//fmt.Println(_)fmt.Println(value)var (vv int = 15cc bool = false)fmt.Println(vv, cc)
}
三、常量
1.常量的定义
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
- 常量的定义格式:
const identifier [type] = value
你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。
//显式类型定义
const b string = "abc"
//隐式类型定义:
const b = "abc"
例如:
package mainimport "fmt"func main() {const LENGTH int = 10const WIDTH int = 5var area intconst a, b, c = 1, false, "golang"area = LENGTH * WIDTHfmt.Println("面积为:", area)fmt.Println(a, b, c)
}
- 常量还可以用作枚举类型:
const (UNKNOW = 0FEMALE = 1MALE = 2
)
数字 0、1 和 2 分别代表未知性别、女性和男性。
- 常量可以用
len(), cap(), unsafe.Sizeof()
常量计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过:
package mainimport ("fmt""unsafe"
)const (a = "golang"b = len(a)c = unsafe.Sizeof(a)
)func main() {fmt.Println(a, b, c)
}
unsafe.Sizeof(a)
输出的结果是16 。
字符串类型在 go 里是个结构, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节。
2.优雅的常量 iota
有些概念有名字,并且有时候我们关注这些名字,甚至(特别)是在我们代码中。
const (CCVisa = "Visa"CCMasterCard = "MasterCard"CCAmericanExpress = "American Express"
)
在其他时候,我们仅仅关注能把一个东西与其他的做区分。有些时候一件事没有本质上的意义。比如,我们在一个数据库表中存储产品,我们可能不想以 string 存储他们的分类。我们不关注这个分类是怎样命名的,此外,该名字在市场上一直在变化,我们仅仅关注它们是怎么彼此区分的。
const (CategoryBooks = 0CategoryHealth = 1CategoryClothing = 2
)
使用 0, 1, 和 2 代替,我们也可以选择 17, 43, 和 61。这些值是任意的
在 Go,常量有许多微妙之处。当用好了,可以使得代码非常优雅且易维护的。
自增长
- 在 golang 中,一个方便的习惯就是使用
iota
标示符,它简化了常量用于增长数字的定义,给以上相同的值以准确的分类。 - 可以在
const()
添加一个关键字iota
,只在第一行添加iota,之后的每行的iota
都会累加1,第一行的iota
默认值是0
const (CategoryBooks = iota // 0CategoryHealth // 1CategoryClothing // 2
)
iota和表达式
iota
可以做更多事情,而不仅仅是 increment。更精确地说,iota
总是用于 increment,但是它可以用于表达式,在常量中的存储结果值。- 每行的iota都会参与表达式
package mainimport ("fmt"
)type Allergen intconst (IgEggs Allergen = 1 << iota // 1 << 0 which is 00000001IgChocolate // 1 << 1 which is 00000010IgNuts // 1 << 2 which is 00000100IgStrawberries // 1 << 3 which is 00001000IgShellfish // 1 << 4 which is 00010000
)func main() {fmt.Println(IgEggs | IgChocolate | IgShellfish)
}
- 这个工作是因为当你在一个const组中仅仅有一个标示符在一行的时候,它将使用增长的iota取得前面的表达式并且再运用它。在 Go 语言的spec中, 这就是所谓的隐性重复最后一个非空的表达式列表.
- 如果你对鸡蛋,巧克力和海鲜过敏,把这些 bits 翻转到 “on” 的位置(从左到右映射 bits)。然后你将得到一个 bit 值
00010011
,它对应十进制的 19。
package mainimport ("fmt"
)type ByteSize float64const (_ = iota // ignore first value by assigning to blank identifierKB ByteSize = 1 << (10 * iota) // 1 << (10 * 1)MBGBTBPBEBZBYB
)func main() {fmt.Println(KB, MB, GB)
}
- 当你在把两个常量定义在一行的时候会发生什么?
package mainimport ("fmt"
)const (Apple, Banana = iota + 1, iota + 2Cherimoya, DurianElderberry, Fig
)func main() {fmt.Println(Apple, Banana, Cherimoya, Durian)
}
- 在下一行增长,而不是立即取得它的引用。
- 如果从中间改变表达式,后面的行也会跟着改变
package mainimport ("fmt"
)const (a, b = iota + 1, iota + 2c, de, fg, h = iota * 2, iota * 3i, j
)func main() {fmt.Println("a = ", a, "b = ", b)fmt.Println("c = ", c, "d = ", d)fmt.Println("e = ", e, "f = ", f)fmt.Println("g = ", g, "h = ", h)fmt.Println("i = ", i, "j = ", j)
}
- iota只能配合const()进行使用,只有在const()中有累加效果
四、函数
1.函数返回多个值
Go函数的定义:
func 函数名(形参1 类型, 形参2 类型, ...) (返回值1类型, 返回值2类型, ...){// 函数体return 返回值1, 返回值2
}
例如:
Go 函数可以返回多个值
- 返回值为匿名
package mainimport "fmt"func swap(x, y string) (string, string) {return y, x
}func main() {a, b := swap("golang", "c++")fmt.Println(a, b)
}
- 返回值有名称
- 有名称的返回值也相当于函数中的形参
- 有名称的返回值需要在函数体中给返回值参数赋值,如果不赋值直接返回值也是可以的
- 没有赋值之前,返回值参数都默认值为0,是作为局部变量来赋值的,作用域为当前函数的{}内
package mainimport "fmt"func prt(a string, b int) (r1 int, r2 int) {fmt.Println("a = ", a)fmt.Println("b = ", b)fmt.Println(r1, r2) // 没赋值之前,r1和r2默认值为0,相当于函数中的形参//给有名称的返回值变量赋值r1 = 1000r2 = 2000return
}func main() {a, b := prt("golang", 123)fmt.Println(a, b)
}
- 各个参数类型或者各个返回值类型都是一样的,可以放到一起声明类型
func swap(x, y string) (r1, r2 string) {return y, x
}
2.init函数与import本地导包
- init 函数可在package main中,可在其他package中,可在同一个package中出现多次。
- main 函数只能在package main中。
执行顺序
- golang里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。
- 虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。
- init函数是在主程序开始之前做的一些预处理,如加载配置文件,加载数据库的内容,做环境变量的初始化等;
- go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package main就必须包含一个main函数。
- 程序的初始化和执行都起始于main包。
- 如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。
- 当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。
- 等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。
- 下图详细地解释了整个执行过程:
例子:
- 代码结构:
- go.mod
module function_gogo 1.20
- Lib1.go
package Initlib1import "fmt"// lib1提供的API
func lib1Test() {fmt.Println("lib1Test()...")
}func init() {fmt.Println("lib1")
}
- Lib2.go
package Initlib2import "fmt"// lib2提供的API
func lib2Test() {fmt.Println("lib2Test()...")
}func init() {fmt.Println("lib2")
}
- main.go
- 在使用Go Modules导入本地包的时候,在包名的前面需要指定模块名才可以导入
比如上面的go.mod
中模块名是function_go
,导入包的路径就是function_go/InitLib1
- 在导入了包之后,需要调用包中的方法,可以直接
包名.方法()
- 在使用Go Modules导入本地包的时候,在包名的前面需要指定模块名才可以导入
package mainimport ("function_go/InitLib1""function_go/InitLib2"
)func main() {InitLib1.Lib1Test()InitLib2.Lib2Test()
}
- 如果要使用GOPATH机制,在
main.go
中使用import
导本地包的时候,一定要在包名前加上该包路径相对于GOPATH
的路径
运行结果
lib1
lib2
libmain init
libmian main
- 如果在Lib1中导入Lib2包,mian包不导入Lib2
package InitLib1import ("fmt""goProject/function_go/InitLib2"
)// lib2提供的API
func lib2Test() {fmt.Println("lib2Test()...")
}func init() {fmt.Println("lib1")
}
输出结果:
lib2
lib1
libmain init
libmian main
main包以及Lib1包都导入了Lib2,但是只出现一次,并且最先输出
-
说明如果一个包会被多个包同时导入,那么它只会被导入一次,而先输出lib2是因为main包中导入Lib1时,Lib1又导入了Lib2,会首先初始化Lib2包的东西
-
如果一个函数名首字母是大写的,说明此函数是对外开放的,如果是小写的,只能在当前包内调用,无法对外开放
3.import匿名导包和别名导包
- 在go中,如果我们导入了一个包,但是没有使用其中的接口,那么编译就会报错;
- 如果我们不想使用包中的接口,但是想导入包执行init函数,我们可以选择匿名导入;
- 在包的路径前加上
_
就代表匿名导入
package mainimport (_ "function_go/InitLib1" //匿名导包_ "function_go/InitLib2"
)func main() {InitLib1.Lib1Test()InitLib2.Lib2Test()
}
- 也可以给导入的包起别名
package mainimport ("function_go/InitLib1"myLib2 "function_go/InitLib2" //给包起别名
)func main() {InitLib1.Lib1Test()myLib2.Lib2Test()
}
- 将包中的内容全部导入当前包
在要导入的包前加.
,表示将包中所有内容导入当前包,可以直接调用方法,不需要在前面指定包名
package mainimport ("goProject/function_go/InitLib1". "goProject/function_go/InitLib2" //将改包所有的方法导入main包
)func main() {InitLib1.Lib1Test()Lib2Test() //直接调用方法
}
4.import导入的包不在同一个路径下
项目结构:
fun_go和function_go是两个不同的模块,如果要在fun_go下的main.go中导入function_go/InitLib1包,也需要指定模块名:
package mainimport ("fmt""function_go/InitLib1" // 指定模块名
)func main() {InitLib1.Lib1Test()fmt.Println("go")
}
5.函数参数
函数如果使用参数,该变量可称为函数的形参;形参就像定义在函数体内的局部变量。
调用函数,可以通过两种方式来传递参数:
5.1.值传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
以下定义了 swap() 函数:
package mainimport "fmt"func swap(x, y int) {var temp inttemp = xx = yy = temp
}func main() {a := 100b := 200fmt.Println("交换前a的值:", a)fmt.Println("交换前b的值:", b)swap(a, b)fmt.Println("交换后a的值:", a)fmt.Println("交换后b的值:", b)
}
5.2.引用传递(指针传递)
指针
- Go 语言的取地址符是
&
,放到一个变量前使用就会返回相应变量的内存地址。
package mainimport "fmt"func main() {a := 100fmt.Println(&a)
}
- 引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
package mainimport "fmt"func swap(x, y *int) {var temp inttemp = *x*x = *y*y = temp
}func main() {a := 100b := 200fmt.Println("交换前a的值:", a)fmt.Println("交换前b的值:", b)swap(&a, &b)fmt.Println("交换后a的值:", a)fmt.Println("交换后b的值:", b)
}
- golang可以支持二级指针
package mainimport "fmt"func main() {a := 100var p *int = &avar pp **int = &pfmt.Println(&p)fmt.Println(pp)
}
相关文章:
Go后端开发 -- main函数 变量 常量 函数
Go后端开发 – main函数 & 变量 & 常量 & 函数 文章目录 Go后端开发 -- main函数 & 变量 & 常量 & 函数一、第一个main函数1.创建工程2.main函数解析 二、变量声明1.单变量声明2.多变量声明 三、常量1.常量的定义2.优雅的常量 iota 四、函数1.函数返回…...
2023/12/30 c++ work
定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算…...
ctfshow——文件上传
文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159web160web 161 文件上传思路 web 151 打开页面显示:前台校验不可靠。说明这题是前端验证。 右键查看源代码,找到与上传点有关的前端代码:…...
【RocketMQ每日一问】RocketMQ SQL92过滤用法以及原理?
1.生产端 public class SQLProducer {public static int count 10;public static String topic "xiao-zou-topic";public static void main(String[] args) {DefaultMQProducer producer MQUtils.createLocalProducer();IntStream.range(0, count).forEach(i -&g…...
Go语言中的包管理工具之Go Path的使用
GoLang 中常用的包管理的方式 1 )概述 常用的有三种 Go PathGo VendorGo Modules 2 )发展历程 早期go的包管理存在很大缺陷,甚至可以说没有官方统一的包管理工具 一方面官方在努力发布一些实验性的包管理工具。同时也出现了很多社区开发…...
cocos creator(2.4.7版本) webview 可以在上层添加UI控件
实现原理:cocos本身在平台中属于view,所以可以把webview放在底层,以达到目标。 实现过程:参考 cocos creator(2.4.7版本) videoplayer 可以在上层添加UI控件() 需要增加以下过程: …...
2023 年四川省职业院校技能大赛“信息安全管理与评估”样题
2023 年四川省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题 竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 第一阶段:模块一 网络平台搭建与设…...
ubuntu2204,mysql8.x安装
ubuntu 2204, MySQL8.x安装 sudo apt-get update sudo apt-get upgrade# 习惯性的先设置一下时区,这里我使用东八区 date -R # 若发现时间正常则无需设置tzselect# 依次选择 4 -> 10 -> 1 -> 1cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate -R# 同步时间…...
CG Magic分享云渲染和本地渲染之间的区别有什么?
无论是效果图渲染还是影视渲染,对于3D设计师来说都是常见的渲染方式就是云渲染和本地渲染。 本地电脑渲染是指将渲染任务分配给本地计算机进行处理,而云渲染是指将渲染任务上传至云端服务器进行处理。 对于一些初入行业的新手朋友来说,会在想…...
【算法与数据结构】763、LeetCode划分字母区间
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题要求为: 1.尽可能多的划分片段2.字母只能出现在一个片段中3.片段连接起来仍然是s&…...
新火种AI|人形机器人敲响上市罗,首日市值高达390亿港元
作者:一号 编辑:彩云 史上第一次!人形机器人在港交所和人类一起敲锣。 12月29日,在港交所现场,熊猫机器人优悠走上舞台,将手中的锣锤递给了优必选创始人、董事长兼CEO周剑,而同周剑一同准…...
SpringMVC框架
SpringMVC 三层架构MVC模式SpringMVC入门案例总结 三层架构 表现层(web) 页面数据的收集,产出页面 业务逻辑层(service) 业务处理 数据访问层(Dao) 数据持久化 MVC模式 SpringMVC 基于Java…...
FreeRTOS——计数型信号量知识总结及实战
1计数型信号量概念 1)计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源 2)适用场景: 事件计数: 当每次事件发生后,在事件处理函数中释放计数型信号量(计数值1&#x…...
Linux下Docker Engine安装后的一些配置步骤
一些安装后的配置令Linux主机可以更好地与Docker配合使用。 0x01 以非root用户身份管理Docker Docker守护进程绑定到Unix套接字,而不是TCP端口。默认情况下,root用户拥有Unix套接字,而其他用户只能使用 sudo. Docker守护进程始终以root用户身份运行。 …...
【并发设计模式】聊聊Balking是如何实现以及具体原理
前面的等待唤醒,其实是一个线程等待执行满足条件的逻辑,会一直死等,但是并不是全部的场景都需要死等。比如我们去坐车的时候,公交一直没来,那么就可以不去了。而等待唤醒是公交没来我就等他来了再去。 Guarded Suspen…...
dubbo的一些问题思考
1.dubbo是啥 Dubbo 是一个高性能的 Java RPC(远程过程调用)框架,用于构建分布式服务架构。由阿里巴巴开发并开源,作为一个分布式服务框架,Dubbo 提供了丰富的功能,包括服务治理、远程调用、负载均衡、容错机…...
盛最多水的容器(力扣11题)
例题: 分析: 这道题给出了一个数组,数组里的元素可以看成每一个挡板,要找到哪两个挡板之间盛的水最多,返回盛水量的最大值。这其实是一个双指针问题。 我们可以先固定第一个挡板( i )和最后一个挡板( j ),…...
.babky勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
导言: 网络安全威胁不断进化,其中.babky勒索病毒引起了广泛关注。这篇文章91数据恢复将深入介绍.babky的狡猾特征,以及在遭受其袭击时如何高效地恢复被加密的数据,并提供实用的预防方法。当面对被勒索病毒攻击导致的数据文件加密…...
20240103-通过布局让自己的生活有有意义人生有价值
最近听到看到的一些词 心力、稀缺、卓有成效、知行合一、致良知、心即理、事上练 最近琢磨出这么一个道理,就是任何人做事情其实都有内心趋势和一套适合他自己的内心驱动的方法。我们经常意识不到,我时常也会去寻求做一件事,是不是有特定的…...
JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性
目录 前言 一、站在开发视角,从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a)简介 b)使用方法 c)使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Opt…...
八股文打卡day11——计算机网络(11)
面试题:HTTP多个TCP连接怎么实现? 我的回答: 1.HTTP1.0的时候,一个TCP连接只能进行一次请求响应。可以建立多个连接到服务器,这样就可以同时进行多个请求响应,提高传输效率。 2.HTTP1.1推出了持久连接&am…...
在Android设备上设置和使用隧道代理HTTP
随着互联网的深入发展,网络信息的传递已经成为人们日常生活中不可或缺的一部分。对于我们中国人来说,由于某些特殊的原因,访问国外网站时常常会遇到限制。为了解决这个问题,使用代理服务器成为了许多人的选择。而在Android设备上设…...
Paddle3D 2 雷达点云CenterPoint模型训练
2 Paddle3D 雷达点云CenterPoint模型训练–包含KITTI格式数据地址 2.0 数据集 百度DAIR-V2X开源路侧数据转kitti格式。 2.0.1 DAIR-V2X-I\velodyne中pcd格式的数据转为bin格式 参考源码:雷达点云数据.pcd格式转.bin格式 def pcd2bin():import numpy as npimport…...
RabbitMQ集群的简单说明
1.普通集群(副本集群) 当集群中某一时刻master主节点宕机,可以对master中Queue中的消息进行备份。而就算master宕机了,从节点不会对外提供服务,等到master节点恢复后,系统才会恢复正常。 主从架构的缺点是队列中的消息只是位于主节…...
支付宝沙箱支付-验签出错之编码集异常
异常信息 invalid-signature 错误 验签出错 错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为: alipay_sdkalipay-sdk-java-dynamicVersionNo&....官方通用…...
图像分割-漫水填充法 floodFill (C#)
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的VB版本请访问:图像分割-漫水填充法 floodFill-CSDN博客 FloodFill方法是一种图像处理算法,它的目的是…...
在pycharm中jupyter连接上了以后显示无此库,但是确实已经安装好了某个库,使用python可以跑,但是使用ipython就跑不了
今天遇到一个事情,就是用pycharm的jupyter时,连接不上,后来手动连接上了以后,发现环境好像不对。 一般来说,这里会是python3,所以里面的环境也是普通python的环境,并没有我下载的库,…...
C++多态性——(3)动态联编的实现——虚函数
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 成功的秘诀就在于多努力一次ÿ…...
docker部署mysql
1.查找mysql镜像 [rootVM-4-5-centos ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-sourc…...
python代码大全(持续更新)
读写文件 # 读取文件 with open(file.txt, r) as file:content file.read()# 写入文件 with open(file.txt, w) as file:file.write(Hello, World!)HTTP请求 import requestsresponse requests.get(https://api.example.com/data) data response.json()JSON处理 import j…...
网站建设没有图片/嘉兴百度seo
一、list转字符串命令:.join(list)其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等如:list [1, 2, 3, 4, 5].join(list) 结果即为:12345,.join(list) 结果即为:1,2,3,4,5二…...
wordpress邮件订阅功能/seo必备工具
部署Docker 运行以下命令,安装Docker存储驱动的依赖包。 dnf install -y device-mapper-persistent-data lvm2 运行以下命令,添加稳定的Docker软件源。 dnf config-manager --add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo…...
做一个网站一般需要多少钱/青岛网站排名提升
[转]POI大数据量Excel解决方案参考文章: (1)[转]POI大数据量Excel解决方案 (2)https://www.cnblogs.com/justbeginning/p/3833041.html 备忘一下。...
温岭网站建设公司/外链系统
Description Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流。不过,为此FJ必须在奶牛们居住的N(1 < N < 10,000)块草地中选一些建上无线电通讯塔,来保证任意两块草地间都存在手机信号。所有的N块草地按1..N 顺次编号。…...
如何用ps做网站首页/全国疫情最新消息
前言: 由于数据库设计原因,需要对数据进行行转列操作,列的情况比较多,不唯一,所以需要动态创建行转列。 环境: Mysql 5.7数据库 内容讲解 今天的工作主要分为两个阶段,首先要熟悉静态行转列操…...
简洁好看的网站/免费推广方法有哪些
在很多情况下,对于监控的安装会有很多人会有疑问。监控作为弱电行业中的一大类,施工人员通常要根据客户的需求进行施工。但对于不同客户的不同需求,要想满足就必须清楚不同的安装方式。今天,就来说说几种网络监控系统安装的几种传…...