go语言基础入门(一)
- 变量声明:
- 批量声明变量:
- 变量赋值:
- 声明变量同时为变量赋值
- 可以在变量声明时为其赋值
- go中赋值时的编译器会自动根据等号右侧的数据类型自动推导变量的类型
- 使用 := 进行赋值
- 匿名变量
- 常量
- 常量计数器iota
- 1. 使用场景
- 2. 基本用法
- 3. 简化语法
- 4. 自定义增量
- 5. 复杂使用
- go的类似枚举
- 使用 const 和 iota 定义枚举
- 使用 map 实现枚举
- 附加
- Galang(二) 基本数据类型
- 字符串
- 字符串转义符
- 多行字符串
- 常用字符串操作
- byte 和 rune 类型
- 修改字符串
- 类型转换
- 基本语法
- 流程控制
- 1. 条件语句
- if 语句
- switch 语句
- 2. 循环语句
- 基本的 for 循环
- for 循环与条件
- 无限循环
- for range 循环 用于遍历数组、切片、字符串、映射(map)等数据结构。
- 3. 跳转语句
- break 语句
- continue 语句
- goto 语句
变量声明:
变量的声明以 var 关键字开头,后面是变量名,最后是变量的类型,在java中一般使用分号结尾,go则写不写都行,一般不写
var 变量名 变量的类型
var id int
var name string
批量声明变量:
使用 var( ) 括号中 写 变量名 变量的类型
var (变量名 变量的类型变量名 变量的类型变量名 变量的类型
)
var (id intname string
)
变量赋值:
go中的变量在声明时会自动初始化,与数字相关的变量默认为 0 ,字符串默认为 “” ,布尔值默认是 false ;切片,函数和指针默认是 nil (nil是go中的空)
声明变量同时为变量赋值
var 变量名 类型 = 值
var id int = 1
var name string = "张三"
可以在变量声明时为其赋值
//多个变量以逗号分隔,等号后的值按照先后顺序赋值
var id ,name = 1 , "张三"var (id int = 1name string = "张三"
)
go中赋值时的编译器会自动根据等号右侧的数据类型自动推导变量的类型
//可以省略变量类型
var (id = 1name = "张三"
)
使用 := 进行赋值
还可以使用简写 := 方式声明变量并初始化 这种方法只能在函数内部使用
:=是一个简短声明符(short variable declaration operator),用于在声明变量时简化语法。它允许程序员在声明变量的同时进行初始化。
使用:=声明的变量的作用域是局部的,也就是说,在函数内部使用:=声明的变量只能在该函数内部访问。如果在函数外部使用该符号,会导致编译错误。
:=只能用于声明新变量。如果变量已经被声明,就不能再使用:=方式来赋值,必须使用=运算符。
可以在同一行中使用:=来同时声明多个变量
func main() {id := 10name := 200 fmt.Println(m, n)//将id name在控制台输出
}
匿名变量
匿名变量使用 下划线 _ 来表示 ,作用是可以忽略某个值,
可以用来占位 ,此变量不占用命名空间,同时也不会为其分配内存
//t1 函数返回两个int 类型的值
func t1() (int, int) {return 1, 2
}
func main() {i, _ := t1()//函数返回的 2 被忽略_, j := t1()//函数返回的 1 被忽略fmt.Println(i, j) //输出 1,2
}在for循环中使用
在迭代的过程中,如果只关心索引或值中的一个部分,可以使用匿名变量。这使得代码更加简洁。示例:
package mainimport "fmt"func main() {pairs := []struct {x, y int}{{1, 2},{3, 4},{5, 6},}for _, v := range pairs {fmt.Println(v.x) // 只使用x,忽略y}
}
常量
常量是程序中不可改变的值。常量在声明后不能被重新赋值。
使用const关键字声明常量:
const Pi = 3.14
类型推断:常量可以在声明时指定类型,也可以省略,编译器会根据值自动推断。
const (
e = 2.71828 // 无类型常量
c int = 299792458 // 指定类型常量
)
作用域:
常量的作用域和变量相似,可以是局部的或包级别的。
示例:
package mainimport "fmt"const Pi = 3.14 // 声明常量func main() {
fmt.Println("Pi:", Pi)
// Pi = 3.14159 // 这将导致编译错误,因为常量不能被修改
}
| 特性 | 变量 | 常量 |
|----------------|--------------------------|---------------------------|
| 可变性 | 可以被修改 | 不可被修改 |
| 声明关键字 | var 或简短声明符 := | const |
| 声明时类型 | 可选 | 可选 |
| 内存使用 | 占用内存 | 编译时确定,无需占用运行时内存 |
| 作用域 | 局部或包级别 | 局部或包级别 |
常量计数器iota
在Go语言中,iota是一个预定义的标识符,用于简化常量的创建,尤其是在需要一系列相关常量时。
iota的值在每个常量声明块中自动递增,从0开始。
1. 使用场景
iota通常用于定义一组具有相关性的常量,例如枚举值、位掩码等。
2. 基本用法
在一个常量声明中,每个常量的iota值会从0开始,并在每行中自动递增1。
package mainimport "fmt"const (A = iota // 0B = iota // 1C = iota // 2
)func main() {fmt.Println(A, B, C) // 输出: 0 1 2
}
3. 简化语法
在同一个常量声明块中,可以省略iota,它仍然会正确递增。
package mainimport "fmt"const (X = iota // 0Y // 1,自动从上一个常量继承iota值Z // 2
)func main() {fmt.Println(X, Y, Z) // 输出: 0 1 2
}
4. 自定义增量
可以在常量声明中使用算术运算与iota结合,创建具有特定增量的常量。例如,如果希望常量的值是2的倍数,可以这样做:
package mainimport "fmt"const (_ = iota // 忽略第一个值(0)Two = iota * 2 // 2Four = iota * 2 // 4Six = iota * 2 // 6
)func main() {fmt.Println(Two, Four, Six) // 输出: 2 4 6
}
5. 复杂使用
iota还可以与位移、位运算等结合使用,在需要创建位掩码时非常方便。
package mainimport "fmt"const (Flag1 = 1 << iota // 1 << 0,值为1Flag2 // 1 << 1,值为2Flag3 // 1 << 2,值为4Flag4 // 1 << 3,值为8
)func main() {fmt.Println(Flag1, Flag2, Flag3, Flag4) // 输出: 1 2 4 8
}
go的类似枚举
在 Go 1.13 及更高版本中,虽然没有引入传统意义上的枚举类型,但可以通过使用 const 和 iota 来实现类似的功能,
并且可以通过 string 类型的方法来增强枚举的可读性和可维护性。
使用 const 和 iota 定义枚举
在这个例子中,我们定义了一个 Weekday 类型,并使用 iota 来生成枚举值。然后,我们为 Weekday 类型实现了 String 方法,这样在打印枚举值时,会输出对应的字符串名称,而不是整数值。
package mainimport "fmt"type Weekday intconst (Sunday Weekday = iotaMondayTuesdayWednesdayThursdayFridaySaturday
)func (w Weekday) String() string {return [...]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}[w]
}func main() {fmt.Println(Sunday) // 输出: Sundayfmt.Println(Monday) // 输出: Mondayfmt.Println(Tuesday) // 输出: Tuesdayfmt.Println(Wednesday) // 输出: Wednesdayfmt.Println(Thursday) // 输出: Thursdayfmt.Println(Friday) // 输出: Fridayfmt.Println(Saturday) // 输出: Saturday
}
使用 map 实现枚举
另一种方法是使用 map 来实现枚举,这样可以更灵活地处理枚举值和名称之间的映射。
package mainimport "fmt"type Weekday intconst (Sunday Weekday = iotaMondayTuesdayWednesdayThursdayFridaySaturday
)var weekdayNames = map[Weekday]string{Sunday: "Sunday",Monday: "Monday",Tuesday: "Tuesday",Wednesday: "Wednesday",Thursday: "Thursday",Friday: "Friday",Saturday: "Saturday",
}func (w Weekday) String() string {return weekdayNames[w]
}func main() {fmt.Println(Sunday) // 输出: Sundayfmt.Println(Monday) // 输出: Mondayfmt.Println(Tuesday) // 输出: Tuesdayfmt.Println(Wednesday) // 输出: Wednesdayfmt.Println(Thursday) // 输出: Thursdayfmt.Println(Friday) // 输出: Fridayfmt.Println(Saturday) // 输出: Saturday
}
附加
2. 布尔类型
类型:bool
常量:true和false,分别为0 == 0和0 != 0的值。
3. 整数类型
无符号整数:uint8:范围0至255。
uint16:范围0至65535。
uint32:范围0至4294967295。
uint64:范围0至18446744073709551615。
带符号整数:int8:范围-128至127。
int16:范围-32768至32767。
int32:范围-2147483648至2147483647。
int64:范围-9223372036854775808至9223372036854775807。
int:至少32位的带符号整数,不是int32的别名。
uint:至少32位的无符号整数,不是uint32的别名。
4. 浮点数和复数类型
浮点数:
float32和float64分别为IEEE 754格式的32位和64位浮点数。
复数:
complex64和complex128分别为具有float32和float64实部和虚部的复数。
5. 字符串和字节
类型:
string:表示8位字节字符串,通常表示UTF-8编码文本。
byte:是uint8的别名,通常用于表示字节值。
rune:是int32的别名,用于表示字符值。
6. 预声明标识符
nil:表示指针、通道、函数、接口、映射或切片类型的零值。
iota:表示当前常量声明中的未类型化整数序号,从0开始递增。
any:是interface{}的别名,表示可以接受任何类型的空接口。
comparable:一个接口,所有可比较类型(布尔、数字、字符串等)都实现该接口,但它只能作为类型参数的约束,而不能作为变量的类型。
7. 内置函数
基本操作:append:将元素追加到切片末尾。copy:从源切片复制元素到目标切片。delete:从映射中删除指定键的元素。len:返回值的长度。cap:返回切片或通道的容量。
内存管理:make:用于分配和初始化切片、映射或通道。new:分配内存并返回指向新分配零值的指针。
数学操作:max:返回一组值中的最大值。min:返回一组值中的最小值。complex、real、imag:用于复数的创建和获取实部、虚部。
通道操作:close:关闭通道。clear:清空映射和切片。
错误处理:panic:停止当前goroutine的正常执行。recover:恢复正在恐慌的goroutine的正常执行。
打印输出:print和println:将数据格式化并写入标准错误。
8. 错误接口error:表示错误条件的常规接口,nil值表示没有错误。
Galang(二) 基本数据类型
字符串
Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8
编码。 字符串的值为双引号(")
中的内容,可以在Go语言的源码中直接添加非ASCII码字符
s1 := "hello Word"
字符串转义符
| \r | 回车符(返回行首) |
|---|---|
| \n | 换行符(直接跳到下一行的同列位置) |
| \t | 制表符 |
| \’ | 单引号 |
| \” | 双引号 |
| \ | 反斜杠 |
多行字符串
Go语言中要定义一个多行字符串时,就必须使用反引号字符
s1 := `第一行
第二行
第三行
`
fmt.Println(s1)
常用字符串操作
| 方法 | 作用 |
|---|---|
| len(str) | 求长度 |
| +或fmt.Sprintf | 拼接字符型 |
| strings.Split | 分割 |
| strings.contains | 判断是否包含 |
| strings.HasPrefix strings.HasSuffix | 前缀 后缀判断 |
| strings.Index() strings.LastIndex() | 子串出现的位置 |
| strings.Join(a[]string, sep string) | join操作 |
package mainimport ("fmt""strings"
)func main() {// 定义字符串str := "Hello, World! Welcome to Go programming."// 1. 求长度length := len(str)fmt.Println("字符串长度:", length)// 2. 拼接字符型str2 := " Enjoy learning!"concatenated := str + str2fmt.Println("拼接后的字符串:", concatenated)// 3. 分割// 注意:分割后的部分是字符串数组,不是切片parts := strings.Split(str, " ")fmt.Println("分割后的部分:", parts[0], parts[1], parts[2])// 4. 判断是否包含containsHello := strings.Contains(str, "Hello")fmt.Println("包含 'Hello'?", containsHello)// 5. 前缀和后缀判断hasPrefix := strings.HasPrefix(str, "Hello")hasSuffix := strings.HasSuffix(str, "programming.")fmt.Println("以 'Hello' 开头?", hasPrefix)fmt.Println("以 'programming.' 结尾?", hasSuffix)// 6. 子串出现的位置index := strings.Index(str, "World")lastIndex := strings.LastIndex(str, "o")fmt.Println("'World' 出现的位置:", index)fmt.Println("'o' 最后出现的位置:", lastIndex)// 7. join操作words := []string{"Go", "is", "great!"}joined := strings.Join(words, " ")fmt.Println("连接后的字符串:", joined)// 8. 替换replaced := strings.Replace(str, "World", "Gopher", 1)fmt.Println("替换后的字符串:", replaced)// 9. 大小写转换upper := strings.ToUpper(str)lower := strings.ToLower(str)fmt.Println("全大写:", upper)fmt.Println("全小写:", lower)// 10. 去掉空白strWithSpaces := " Hello, World! "trimmed := strings.TrimSpace(strWithSpaces)fmt.Println("去掉空白后的字符串:", trimmed)// 11. 判断是否为空if str == "" {fmt.Println("字符串是空的")} else {fmt.Println("字符串不是空的")}// 12. 格式化字符串name := "Go"version := 1.18formatted := fmt.Sprintf("%s programming language version %.2f", name, version)fmt.Println("格式化字符串:", formatted)// 13. 多个替换replacer := strings.NewReplacer("Hello", "Hi", "World", "Gopher")newStr := replacer.Replace(str)fmt.Println("多个替换后的字符串:", newStr)}
byte 和 rune 类型
组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。
字符用单引号(’)包裹起来
byte 适合用于处理ASCII字符及二进制数据,常用于文件和网络数据的操作。
rune 更适合处理包含Unicode字符的字符串,能够处理各种语言的字符,是进行国际化开发时不可或缺的类型。
var a = '中'
var b = 'x'
Go 语言的字符有以下两种
-
uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。 -
rune类型,代表一个UTF-8字符。当需要处理中文、日文或者其他复合字符时,则需要用到
rune类型。rune类型实际是一个int32
// 遍历字符串
func traversalString() {s := "hello世界"for i := 0; i < len(s); i++ { //bytefmt.Printf("%v(%c) ", s[i], s[i])}fmt.Println()for _, r := range s { //runefmt.Printf("%v(%c) ", r, r)}fmt.Println()
}
输出:
104(h) 101(e) 108(l) 108(l) 111(o) 230(æ) 178(²) 153() 230(æ) 178(²) 179(³)
104(h) 101(e) 108(l) 108(l) 111(o) 19990(世) 30028(界)
因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果
字符串底层是一个byte数组,所以可以和[]byte
类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成
修改字符串
要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组
package mainimport ("fmt"
)func main() {// 使用 byte 处理 ASCII 字符var b byte = 'A'fmt.Println("byte 类型:", b)// 使用 rune 处理 Unicode 字符var r rune = '汉'fmt.Println("rune 类型:", r)// 字符串中的字节和字符数str := "Hello, 世界!"fmt.Println("字符串的字节数:", len(str))// 使用 range 遍历字符串中的字符fmt.Println("字符和对应的 rune值:")for i, c := range str {fmt.Printf("索引 %d: 字符 %c, rune 值 %d\n", i, c, c)}
}
类型转换
在 Go 语言中,类型转换是将一个数据类型的值转换为另一个数据类型的过程。Go 语言提供了安全和明确的类型转换机制,以确保类型的一致性。
基本语法
类型转换的基本语法如下:
newType(expression) 其中 newType 是目标类型,expression 是要转换的值。
基本数值类型的转换
package mainimport "fmt"func main() {var a int = 10var b float64 = float64(a) // int 转换为 float64fmt.Println("int:", a)fmt.Println("float64:", b)var c float64 = 3.14var d int = int(c) // float64 转换为 int(会丢失小数部分)fmt.Println("float64:", c)fmt.Println("int:", d)
}
字符与整数的转换
package mainimport "fmt"func main() {var r rune = 'A' // 字符 'A'var b byte = byte(r) // rune 转换为 bytevar ascii int = int(b) // byte 转换为 intfmt.Printf("rune: %c, byte: %d, ascii: %d\n", r, b, ascii) // 输出: rune: A, byte: 65, ascii: 65
}
字符串与字节切片的转换package mainimport "fmt"func main() {str := "Hello, Go!"// 字符串转换为字节切片byteSlice := []byte(str)fmt.Println("Byte Slice:", byteSlice)// 字节切片转换为字符串newStr := string(byteSlice)fmt.Println("String:", newStr)
}
接口转换 Go 语言中的类型转换也包括接口类型的转换。可以将实现了某个接口的类型转换为该接口。package mainimport "fmt"type Animal interface {Speak() string
}type Dog struct{}func (d Dog) Speak() string {return "Woof!"
}func main() {var a Animal // 接口类型a = Dog{} // 赋值实现了 Animal 接口的 Dog 类型// 类型断言if dog, ok := a.(Dog); ok {fmt.Println("它是狗,叫声:", dog.Speak())}
}
流程控制
1. 条件语句
Go 中的条件语句主要有 if 和 switch。
if 语句
用来根据条件执行特定的代码块。
package mainimport ("fmt"
)func main() {age := 18if age < 18 {fmt.Println("未成年人")} else if age >= 18 && age < 65 {fmt.Println("成年人")} else {fmt.Println("老年人")}
}
switch 语句
用于多条件判断,它比多个 if 语句更简洁。
package mainimport ("fmt"
)func main() {day := 3switch day {case 1:fmt.Println("星期一")case 2:fmt.Println("星期二")case 3:fmt.Println("星期三")default:fmt.Println("其他天")}
}
一个分支可以有多个值,多个case值中间使用英文逗号分隔。
func testSwitch3() {switch n := 7; n {case 1, 3, 5, 7, 9:fmt.Println("奇数")case 2, 4, 6, 8:fmt.Println("偶数")default:fmt.Println(n)}
}
分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量
func switchDemo4() {age := 30switch {case age < 25:fmt.Println("好好学习吧")case age > 25 && age < 35:fmt.Println("好好工作吧")case age > 60:fmt.Println("好好享受吧")default:fmt.Println("活着真好")}
}
fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的
func switchDemo5() {s := "a"switch {case s == "a":fmt.Println("a")fallthroughcase s == "b":fmt.Println("b")case s == "c":fmt.Println("c")default:fmt.Println("...")}
}
输出: a b
2. 循环语句
Go 语言中提供了 for 循环来实现循环,使用非常灵活。
基本的 for 循环
package mainimport ("fmt"
)func main() {for i := 0; i < 5; i++ {fmt.Println("计数:", i)}
}
for 循环与条件
也可以使用 for 循环形式的条件判断。
package mainimport ("fmt"
)func main() {i := 0for i < 5 {fmt.Println("计数:", i)i++}
}
无限循环
使用 for 后不加条件,即可形成无限循环。
循环可以通过break、goto、return、panic语句强制退出循环。
package mainimport ("fmt"
)func main() {i := 0for {if i >= 5 {break // 使用 break 退出循环}fmt.Println("计数:", i)i++}
}
for range 循环 用于遍历数组、切片、字符串、映射(map)等数据结构。
基本语法
for range 的基本语法如下:
for index, value := range collection {// 使用 index 和 value
}
index 是当前元素的索引(对于数组、切片和字符串)。
value 是当前元素的值。
collection 是需要遍历的集合,可以是数组、切片、字符串或映射等。
遍历切片
package mainimport ("fmt"
)func main() {names := []string{"Alice", "Bob", "Charlie"}for index, name := range names {fmt.Printf("索引: %d, 名称: %s\n", index, name)}
}
遍历数组
package mainimport ("fmt"
)func main() {numbers := [5]int{1, 2, 3, 4, 5}for index, number := range numbers {fmt.Printf("索引: %d, 数字: %d\n", index, number)}
}
遍历字符串 for range 还能用来遍历字符串,每次迭代返回一个字符和它的 Unicode 码点。
package mainimport ("fmt"
)func main() {str := "你好, 世界!"for index, char := range str {fmt.Printf("索引: %d, 字符: %c\n", index, char)}
}
遍历映射 (map)
package mainimport ("fmt"
)func main() {ages := map[string]int{"Alice": 25,"Bob": 30,"Charlie": 35,}for name, age := range ages {fmt.Printf("%s 的年龄是: %d\n", name, age)}
}
3. 跳转语句
Go 中的跳转语句包括 break、continue 和 goto。
break 语句
用于跳出循环或 switch 语句。
package mainimport ("fmt"
)func main() {for i := 0; i < 10; i++ {if i == 5 {break // 当 i 等于 5 时跳出循环}fmt.Println("计数:", i)}
}
continue 语句
用于跳过当前循环的剩余部分,进入下一次循环。
package mainimport ("fmt"
)func main() {for i := 0; i < 10; i++ {if i%2 == 0 {continue // 跳过偶数}fmt.Println("奇数:", i)}
}
goto 语句
允许程序跳转到指定标签。使用要谨慎,因为可能会导致代码可读性降低。
package mainimport ("fmt"
)func main() {i := 0
CountLoop:fmt.Println("计数:", i)i++if i < 5 {goto CountLoop // 跳转到 CountLoop 标签}
}相关文章:
go语言基础入门(一)
变量声明:批量声明变量:变量赋值: 声明变量同时为变量赋值可以在变量声明时为其赋值go中赋值时的编译器会自动根据等号右侧的数据类型自动推导变量的类型使用 : 进行赋值匿名变量 常量常量计数器iota1. 使用场景2. 基本用法3. 简化语法4. 自定义增量5. 复杂使用go的类似枚举 使…...
linux 基础(一)mkdir、ls、vi、ifconfig
1、linux简介 linux是一个操作系统(os: operating system) 中国有没有自己的操作系统(华为鸿蒙HarmonyOS,阿里龙蜥(Anolis) OS 8、百度DuerOS都有) 计算机组的组成:硬件软件 硬件:运算器&am…...
DAMODEL丹摩智算:LLama3.1部署与使用
文章目录 前言 一、LLaMA 3.1 的特点 二、LLaMA3.1的优势 三、LLaMA3.1部署流程 (一)创建实例 (二)通过JupyterLab登录实例 (3)部署LLaMA3.1 (4)使用教程 总结 前言 LLama3…...
Spring Boot 配置全流程 总结
1. 简介 Springboot可以简化SSM的配置,提高开发效率。 2. 代码 在pom.xml中添加: <parent><!-- 包含SSM常用依赖项 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</art…...
爬虫技术初步自学
目的 本篇文章实际上自学爬虫技术的学习一份学习笔记,希望可以对后学的小白起到帮助,也希望得到大佬的指点,若有错漏希望大佬指出。 初步认知 爬虫实际上是一个计算机程序。开发爬虫程序的常用语言是Python。(Python我已经在五…...
【力扣 | SQL题 | 每日三题】力扣175, 176, 181
1. 力扣175:组合两个表 1.1 题目: 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该…...
SpringBoot使用hutool操作FTP
项目场景: SpringBoot使用hutool操作FTP,可以实现从FTP服务器下载文件到本地,以及将本地文件上传到FTP服务器的功能。 实现步骤: 1、引入依赖 <dependency><groupId>commons-net</groupId><artifactId>…...
如何防止SQL注入攻击
SQL注入攻击是一种常见的网络安全威胁,攻击者通过在用户输入中插入恶意的SQL代码,从而可以执行未经授权的数据库操作。为了防止SQL注入攻击,我们可以采取一系列有效的措施来保护数据库和应用程序的安全性。以下是一些关键的防范策略ÿ…...
Java List类
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Java 目录 👉🏻List1. 接口与实现2. 特性3. 常用方法4. 示例代码5. 遍历6. 线程安全 👉🏻List Java的 List …...
使用 Internet 共享 (ICS) 方式分配ip
设备A使用dhcp的情况下,通过设备B分配ip并共享网络的方法。 启用网络共享(ICS)并配置 NAT Windows 自带的 Internet Connection Sharing (ICS) 功能可以简化 NAT 设置,允许共享一个网络连接给其他设备。 打开网络设置࿱…...
SMTP/IMAP服务发在线邮件时要用到
SMTP/IMAP服务 require PHPMailerAutoload.php; // 或 require class.phpmailer.php;// 创建实例 $mail new PHPMailer();// 设定邮件服务器 $mail->isSMTP(); $mail->Host smtp.example.com; // 邮件服务器地址 $mail->SMTPAuth true; $mail->Username your…...
Threejs绘制圆锥体
上一章节实现了胶囊体的绘制,这节来绘制圆锥体,圆锥体就是三角形旋转获得的,如上文一样,先要创建出基础的组件,包括场景,相机,灯光,渲染器。代码如下: initScene() {this…...
速通LLaMA3:《The Llama 3 Herd of Models》全文解读
文章目录 概览论文开篇IntroductionGeneral OverviewPre-TrainingPre-Training DataModel ArchitectureInfrastructure, Scaling, and EfficiencyTraining Recipe Post-TrainingResultsVision ExperimentsSpeech Experiments⭐Related WorkConclusionLlama 3 模型中的数学原理1…...
Python网络爬虫获取Wallhaven壁纸图片(源码)
** 话不多说,直接附源码,可运行! ** import requests from lxml import etree from fake_useragent import UserAgent import timeclass wallhaven(object):def __init__(self):# yellow# self.url "https://wallhaven.cc/search?co…...
智能化引领等保测评新时代:AI与大数据的深度融合
随着信息技术的飞速发展,等级保护测评(简称“等保测评”)作为保障信息系统安全的重要手段,正迎来前所未有的变革。在这一背景下,人工智能(AI)与大数据技术的深度融合,正引领等保测评…...
深入解析:HTTP 和 HTTPS 的区别
网络安全问题正变得日益重要,而 HTTP 与 HTTPS 对用户数据的保护十分关键。本文将深入探讨这两种协议的特点、工作原理,以及保证数据安全的 HTTPS 为何变得至关重要。 认识 HTTP 与 HTTPS HTTP 的工作原理 HTTP,全称超文本传输协议…...
《动手学深度学习》笔记1.11——实战Kaggle比赛:预测房价+详细代码讲解
目录 0. 前言 原书正文 1. 下载和缓存数据集 1.1 download() 下载数据集 1.2 download_extract() 解压缩 2. Kaggle 简介 3. 访问和读取数据集 4. 数据预处理 5. 训练(核心难点) 5.1 get_net() 定义模型-线性回归 5.2 log_rmse() 对数均方根…...
数据结构:单链表实现信息管理
一、函数声明部分 #ifndef __LINK_H__ #define __LINK_H__ #include <myhead.h> typedef struct Link1 {union{int len;//用于头结点,统计节点个数int data;//用于正常节点,存储数据};struct Link1 *next;//指针域 }Link,*Plink;/**********函数声…...
【Linux】解锁文件描述符奥秘,高效缓存区的实战技巧
fd和缓冲区 1. 文件描述符fd1.1. 概念与本质1.2. 打开文件的管理1.3. 一切皆文件的理解1.4. 分配规则1.5. 重定向的本质1.5.1. dup2 2. FILE中的缓冲区2.1. 概念2.2. 存在的原因2.3. 类型(刷新方案)2.4. 存放的位置2.4.1. 代码证明、现象解释 2.5. 模拟C标准库中的方法 1. 文件…...
EmguCV学习笔记 VB.Net 11.9 姿势识别 OpenPose
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
