跟着实例学Go语言(一)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。
教程代码示例来自go by example,文字部分来自本人自己的理解。
本文是教程系列的第一部分,共计20个例子、约1万字。
目录
- 1. Hello World
- 2. Values
- 3. Variables
- 4. Constants
- 5. For
- 6. If/Else
- 7. Switch
- 8. Arrays
- 9. Slices
- 10. Maps
- 11. Range
- 12. Functions
- 13. Multiple Return Values
- 14. Variadic Functions
- 15. Closures
- 16. Recursion
- 17. Pointers
- 18. Strings and Runes
- 19. Structs
- 20. Methods
1. Hello World
下面的例子演示了如何打印经典的“Hello world”语句,以及运行和编译go代码的方法。
package main
import "fmt"func main() {// 打印语句并换行fmt.Println("hello world")
}
// 可以通过go run命令直接从代码运行
$ go run hello-world.go
hello world// 也可以先通过go build先编译成可执行文件
$ go build hello-world.go
$ ls
hello-world hello-world.go// 再运行可执行文件
$ ./hello-world
hello world
2. Values
下面的代码演示了打印不同类型变量的方法。
package mainimport "fmt"func main() {// 支持字符串通过加号拼接 fmt.Println("go" + "lang")// Println支持多个不同类型参数,参数之间会用空格拼接起来输出fmt.Println("1+1 =", 1+1)fmt.Println("7.0/3.0 =", 7.0/3.0)// 支持输出bool类型变量fmt.Println(true && false)fmt.Println(true || false)fmt.Println(!true)
}
$ go run values.go
golang
1+1 = 2
7.0/3.0 = 2.3333333333333335
false
true
false
3. Variables
下面的例子演示了定义和初始化变量的方法。Go的编译器可以做类型推导,无需显示指定类型。若对变量不做显式初始化,则会自动赋值为零值。
package mainimport "fmt"func main() {// 定义并初始化一个变量(类型会被自动推导为string)var a = "initial"fmt.Println(a)// 可以一次定义多个变量var b, c int = 1, 2fmt.Println(b, c)// 定义并初始化一个bool变量var d = truefmt.Println(d)// 定义变量并指定类型,但不显式初始化(自动初始化为零值,0)var e intfmt.Println(e)// 更简洁的变量定义语法,推荐f := "apple"fmt.Println(f)
}
$ go run variables.go
initial
1 2
true
0
apple
附:Go中的类型分类及零值大全
Go中的变量类型分为值类型、指针类型和引用类型三类。它们在函数传参时的表现有差异:值类型传递时是拷贝复制,而指针类型实际存储的是所指向变量的地址,经过拷贝复制后,在函数内部对所指变量的任何修改都能生效,外部变量会实际改变。至于引用类型,它并非是Go中的原生概念,而是一个语法糖,实际在内部封装了一个指针,例如map类型本质上就是 *hmap;这样做的好处是无需再显式使用指针,使用更方便。
4. Constants
下面的例子演示了用const关键字定义的常量。
package mainimport ("fmt""math"
)// 定义常量时用const代替var
const s string = "constant"func main() {fmt.Println(s)// 定义常量时也可不指定类型,此时无类型const n = 500000000// numeric常量支持任意精度的运算const d = 3e20 / nfmt.Println(d)// 可以通过强制转型赋予常量类型fmt.Println(int64(d))// 通过传参也可以为常量指定类型,如Sin函数指定float64fmt.Println(math.Sin(n))// 不能将非const变量的运算结果赋值给const变量,否则会编译报错!// i := 100// const j = 100// const k = i + j}
$ go run constant.go
constant
6e+11
600000000000
-0.28470407323754404
5. For
下面例子展示了用for关键字实现的循环。Go中没有其他语言通常使用的while关键字,所有循环都通过for来实现。
package mainimport "fmt"func main() {i := 1// 类似于其他语言中的whilefor i <= 3 {fmt.Println(i)i = i + 1}// 常规for循环for j := 7; j <= 9; j++ {fmt.Println(j)}// 类似于其他语言中的while(true)for {fmt.Println("loop")break}for n := 0; n <= 5; n++ {if n%2 == 0 {continue}fmt.Println(n)}
}
$ go run for.go
1
2
3
7
8
9
loop
1
3
5
6. If/Else
下面例子展示了用if/else关键字实现的条件判断。
package mainimport "fmt"func main() {// if条件句无需加括号if 7%2 == 0 {fmt.Println("7 is even")// 注意}和else必须在同一行,否则会编译报错} else {fmt.Println("7 is odd")}if 8%4 == 0 {fmt.Println("8 is divisible by 4")}// if可支持多条语句,用分号分隔if num := 9; num < 0 {fmt.Println(num, "is negative")} else if num < 10 {fmt.Println(num, "has 1 digit")} else {fmt.Println(num, "has multiple digits")}
}
$ go run if-else.go
7 is odd
8 is divisible by 4
9 has 1 digit
7. Switch
下面例子展示了switch关键字实现的分支条件判断。
package mainimport ("fmt""time"
)func main() {i := 2fmt.Print("Write ", i, " as ")switch i {case 1:fmt.Println("one")// 注意这里无需加break,一个条件命中后自动退出,否则继续遍历其他条件case 2:fmt.Println("two")case 3:fmt.Println("three")}switch time.Now().Weekday() {case time.Saturday, time.Sunday:fmt.Println("It's the weekend")default:fmt.Println("It's a weekday")}t := time.Now()switch {case t.Hour() < 12:fmt.Println("It's before noon")default:fmt.Println("It's after noon")}// 可以用于类型判断whatAmI := func(i interface{}) {switch t := i.(type) {case bool:fmt.Println("I'm a bool")case int:fmt.Println("I'm an int")default:fmt.Printf("Don't know type %T\n", t)}}whatAmI(true)whatAmI(1)whatAmI("hey")
}
$ go run switch.go
Write 2 as two
It's a weekday
It's after noon
I'm a bool
I'm an int
Don't know type string
8. Arrays
下面例子展示了Go中数组的用法。数组用于存储有序、固定数量的元素。
package mainimport "fmt"func main() {// 定义数组变量,需要指明元素类型var a [5]int// 数组类型作为参数,可以直接打印出所有元素变量fmt.Println("emp:", a)a[4] = 100fmt.Println("set:", a)fmt.Println("get:", a[4])// 用len方法获取数组长度fmt.Println("len:", len(a))// 也可以在定义时直接初始化b := [5]int{1, 2, 3, 4, 5}fmt.Println("dcl:", b)// 二维数组的定义方法var twoD [2][3]intfor i := 0; i < 2; i++ {for j := 0; j < 3; j++ {twoD[i][j] = i + j}}fmt.Println("2d: ", twoD)
}
$ go run arrays.go
emp: [0 0 0 0 0]
set: [0 0 0 0 100]
get: 100
len: 5
dcl: [1 2 3 4 5]
2d: [[0 1 2] [1 2 3]]
9. Slices
下面例子介绍了切片的用法。切片是有序、不定长的数据结构,它的用法和数组非常类似,区别在于前者是不定长,后者是定长的。另一个区别是,前者是引用类型,后者是值类型,在函数传参时需要注意区分。
package mainimport "fmt"func main() {// slice需要用make初始化,否则会赋成零值nils := make([]string, 3)fmt.Println("emp:", s)s[0] = "a"s[1] = "b"s[2] = "c"fmt.Println("set:", s)fmt.Println("get:", s[2])fmt.Println("len:", len(s))// 可以动态往尾部添加元素s = append(s, "d")s = append(s, "e", "f")fmt.Println("apd:", s)c := make([]string, len(s))// copy可用于拷贝slicecopy(c, s)fmt.Println("cpy:", c)// 可以灵活按下标生成新slicel := s[2:5]fmt.Println("sl1:", l)l = s[:5]fmt.Println("sl2:", l)l = s[2:]fmt.Println("sl3:", l)// slice可以和array一样在定义时初始化t := []string{"g", "h", "i"}fmt.Println("dcl:", t)twoD := make([][]int, 3)for i := 0; i < 3; i++ {innerLen := i + 1twoD[i] = make([]int, innerLen)for j := 0; j < innerLen; j++ {twoD[i][j] = i + j}}fmt.Println("2d: ", twoD)
}
$ go run slices.go
emp: [ ]
set: [a b c]
get: c
len: 3
apd: [a b c d e f]
cpy: [a b c d e f]
sl1: [c d e]
sl2: [a b c d e]
sl3: [c d e f]
dcl: [g h i]
2d: [[0] [1 2] [2 3 4]]
10. Maps
下面例子展示了map的用法。map用于key-value二元关系数据的存储。
package mainimport "fmt"func main() {// map是引用类型,也需要用make初始化m := make(map[string]int)m["k1"] = 7m["k2"] = 13fmt.Println("map:", m)v1 := m["k1"]fmt.Println("v1: ", v1)fmt.Println("len:", len(m))delete(m, "k2")fmt.Println("map:", m)// 可以通过返回的第二个参数判断key是否存在于map中_, prs := m["k2"]fmt.Println("prs:", prs)// 可以在定义时直接初始化n := map[string]int{"foo": 1, "bar": 2}fmt.Println("map:", n)
}
$ go run maps.go
map: map[k1:7 k2:13]
v1: 7
len: 2
map: map[k1:7]
prs: false
map: map[bar:2 foo:1]
11. Range
下面例子展示了range关键字在遍历slice、map和string时的用法。
package mainimport "fmt"func main() {nums := []int{2, 3, 4}sum := 0for _, num := range nums {sum += num}fmt.Println("sum:", sum)// 遍历slice返回的变量,第一个是下标,第二个是对应下标的元素for i, num := range nums {if num == 3 {fmt.Println("index:", i)}}// 遍历map返回的变量,第一个是key,第二个是valuekvs := map[string]string{"a": "apple", "b": "banana"}for k, v := range kvs {fmt.Printf("%s -> %s\n", k, v)}for k := range kvs {fmt.Println("key:", k)}// 遍历string返回的变量,第一个是对应rune的byte的起始下标,第二个是对应的runefor i, c := range "go" {fmt.Println(i, c)}for i, c := range "我们" {fmt.Println(i, c)}
}
$ go run range.go
sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111
0 25105
3 20204
12. Functions
下面例子展示了func关键字定义的函数。
package mainimport "fmt"// 定义函数,顺序:func、函数名、参数列表、返回值类型
func plus(a int, b int) int {return a + b
}func plusPlus(a, b, c int) int {return a + b + c
}func main() {res := plus(1, 2)fmt.Println("1+2 =", res)res = plusPlus(1, 2, 3)fmt.Println("1+2+3 =", res)
}
$ go run functions.go
1+2 = 3
1+2+3 = 6
13. Multiple Return Values
下面例子展示了拥有多个返回值的函数。
package mainimport "fmt"func vals() (int, int) {return 3, 7
}func main() {a, b := vals()fmt.Println(a)fmt.Println(b)// 可以用_占位,表示这个变量不实际使用_, c := vals()fmt.Println(c)
}
$ go run multiple-return-values.go
3
7
7
14. Variadic Functions
下面例子展示了变长参数函数的用法。变长参数提供了传参的灵活性,可以是多个不定数量的参数,也可以是slice。
package mainimport "fmt"// 用...表示变长参数
func sum(nums ...int) {fmt.Print(nums, " ")total := 0for _, num := range nums {total += num}fmt.Println(total)
}func main() {// 可用于多个参数sum(1, 2)sum(1, 2, 3)// 也可用于slice,注意要加...nums := []int{1, 2, 3, 4}sum(nums...)
}
$ go run variadic-functions.go
[1 2] 3
[1 2 3] 6
[1 2 3 4] 10
15. Closures
下面的例子展示了闭包的概念。闭包一般与匿名函数相关,匿名函数可以引用外部函数中定义的变量,对其形成闭包。该变量可作为“半全局变量”,生命周期存在于多次匿名函数调用中,任何对它的修改都可在匿名函数中可见。
package mainimport "fmt"func intSeq() func() int {i := 0// 匿名函数对外部定义的i形成闭包return func() int {i++return i}
}func main() {nextInt := intSeq()// 每次调用匿名函数都会将i加1fmt.Println(nextInt())fmt.Println(nextInt())fmt.Println(nextInt())newInts := intSeq()fmt.Println(newInts())
}
$ go run closures.go
1
2
3
1
16. Recursion
下面例子展示了函数递归的用法。
package mainimport "fmt"func fact(n int) int {if n == 0 {return 1}return n * fact(n-1)
}func main() {fmt.Println(fact(7))var fib func(n int) intfib = func(n int) int {if n < 2 {return n}return fib(n-1) + fib(n-2)}fmt.Println(fib(7))
}
$ go run recursion.go
5040
13
17. Pointers
下面例子展示了指针的用法。对于值类型的变量,如果传参给函数后需要在内部做修改,那么需要使用指针传递。
package mainimport "fmt"// 通过值传递,仅拷贝变量,不会修改实际值
func zeroval(ival int) {ival = 0
}// 通过指针传递,可以修改实际值
func zeroptr(iptr *int) {*iptr = 0
}func main() {i := 1fmt.Println("initial:", i)zeroval(i)fmt.Println("zeroval:", i)// 用&获取指针,即变量i的地址zeroptr(&i)fmt.Println("zeroptr:", i)fmt.Println("pointer:", &i)
}
$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100
18. Strings and Runes
下面例子展示了string与rune的关系。string可以看做是由byte元素组成的slice,默认采用UTF-8编码。rune类似于其他语言中的character,它是code point,即该字符在字符表中的唯一序号。注意它与encoding概念不同,encoding代表不同编码方式,如UTF-8、UTF-16,对同一个字符可以使用不同长度的编码来表示。
package mainimport ("fmt""unicode/utf8"
)func main() {const s = "สวัสดี"// len获取底层byte slice的长度fmt.Println("Len:", len(s))// 打印底层的每个bytefor i := 0; i < len(s); i++ {fmt.Printf("%x ", s[i])}fmt.Println()fmt.Println("Rune count:", utf8.RuneCountInString(s))// 用range遍历,获取的是每个rune及对应的byte起始下标。使用UTF-8编码,每个rune占用3个字节for idx, runeValue := range s {fmt.Printf("%#U starts at %d\n", runeValue, idx)}fmt.Println("\nUsing DecodeRuneInString")for i, w := 0, 0; i < len(s); i += w {// 使用DecodeRuneInString也能达到同样的遍历效果runeValue, width := utf8.DecodeRuneInString(s[i:])fmt.Printf("%#U starts at %d\n", runeValue, i)w = widthexamineRune(runeValue)}
}func examineRune(r rune) {if r == 't' {fmt.Println("found tee")} else if r == 'ส' {fmt.Println("found so sua")}
}
$ go run strings-and-runes.go
Len: 18
e0 b8 aa e0 b8 a7 e0 b8 b1 e0 b8 aa e0 b8 94 e0 b8 b5
Rune count: 6
U+0E2A 'ส' starts at 0
U+0E27 'ว' starts at 3
U+0E31 'ั' starts at 6
U+0E2A 'ส' starts at 9
U+0E14 'ด' starts at 12
U+0E35 'ี' starts at 15Using DecodeRuneInString
U+0E2A 'ส' starts at 0
found so sua
U+0E27 'ว' starts at 3
U+0E31 'ั' starts at 6
U+0E2A 'ส' starts at 9
found so sua
U+0E14 'ด' starts at 12
U+0E35 'ี' starts at 15
19. Structs
下面例子展示了用struct关键字实现结构体。结构体是一种自定义类型,属于值变量类型,它可以用于多个变量的封装。
package mainimport "fmt"// 定义新struct类型,顺序:type、struct名、struct
type person struct {name stringage int
}func newPerson(name string) *person {// 定义struct变量p := person{name: name}p.age = 42return &p
}func main() {fmt.Println(person{"Bob", 20})fmt.Println(person{name: "Alice", age: 30})fmt.Println(person{name: "Fred"})fmt.Println(&person{name: "Ann", age: 40})fmt.Println(newPerson("Jon"))s := person{name: "Sean", age: 50}fmt.Println(s.name)sp := &sfmt.Println(sp.age)sp.age = 51fmt.Println(sp.age)
}
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
20. Methods
下面例子展示了方法的使用。Go非传统面向对象语言,没有其他语言中的class关键字。但可以使用结构体和方法达到类似的效果。与一般的函数不同,方法需要指定struct类型的值或者指针作为接收者,接收者的角色类似于其他语言中的对象。
package mainimport "fmt"type rect struct {width, height int
}// 方法定义,顺序:func、接收者、方法名、返回值类型
// 接收者可以是struct类型的指针
func (r *rect) area() int {return r.width * r.height
}// 接受者也可以是struct类型的值
func (r rect) perim() int {return 2*r.width + 2*r.height
}func main() {r := rect{width: 10, height: 5}// go可以自动做struct值类型和指针类型的转换,使得与方法定义适配fmt.Println("area: ", r.area())fmt.Println("perim:", r.perim())rp := &rfmt.Println("area: ", rp.area())fmt.Println("perim:", rp.perim())
}
$ go run methods.go
area: 50
perim: 30
area: 50
perim: 30
相关文章:
Nacos—配置管理
简介: Nacos是阿里巴巴开发的,它旨在帮助用户更敏捷和容易地构建、交付和管理微服务平台。Nacos的主要功能和特性包括: 动态服务发现。Nacos支持基于DNS和RPC的服务发现,允许服务提供者和消费者之间的高效交互。动态配置管理。…...
免费的 ChatGPT、GPTs、AI绘画(国内版)
🔥博客主页:白云如幻❤️感谢大家点赞👍收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚…...
Spring Boot 经典面试题(五)
1.Spring Boot的事务管理是如何实现的? Spring Boot 使用 Spring Framework 中的事务管理功能来实现事务管理。Spring Framework 提供了几种不同的事务管理方式,其中最常用的是基于注解的声明式事务管理。 在 Spring Boot 中,你可以通过 Tr…...
Linux学习之路 -- PCB介绍 -- 进程优先级
1、什么是优先级? 进程需要某一种资源,而系统要通过特定的方式来决定谁先获得这些资源,而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。 2、为什么要有优先级 因为资源的缺乏,所以系统的才会…...
JS中filter()方法的使用 、JS中indexOf()方法的使用
JS中filter()方法的使用JS中indexOf()方法的使用...
垃圾
今天算是真正的遇到垃圾了。...
跟着实例学Go语言(一)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。 教程代码示例来自go by example,文字部分来自本人自己的理解。 本文是教程系列的第一部分,共计20个例子、约1万字。 目…...
数据库基础 - 数据类型、关键字、cmd中操作数据库的命令
cmd中操作数据库的命令 mysql -hlocalhost -用户名 -密码 show database;查询数据库中的小数据库 show 数据库名;查询某一个小数据库 show 表名;查询表的结构 exit 退出数据类型 数值类型 int :整形 double:双精度&…...
2022SDNU-ACM结训赛题解
首先感谢一下各位出题人的精心准备、验题人的辛勤付出、以及选手的积极参加 题解 Problem A 柳予欣的归来【数学】 出题人: bhq 没想到一血是被打完山大的牛客比赛后来结训赛玩的wyx拿走的! 题目描述: 计算(∑0<d<pd−1)m(\sum_{0…...
《人类简史》笔记三—— 历史从无正义
目录 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的? 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 古时候: 上等人 平民和奴隶 现在:…...
Python实现基于用户的协同过滤推荐算法构建电影推荐系统
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于用户的协同过滤推荐(User-based CF)的原理假设:跟你喜好相似的人…...
阿里巴巴专场——第322场周赛题解
目录 模拟法:6253.回环句 排序后模拟:6254. 划分技能点相等的团队 BFS:6255. 两个城市间路径的最小分数 BFS:6256. 将节点分成尽可能多的组 模拟法:6253.回环句 这道题直接按照题目的意思暴力模拟即可:…...
【机器学习】支持向量回归
有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 在阅读本篇之前建议先学习: 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】软间隔与核函数 支持向量回归 支持向量回归(support vector regression…...
Linux安装mysql
1、 查看是否已经安装 Mysql rpm -qa | grep mysql 如果你查看出来有东西,可以使用下面命令将其删除 rpm -e 文件名 2 、下载官方 Mysql 包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 如果安装有提示:Cannot…...
JeecgBoot搭建(低代码)
环境安装 后端:JDK: 1.8 (小于11)、Maven: 3.5、MySql: 5.7、Redis: 3.2 前端:Node Js: 14.18 / 16、Npm: 5.6.0、Yarn: 1.21.1 、Pnpm 工具: IDEA、Navicat、Git、TortoiseGit拉取代码 后端:git clone https://gitee.com/jeecg/…...
【java】3-获取线程引用与线程的属性
1.获取线程的引用 在创建一个线程之后,我们很有必要去获取当前线程实例的引用,以便能够观察到线程的一些属性,或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread,我们便能拿到当前线程的引用 Thread.curr…...
2022-12-04一周学习
这周基本上还是在对前端学习的更多一点,主要是之前没有重视vue3的学习,现在在补上来,学习了vue3的一些知识,前端的权限管理,设置路由守卫,pinia,还学习了redis的一些基本操作,之前只是照搬了别人…...
CG-34 浊度传感器 简单说明
产品概述 浊度传感器是一种智能监测水中悬浮物对光线透过时所发生的阻碍程度的仪器。允许在水中的测量点进行无人值守的操作。采用自清洗设计,可清除水中附着物以及气泡聚集而影响测量结果。具有优异的抗污染能力,即使恶劣的环境长期在线监测,…...
跟着实例学Go语言(二)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。 教程代码示例来自go by example,文字部分来自本人自己的理解。 本文是教程系列的第二部分,共计20个例子、约1.2万字。 …...
linux+window+macos下的JDK安装
1. Linux中安装JDK (1)下载Linux版本的jdk压缩包 (2)解压 tar -zxvf 压缩包名 例如: tar -zxvf jdk-8u251-linux-x64.tar.gz(3)在系统配置文件配置java 编辑profile配置文件 vim /etc/prof…...
DiffuSEEG:一种基于stable diffusion 的SEEG数据补全方法
目录一. 立体脑电图(SEEG)1.1 SEEG概念1.2 SEEG作用1.3 SEEG的适用场景1.4 操作方法一. 立体脑电图(SEEG) 1.1 SEEG概念 立体脑电图(SEEG):是一种借助外科微创的方法将电极植入到大脑不同的部…...
kubernetes—Service介绍
Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资…...
AlphaFold2源码解析(7)--模型之Evoformer
AlphaFold2源码解析(7)–模型之Evoformer 这篇文章我们主要药讲解AlphaFold2的Evoformer的代码细节。 Evoformer Stack 该网络有一个双塔结构,在MSA堆栈中具有轴向的自我注意;在Pair堆栈中具有三角形的乘法更新和三角形的自我注意;以及外积…...
docker 安装 redis 6.0.8 cluster 实战 (3主3从) 动态扩容
这里将上篇博客搭建的3主3从 扩容为 4主4从 1. 新建两个node节点 docker run -d \ --net host \ --privileged \ --name redis-node-7 \ --log-opt max-size100m \ --log-opt max-file3 \ -v /root/docker/redis-node-7/data:/data \ redis:6.0.8 \ --cluster-enabled yes \ -…...
20221204
You are so much more than how you look. 你比你的外表更有魅力 Never give up until the fight is over. 永远不要放弃,要一直战斗到最后一秒。 whats done cannot be undone 覆水难收 If I was going somewhere, I was running。 如果我要去哪儿ÿ…...
CN_数据链路层流量控制@可靠的传输机制@ARP协议
文章目录流量控制技术(协议)停止-等待流量控制滑动窗口流量控制发送窗口接收窗口基本原理可靠的传输机制确认机制ACK超时重传机制RTOARQ处理差错自动重传请求ARQ协议🎈ARQ具体协议单帧ARQ协议停止-等待协议SW-ARQ例连续ARQ协议后退N帧协议(GBN)GBN多帧滑动窗口累计确…...
程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…...
安装ubuntu20.04, CUDA11.4, cnDNN, tensorflow, pytorch
ubuntu22.04默认python为3.11 ubuntu20.04默认python为3.8 第一步,分区安装系统 efi引导区, 逻辑分区,512M root: 主分区,512M swap: 逻辑分区,64G home:逻辑分区,320G /:逻辑分区, 130G, CUDA是安装…...
shell脚本受限执行
shell 中运行的脚本或脚本的个代码断会禁用一些正常 shell 中可以执行的命令.这是限制脚本用户的权限和最小化运行脚本导致的破坏的安全措施.受限的内容包括:使用 cd 命令更改工作目录. 更改环境变量$PATH, $SHELL, $BASH_ENV,或$ENV 的值. 读或更改 shell 环境选项…...
HTTP 速查手册
一、通用身份验证 # 服务端返回401,并告知验证类型为Basic GET 401 Unauthorized WWW-Authenticate: Basic realm"description"# 浏览器输入验证信息后,请求头中携带验证信息 Authorization: Basic xxxxxxxxxx二、Cookie # 服务端返回set-co…...
【计算机视觉】 摄像机标定
摄像机标定 齐次坐标 齐次坐标,将欧氏空间的无穷远点,与投影空间中有实际意义的消失点,建立起映射关系。 把齐次坐标转化为笛卡尔坐标的方法:是前面n-1个坐标分量分别除以最后一个分量即可 一些解释和性质: 比较好的…...
【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)
📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 …...
DHTMLX Diagram JavaScript/HTML5 Pro Library:5.0
Diagram — JavaScript/HTML5 Diagram Library Ω578867473 破解版DHTMLX Diagram comprises a set of interactive HTML5 UI components such as organization charts, flowcharts, decision trees, block diagrams, mind maps, etc. Consisting of nodes and connectors, di…...
GPS卫星位置解算
本文介绍了基于C语言的GPS卫星位置解算原理与程序设计。针对每个原理、公式、代码设计进行了详细讲解,希望能够给测绘学子们带来帮助。 参考书籍: 李征航 黄劲松:GPS测量与数据处理(第三版) 目录 基础原理 1…...
大数据:Sqoop 简介与安装
一、Sqoop 简介 Sqoop 是一个常用的数据迁移工具,主要用于在不同存储系统之间实现数据的导入与导出: 导入数据:从 MySQL,Oracle 等关系型数据库中导入数据到 HDFS、Hive、HBase 等分布式文件存储系统中; 导出数据&am…...
[附源码]计算机毕业设计文曦家教预约系统Springboot程序
项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…...
HK1 BOX刷入 Armbian系统作为服务器
HK1 BOX刷入 Armbian系统作为服务器 1 安装Armbian到EMMC 硬件 HK1 BOX s905 x3 固件版本选择 Armbian_23.02.0_Aml_s905x3_bullseye_5.15.80_server_2022.12.01用usb启动,tf/sd有的设备不行,有干扰,有可能从TF卡无法启动系统。 用usb启…...
CEC2015:动态多目标野狗优化算法求解CEC2015(提供完整MATLAB代码,含GD、IGD、HV和SP评价指标)
一、动态多目标优化问题简介 现实世界中,许多优化问题不仅具有多属性,而且与时间相关,即随着时间的变化,优化问题本身也发生改变,这类问题称为动态多目标优化问题(dynamic multi-objective optimization p…...
【蓝桥杯选拔赛真题31】python三位数组合个数 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python三位数组合个数 一、题目要求 1、编程实现 2、输入输出...
SpringBoot项目--如何不停服更新应用?
原文网址:SpringBoot项目--如何不停服更新应用?_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java后端项目如何不停机更新服务。 在生产环境中,一般都会每个服务部署多个实例。只要多于1个实例,就可以不停服更新应用。 不停服…...
MVVM与Vue响应式原理
Vue的响应式实现原理 MVVM M:模型 》data中的数据 V:视图 》模板 VM:视图模型 》Vue实例对象 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0EWNM16D-1670161519474)(C:\Users\lucas\Desktop\学习\图片\mode…...
vue和react的生命周期
vue和react的生命周期 一、Vue的生命周期二、React的生命周期2.1.类组件2.2.函数式组件一、Vue的生命周期 初始化阶段(组件创建、数据初始化)、挂载、更新、销毁 父子组件生命周期执行顺序 初次加载组件时:父beforeCreate – 父created – 父beforeMount – 子beforeCreate …...
浏览器高度兼容性
浏览器的卷去高度 1.标准模式 document.documentElement.scrollTop 2.非标准模式 document.body.scrollTop 浏览器高度兼容性 1.标准模式下 浏览器的实际高度: document.body.clientHeight 浏览器的可视高度:document.documentElement.clientHeight 2.非…...
关于天干地支及其计算
以天干地支计算日期是我国悠良的传统文化,最近在看如何计算人的生辰八字,写了个程序,但是只能算年的干支,月、日的干支计算方法太复杂了,望之只能却步,还是乖乖去查万年历比较好。这里记下关于干支的一些东…...
数据结构和算法之如何建立图
小白BG.1 邻接矩阵表示的图结点的结构 typedef struct GNode *PtrToGNode;//PtrToGNode是指向GNode的一个指针 struct GNode{ int Nv;//顶点数 int Ne;//边数 WeightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum];//存顶点的数据 }; typedef PtrToGNode MG…...
计算机毕业设计Java大众采编本微资讯发布平台(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java大众采编本微资讯发布平台(源码系统mysql数据库lw文档) 计算机毕业设计Java大众采编本微资讯发布平台(源码系统mysql数据库lw文档)本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse…...
web前端-javascript-立即执行函数(说明、例子)
立即执行函数 /* (function(){alert("我是一个匿名函数~~~"); })(); */(function (a, b) {console.log("a " a);console.log("b " b); })(123, 456);1. 说明 函数定义完,立即被调用,这种函数叫做立即执行函数立即执…...
【计算机视觉】图像形成与颜色
图像形成与颜色 光照及阴影 辐射度学 颜色 颜色信息反映了入射光的能量分布与波长,可见光的波长在400nm到760nm之间。 RGB RGB分别代表三个基色(R-红色、G-绿色、B-蓝色),如(0,0,0)表示黑色、(255, 255, 255)表示白色。其中2…...
Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目
文章目录前言视频介绍项目截图项目地址项目源码以上就是本篇文章的全部内容,将你编写好的项目分享给你的朋友们或者那个TA吧!制作不易,求个三连!❤️ 💬 ⭐️前言 今天博主在刷短视频时😐,朋友推…...
[附源码]Python计算机毕业设计SSM进出口食品安全信息管理系统(程序+LW)
项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…...
电平触发的触发器
普通的SR锁存器没有任何抗干扰能力 我们要加控制信号,来抵抗干扰 比如说我们不把信号直接加在门上,我们可以再加一级门电路,让这个输出和输入不在同一个门上,我们希望加入一个控制信号,来控制电路工作的时刻 对电路结…...
php后端+JQuery+Ajax简单表单提交
通过ajax,如果从后端直接想前端返回数组,那前端收到的是一个‘Array’的字符串。所以,我比较习惯的是用json对象的格式。由后端通过json_encode()函数,把数组封装成对象,传递到前端;前端也以json的格式接收。这里用提交表单来举例说明。 页面显示如下: JQueryAjax.…...
论文投稿指南——中文核心期刊推荐(计算机技术2)
>>>深度学习Tricks,第一时间送达<<< 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。下面,简单介绍下什么是中文核心期刊要目总览: 《中文核心期刊要目总…...
集合java
java集合 集合、数组都是对多个数据进行存储操作的结构,简称Java容器 此时的存储,主要是指内存层面的存储,不涉及持久化的存储(txt,jpg,avi) Java集合可分为Collection 和 Map 两种体系 1. Collection接口࿱…...
spring boot 应用mybatis
Mybatis入门: Mybatis入门_做测试的喵酱的博客-CSDN博客 目录 一、spring boot 应用mybatis 核心 二、举例: 2.1 背景 2.2 项目结构: 2.3 依赖包 pom 2.4 项目配置文件application.yml 2.5 实例层entity 2.6 mybatis的mapper层 2.7 spring boot…...
Java项目:ssm图书馆管理系统
作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 基于ssm的图书馆管理系统.主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 用户分为…...
2024年五一杯数学建模C题思路分析
文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…...
每日算法4/17
1552. 两球之间的磁力 题目 在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n 个空的篮子,第 i 个篮子的位置在 position[i] ,Morty 想把 m 个球放到这些篮子里&…...
漂亮的七彩引导页导航HTML源码
源码介绍 漂亮的七彩引导页导航HTML源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 效果截图 源码下载 漂亮的七彩…...
QT中的OpenGL学习-----3D图形
一、3D坐标系 记住V_clip M_projection * M_view * M_model * V_local就行,可以在顶点着色器里面添加位置信息: #version 330 core layout (location 2) in vec3 aPos;//location属性位置有16个 layout (location 3) in vec3 aColor; layout (locati…...
python_day27
网络编程 Tcp基本语法: 服务端: import socket# 1创建一个TCP/IP socket sk socket.socket()#2 绑定端口: 默认本地ip: 127.0.0.1 sk.bind((127.0.0.1, 9999))# 3监听端口: sk.listen()#4三次握手 conn,addr sk.accept()#5收发数据逻辑 res conn.…...
ARM GPIO模拟IIC获取温湿度
IIC.c #include "iic.h" extern void printf(const char *fmt, ...); /** 函数名 : delay_us* 函数功能:延时函数* 函数参数:无* 函数返回值:无* */ void delay_us(void) {unsigned int i 2000;while (i--); } /** 函…...