go学习笔记
1基础搭建
1.1,安装vscode https://code.visualstudio.com/download 64位
1.2,Windows 下搭建Go 开发环境-安装和配置 SDK
SDK 的全称(Software Development Kit 软件开发工具包)
Go 语言的官网为:golang.org , 因为各种原因,可能无法访问
SDK 下载地址:Golang 中国 https://www.golangtc.com/download。
选择对应的 sdk 版本
Windows 下:根据自己系统是 32 位还是 64 位进行下载:
32 位系统:go1.9.2.windows-386.zip
64 位系统:go1.9.2.windows-amd64.zip
如何测试我们的 go 的 sdk 安装成功。
windows 下配置 Golang 环境变量:
1.3,Linux 下搭建 Go 开发环境-安装和配置 SDK
Linux 下 SDK 的各个版本说明:
Linux 下:根据系统是 32 位还是 64 位进行下载:
32 位系统:go1.9.2.linux-386.tar.gz
64 位系统:go1.9.2.linux-amd64.tar.gz
如何确认你的 linux 是多少位
请注意:安装路径不要有中文或者特殊符号如空格等
SDK 安装目录建议: linux 放在 /opt 目录下
安装时,解压即可,我们使用的是 tar.gz
步骤 1: 将 go1.9.2.linux-amd64.tar.gz 传输到 ubuntu
步骤 2: 将 go1.9.2.linux-amd64.tar.gz 拷贝到 /opt 下
步骤 3: cd /opt
步骤 4:tar -zxvf go1.9.2.linux-amd64.tar.gz [解压后,就可以看到一个 go 目录]
步骤 5: cd go/bin
步骤 6:./go version
Linux 下配置 Golang 环境变量
步骤 1:使用 root 的权限来编辑 vim /etc/profile 文件
步骤 2: 如果需要生效的话,需要注销一下(重新登录),再使用
2,语法学习
2.1,Println 输出 “hello,world”
对上图的说明
1)go 文件的后缀是 .go
2) package main
表示该 hello.go 文件所在的包是 main, 在 go 中,每个文件都必须归属于一个包。
3) import “fmt”
表示:引入一个包,包名 fmt, 引入该包后,就可以使用 fmt 包的函数, 比如:fmt.Println
4) func main() {
}
func 是一个关键字,表示一个函数。
main 是函数名,是一个主函数,即我们程序的入口。
fmt.Println(“hello”)
表示调用 fmt 包的函数 Println 输出 “hello,world”
通过 go build 命令对该 go 文件进行编译,生成 .exe 文件.
运行 hello.exe 文件即可
注意:通过 go run 命令可以直接运行 hello.go 程序 [类似执行一个脚本文件的形式]
2.2,Golang 执行流程分析
如果是对源码编译后,再执行,Go 的执行流程如下图
如果我们是对源码直接 执行 go run 源码,Go 的执行流程如下图
- 两种执行流程的方式区别
- 1) 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行
- 2) 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多。
- 3) 如果我们是直接 go run go 源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发环境,否则无法执行
- 1) 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行
2.3, 编译和运行说明
1)有了 go 源文件,通过编译器将其编译成机器可以识别的二进制码文件。
2)在该源文件目录下,通过 go build 对 hello.go 文件进行编译。可以指定生成的可执行文件名,在
windows 下 必须是 .exe 后缀。
3) 如果程序没有错误,没有任何提示,会在当前目录下会出现一个可执行文件(windows 下是.exe Linux 下是一个可执行文件),该文件是二进制码文件,也是可以执行的程序。
4) 如果程序有错误,编译时,会在错误的那行报错。有助于程序员调试错误.
5) 运行有两种形式
2.4,
2.4.1
Golang 官方标准库 API 文档, https://golang.org/pkg
Golang 中文网 在线标准库文档: Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国
Golang 程序编写的规则:
1),go 文件的后缀 .go
2),go 程序区分大小写
3),go 的语句后,不需要带分号
4), go 定义的变量,或者 import 包,必须使用,如果没有使用就会报错
5), go 中,不要把多条语句放在同一行。否则报错
2.4.2 Golang 变量和语法
第一种:指定变量类型,声明后若不赋值,使用默认值
第二种:根据值自行判定变量类型(类型推导)
第三种:省略 var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误
多变量声明
在编程中,有时我们需要一次性声明多个变量,Golang 也提供这样的语法
如何一次性声明多个全局变量【在 go 中函数外部定义变量就是全局变量】
该区域的数据值可以在同一类型范围内不断变化(重点)
变量在同一个作用域(在一个函数或者在代码块)内不能重名
变量=变量名+值+数据类型,这一点请大家注意,变量的三要素
Golang 的变量如果没有赋初值,编译器会使用默认值, 比如 int 默认值 0 string 默认值为空串,小数默认为 0
变量的声明,初始化和赋值
数据类型的基本介绍:
整数的各个类型
int 的无符号的类型:
int 的其它类型的说明:
整型的使用细节:
Golang 各整数类型分:有符号和无符号,int uint 的大小和系统有关
Golang 的整型默认声明为 int 型
如何在程序查看某个变量的字节大小和数据类型 (使用较多)
Golang 程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型。【如:年龄】
bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。[二进制再详细说] 1byte = 8 bit
小数类型/浮点型
关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位说明:浮点数都是有符号的
尾数部分可能丢失,造成精度损失。 -123.0000901
说明:float64 的精度比 float32 的要准确.
说明:如果我们要保存一个精度高的数,则应该选用 float64
浮点型的存储分为三部分:符号位+指数位+尾数位 在存储过程中,精度会有丢失
浮点型使用细节
Golang 浮点类型有固定的范围和字段长度,不受具体 OS(操作系统)的影响
Golang 的浮点型默认声明为 float64 类型。
浮点型常量有两种表示形式
十进制数形式:如:5.12 .512 (必须有小数点)
科学计数法形式:如:5.1234e2 = 5.12 * 10 的 2 次方 5.12E-2 = 5.12/10 的 2 次方
通常情况下,应该使用 float64 ,因为它比 float32 更精确。[开发中,推荐使用 float64]
Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存。
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而 Go 的字符串不同,它是由字节组成的
1)字符常量是用单引号('')括起来的单个字符。例如:var c1 byte = 'a' var c2 int = '中' var c3 byte = '9'
2)Go 中允许使用转义字符 '\’来将其后的字符转变为特殊字符型常量。例如:var c3 char = ‘\n’
// '\n'表示换行符
3)Go 语 言 的 字 符 使 用 UTF-8 编 码 , 如 果 想 查 询 字 符 对 应 的 utf8 码 值
查看字符编码(UTF-8)
英文字母-1 个字节 汉字-3 个字节
4)在 Go 中,字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值。
5)可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的 unicode 字符
字符类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码
布尔类型
bool 类型占 1 个字节
string 类型
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本
Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本,这样 Golang 统一使用 UTF-8 编码,中文乱码问题不会再困扰程序员
字符串一旦赋值了,字符串就不能修改了:在 Go 中字符串是不可变的
字符串拼接方式
当一行字符串太长时,需要使用到多行字符串,可以如下处理
基本数据类型的默认值
基本数据类型的相互转换
表达式 T(v) 将值 v 转换为类型 T
T: 就是数据类型,比如 int32,int64,float32 等等
v: 就是需要转换的变量
在转换中,比如将 int64 转成 int8 【-128---127】 ,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围
基本数据类型和string 的转换
在程序开发中,我们经常将基本数据类型转成 string,或者将 string 转成基本数据类型
方式 1:fmt.Sprintf("%参数", 表达式) 【个人习惯这个,灵活】
函数的介绍:
参数需要和表达式的数据类型相匹配
fmt.Sprintf().. 会返回转换后的字符串
方式 2:使用 strconv 包的函数
string 类型转基本数据类型
使用时 strconv 包的函数
string 转基本数据类型的注意事项
在将 String 类型转成 基本数据类型时,要确保 String 类型能够转成有效的数据,比如 我们可以把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数,如果这样做,Golang 直接将其转成 0 ,其它类型也是一样的道理. float => 0 bool => false
2.5 指针
分析一下基本数据类型在内存的布局.
指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
比如:var ptr *int = &num
举例说明:指针在内存的布局.
获取指针类型所指向的值,使用:*,比如:var ptr *int, 使用*ptr 获取 ptr 指向的值
值类型,都有对应的指针类型, 形式为 *数据类型,比如 int 的对应的指针就是 *int, float32
对应的指针类型就是 *float32, 依次类推。
值类型包括:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct
值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体 struct
引用类型:指针、slice 切片、map、管道 chan、interface 等都是引用类型
值类型:变量直接存储值,内存通常在栈中分配示意图:
引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由 GC 来回收
示意图:
内存的栈区和堆区示意图
系统保留关键字
系统的预定义标识符
算术运算符的使用
位运算符
其它运算符说明
键盘输入语句
- 导入 fmt 包
- 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf()
要求:可以从控制台接收用户信息,【姓名,年龄,薪水, 是否通过考试 】
使用 fmt.Scanln() 获取
使用 fmt.Scanf() 获取
原码、反码、补码
位运算符和移位运算符
Golang 中有 2 个移位运算符:
>>、<< 右移和左移,运算规则:
右移运算符 >>:低位溢出,符号位不变,并用符号位补溢出的高位
左移运算符 <<: 符号位不变,低位补 0
for 循环
方式1传统方式
方式2 for - range
如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而一个汉字在 utf8 编码是对应 3 个字节。
如何解决 需要要将 str 转成 []rune 切片.=> 体验一把
对应 for-range 遍历方式而言,是按照字符方式遍历。因此如果有字符串有中文,也是 ok
2.4.3 函数 包
包使用的注意事项和细节讨论
1),在给一个文件打包时,该包对应一个文件夹,比如这里的 utils 文件夹对应的包名就是 utils,
文件的包名通常和文件所在的文件夹名一致,一般为小写字母
2)当一个文件要使用其它包函数或变量时,需要先引入对应的包
引入方式 1:import "包名"
引入方式 2:
import (
"包名"
"包名"
)
package 指令在 文件第一行,然后是 import 指令
在 import 包时,路径从 $GOPATH 的 src 下开始,不用带 src , 编译器会自动从 src 下开始引入
3)为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似其它语言的 public ,这样才能跨包访问。比如 utils.go 的
4)在访问其它包函数,变量时,其语法是 包名.函数名, 比如这里的 main.go 文件中
5)如果包名较长,Go 支持给包取别名, 注意细节:取别名后,原来的包名就不能使用了
说明: 如果给包取了别名,则需要使用别名来访问该包的函数和变量
6)在同一包下,不能有相同的函数名(也不能有相同的全局变量名),否则报重复定义
7)如果你要编译成一个可执行程序文件,就需要将这个包声明为 main , 即 package main .这个就是一个语法规范,如果你是写一个库 ,包名可以自定义
return 语句
案例演示 1
请编写要给函数,可以计算两个数的和和差,并返回结果。
案例演示 2
一个细节说明: 希望忽略某个返回值,则使用 _ 符号表示占位忽略
函数使用的注意事项和细节讨论
1)函数的形参列表可以是多个,返回值列表也可以是多个。
2)形参列表和返回值列表的数据类型可以是值类型和引用类型。
3)函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写该函数可以被本包文件和其它包文件使用,类似 public , 首字母小写,只能被本包文件使用,其它包文件不能使用,类似 privat
4)函数中的变量是局部的,函数外不生效【案例说明】
5)基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值。
6)如果希望函数内的变量能修改函数外的变量(指的是默认以值传递的方式的数据类型),可以传入变量的地址&,函数内以指针的方式操作变量。从效果上看类似引用
7)Go 函数不支持函数重载
8)在 Go 中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用
9)函数既然是一种数据类型,因此在 Go 中,函数可以作为形参,并且调用
10)为了简化数据类型定义,Go 支持自定义数据类型
基本语法:type 自定义数据类型名 数据类型 // 理解: 相当于一个别名
案例:type myInt int // 这时 myInt 就等价 int 来使用了.
案例:type mySum func (int, int) int // 这时 mySum 就等价 一个 函数类型 func (int, int)
举例说明自定义数据类型的使用:
11)支持对函数返回值命名
12)使用 _ 标识符,忽略返回值
13)Go 支持可变参数
(3) 如果一个函数的形参列表中有可变参数,则可变参数需要放在形参列表最后。代码演示:
init 函数:
每一个源文件都可以包含一个 init 函数,该函数会在 main 函数执行前,被 Go 运行框架调用,也就是说 init 会在 main 函数前被调用
inti 函数的注意事项和细节
1)如果一个文件同时包含全局变量定义,init 函数和 main 函数,则执行的流程全局变量定义->init函数->main 函数
2)init 函数最主要的作用,就是完成一些初始化的工作,比如下面的案例
匿名函数:
Go 支持匿名函数,匿名函数就是没有名字的函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用。
匿名函数使用方式 1
在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次。 【案例演示】
匿名函数使用方式 2
将匿名函数赋给一个变量(函数变量),再通过该变量来调用匿名函数 【案例演示】
全局匿名函数
如果将匿名函数赋给一个全局变量,那么这个匿名函数,就成为一个全局匿名函数,可以在程序有效。
闭包
基本介绍:闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)
对上面代码的说明和总结
1)AddUpper 是一个函数,返回的数据类型是 fun (int) int
2)闭包的说明
返回的是一个匿名函数, 但是这个匿名函数引用到函数外的n ,因此这个匿名函数就和n 形成一个整体,构成闭包。
3) 大家可以这样理解: 闭包是类, 函数是操作,n 是字段。函数和它使用到 n 构成闭包。
4)当我们反复的调用 f 函数时,因为 n 是初始化一次,因此每调用一次就进行累计。
5)我们要搞清楚闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引用到的变量共同构成闭包
6)对上面代码的一个修改,加深对闭包的理解
字符串常用的系统函数
说明:字符串在我们程序开发中,使用的是非常多的,常用的函数需要同学们掌握[带看手册或者官方编程指南]:
1)统计字符串的长度,按字节 len(str)
2)字符串遍历,同时处理有中文的问题 r := []rune(str)
3)字符串转整数: n, err := strconv.Atoi("12")
4)整数转字符串 str = strconv.Itoa(12345)
5)字符串 转 []byte: var bytes = []byte("hello go")
6)[]byte 转 字符串: str = string([]byte{97, 98, 99})
7) 10 进制转 2, 8, 16 进制: str = strconv.FormatInt(123, 2) // 2-> 8 , 16
8)查找子串是否在指定的字符串中: strings.Contains("seafood", "foo") //true
9)统计一个字符串有几个指定的子串 : strings.Count("ceheese", "e") //4
10)不区分大小写的字符串比较(== 是区分字母大小写的): fmt.Println(strings.EqualFold("abc", "Abc")) // true
11)返回子串在字符串第一次出现的 index 值,如果没有返回-1 : strings.Index("NLT_abc", "abc") // 4
12)返回子串在字符串最后一次出现的 index,如没有返回-1 : strings.LastIndex("go golang", "go")
13)将指定的子串替换成 另外一个子串: strings.Replace("go go hello", "go", "go 语言", n) n 可以指定你希望替换几个,如果 n=-1 表示全部替换
14)按 照 指 定 的 某 个 字 符 , 为 分 割 标 识 , 将 一 个 字 符 串 拆 分 成 字 符 串 数 组 :
strings.Split("hello,wrold,ok", ",")
15)将字符串的字母进行大小写的转换: strings.ToLower("Go") // go strings.ToUpper("Go") // GO
16)将字符串左右两边的空格去掉: strings.TrimSpace(" tn a lone gopher ntrn ")
17)将字符串左右两边指定的字符去掉 : strings.Trim("! hello! ", " !") // ["hello"] //将左右两边 !
和 " "去掉
18)将字符串左边指定的字符去掉 : strings.TrimLeft("! hello! ", " !") // ["hello"] //将左边 ! 和 " "去掉
19)将字符串右边指定的字符去掉 : strings.TrimRight("! hello! ", " !") // ["hello"] //将右边 ! 和 " "去掉
20)判断字符串是否以指定的字符串开头: strings.HasPrefix("ftp://192.168.10.1", "ftp") // true
21)判断字符串是否以指定的字符串结束: strings.HasSuffix("NLT_abc.jpg", "abc") //false
时间和日期相关函数
如何获取到其它的日期信息
方式 1: 就是使用 Printf 或者 SPrintf
方式二: 使用 time.Format() 方法完成:
内置函数
1)len:用来求长度,比如 string、array、slice、map、channel
2)new:用来分配内存,主要用来分配值类型,比如 int、float32,struct...返回的是指针举例说明 new 的使用:
上面代码对应的内存分析图:
24.4,数组与切片
数组的定义
var 数组名 [数组大小]数据类型
var a [5]int
赋初值 a[0] = 1 a[1] = 30 ....
1)数组的地址可以通过数组名来获取 &intArr
2)数组的第一个元素的地址,就是数组的首地址
3)数组的各个元素的地址间隔是依据数组的类型决定,比如 int64 -> 8 int32->4...
相关文章:

go学习笔记
1基础搭建 1.1,安装vscode https://code.visualstudio.com/download 64位 1.2,Windows 下搭建Go 开发环境-安装和配置 SDK SDK 的全称(Software Development Kit 软件开发工具包) Go 语言的官网为:golang.org , 因为各种原因,可…...

MacApp自动化测试之Automator初体验
今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…...
Vue学习v-html
Vue学习v-html 一、前言1、基本用法2、注意事项 二、总结 一、前言 学习 Vue.js 中的 v-html 指令意味着你想要在你的应用程序中动态地渲染 HTML。这个指令允许你将数据中包含的 HTML 代码直接插入到你的模板中,而不是将其作为纯文本处理。虽然这个功能非常强大&am…...
C++并发:锁
一、前言 C中的锁和同步原语的多样化选择使得程序员可以根据具体的线程和数据保护需求来选择最合适的工具。这些工具的正确使用可以大大提高程序的稳定性和性能,本文讨论了部分锁。 二、std::lock 在C中,std::lock 是一个用于一次性锁定两个或多个互斥…...
Git | git log 和 git status 的区别
如是我闻: git log和git status是Git中的两个非常有用的命令,它们用于不同的目的,并提供不同类型的信息。 git log git log命令用于显示一个或多个分支的提交历史记录。这个命令会列出提交历史,包括每次提交的SHA-1哈希值、提交…...

Django 4.x 智能分页get_elided_page_range
Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码,默认:1 # on_each_side:当前页码前后显示几页,默认:3 # on_ends:首尾固定显示几页&#…...

java-spring 09 下.populateBean (方法成员变量的注入@Autowird,@Resource)
1.在populateBean 方法中的一部分:用于Autowird,Resource注入 // 后处理器已经初始化boolean hasInstAwareBpps hasInstantiationAwareBeanPostProcessors();// 需要依赖检查boolean needsDepCheck (mbd.getDependencyCheck() ! AbstractBeanDefinitio…...

赛氪网携手众机构助力第七届京津冀生态修复实践论坛圆满落幕
近日,由北京生态修复学会联合工业固废网、中国老科协国土资源分会共同主办,赛氪网作为支持单位的第七届京津冀生态修复实践论坛在北京温德姆酒店圆满落幕。本次论坛汇聚了众多行业专家、学者以及企业代表,共同探讨生态修复领域的新技术、新方…...

Naive RAG 、Advanced RAG 和 Modular RAG 简介
简介: RAG(Retrieval-Augmented Generation)系统是一种结合了检索(Retrieval)和生成(Generation)的机制,用于提高大型语言模型(LLMs)在特定任务上的表现。随…...

Python高级编程-DJango2
Python高级编程-DJango2 没有清醒的头脑,再快的脚步也会走歪;没有谨慎的步伐,再平的道路也会跌倒。 目录 Python高级编程-DJango2 1.显示基本网页 2.输入框的形式: 1)文本输入框 2)单选框 3ÿ…...
bash脚本 报错:/bin/bash^M:解释器错误: 没有那个文件或目录
bash脚本 报错:/bin/bash^M:解释器错误: 没有那个文件或目录 出现这个问题是因为该脚本文件在windows下编辑过 在windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打…...

win10专业版远程桌面连接不上,win10专业版远程桌面连接不上常见原因与解决方法
Win10专业版远程桌面连接功能是一项非常实用的工具,它允许用户远程访问和操作另一台计算机。然而,有时在尝试进行远程桌面连接时,可能会遇到连接不上的情况。本文将分析导致这一问题的常见原因,并提供相应的解决方法。 一、常见原…...
前端 日期 new Date 少0 转换成 yyyy-MM-dd js vue
在console控制台直接输出new Date(),是这样: Fri May 10 2024 23:36:06 GMT0800 (中国标准时间) 输出new Date().toLocaleString(),是这样: 2024/5/10 23:36:06 输出new Date().toISOString(),是这样: …...

Linux中的磁盘分析工具ncdu
2024年5月14日,周二上午 概述 ncdu 是一个基于文本的用户界面磁盘使用情况分析工具。它可以在终端中快速扫描目录,并统计该目录下的文件和文件夹的磁盘使用情况,以交互友好的方式呈现给用户。 安装 在 Debian/Ubuntu 系统下,可…...

Angular入门
Angular版本:Angular 版本演进史概述-天翼云开发者社区 - 天翼云 安装nodejs:Node.js安装与配置环境 v20.13.1(LTS)-CSDN博客 Angular CLI是啥 Angular CLI 是一个命令行接口(Angular Command Line Interface),是开发 Angular 应用的最快、最…...

Java进阶11 IO流、功能流
Java进阶11 IO流-功能流 一、字符缓冲流 字符缓冲流在源代码中内置了字符数组,可以提高读写效率 1、构造方法 方法说明BufferedReader(new FileReader(文件路径))对传入的字符输入流进行包装BufferedWriter(new FileWriter(文件路径))对传入的字符输出流进行包装…...

windows 安装 Conda
1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。一般用conda来维护多个python版本。 2 安装…...

IPsec VPN简介
什么是IPsec? IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,它是VPN(Virtual Private Network,虚拟专用网)中常用的一种技术。其实就是一种协议簇(类…...

探索 Canva 的功能以及如何有效使用 Canva
『创意瞬间变现!Canva AI Drawing 让你的文字描绘成艺术』 在数字设计和创意领域,Canva 是创新和用户友好性的灯塔。这个平台不仅简化了图形设计,还引入了 AI Drawing 等强大工具,使其成为专业人士和初学者的首选解决方案。让我们…...
python中匿名函数简单样例
目录 一、匿名函数(也称为 lambda 函数): 二、简单样例: 2.1 filter() 函数: 2.2 map() 函数: 2.3 sorted() 函数: 一、匿名函数(也称为 lambda 函数): 简洁性:匿名函数通常比命…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...