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

Golang学习Day1

😋 大家好,我是YAy_17,是一枚爱好网安的小白。
本人水平有限,欢迎各位大佬指点,欢迎关注 😁,一起学习 💗 ,一起进步 ⭐ 。
⭐ 此后如竟没有炬火,我便是唯一的光。 ⭐

Go语言学习Day1

package main
//表示hello.go文件所在的包是main,在GO中每一个文件都归属于一个包
import "fmt"
//导入一个包,“fmt”,之后便可以使用fmt中的函数,例如"fmt.Println()"
func main() {//func是一个关键字,main是函数名,同时也是主函数,是整个程序的入口fmt.Println("hello world")//使用fmt包中的函数Println()来输出hello world
}

GO语言的两种执行流程

  1. 先编译(go build *.go文件)生成可执行文件(*.exe),之后再运行可执行文件;(可以生成自己命名的可执行程序,go build -o myhello.exe hello.go)

  1. 直接使用go run *.go文件,进行运行

两种执行流程的区别和优缺点:

  1. 如果我们先编译生成可执行文件,再运行可执行文件,那么我们可以将生成的可执行文件移植到一台没有go开发环境的机器上进行执行

  1. 如果我们是直接使用 go run *.go文件,那么就需要运行的机器必须具备go语言的开发环境

  1. 在编译的时候,编译器会将程序运行所依赖的库文件全部包含到可执行文件中,因此生成的可执行文件比较大

Go语言的开发注意事项

Go语言常用的转义字符

// Go语言中的常用转移字符
package main
import "fmt"func main() {fmt.Println("hello\nworld!")fmt.Println("hello\tY4y17")fmt.Println("D:\\Microsoft VS Code\\GO\\Gocode\\src\\go_code")fmt.Println("Y4y17说\"Golang yyds\"")fmt.Println("小黑子露出鸡脚了吧\r我是ikun")
}

需要注意的是最后面的\r,其他的都比较的熟悉,\r代表着:输出当前行的内容,然后从\r后面开始的地方,覆盖掉最前面的内容

标识符、关键字和命名规则

标识符的组成

  1. 标识符只能由数字、字母和下划线组成

  1. 标识符的开头只能是字母和下划线

  1. 标识符是区分大小写的

package main
import "fmt"
func main(){var name string 	//定义变量的时候要写上var 然后是变量的名字 最后是变量的类型var age int var _sys int
}

关键字

GO语言提供了25个关键字;

Golang变量声明

声明变量的语法:

var idetifier type
var:声明变量的关键字
identifier:变量的名称
type:变量的类型
PS:定义变量之后,必须要使用,不使用就会出错!

批量声明

package main
var(name stringage int b bool
)

尝试打印输出:

变量初始化

逐个变量进行初始化

func main() {var name string = "Y4y17"var age int = 21var b bool = truefmt.Printf("name:%v\n", name)fmt.Printf("age:%v\n", age)fmt.Printf("b:%v", b)
}

多个变量初始化

func main() {var name,age,b = "Y4y17",21,truefmt.Printf("name:%v\n", name)fmt.Printf("age:%v\n", age)fmt.Printf("b:%v", b)
}

类型推断

var name = "Y4y17"	//不需要后面的数据类型

短变量声明

在函数内部,可以使用:=运算符对变量进行声明和初始化

package main
func main(){name := "Y4y17"age := 21
}

这种方法只适合在函数内部,函数外部不能使用

匿名变量

package main
import "fmt"
func GetNameAndAge() (string, int) {return "Y4y17", 21
}func main() {name, age := GetNameAndAge()fmt.Printf("name:%v\tage:%v", name, age)
}package main
import "fmt"
func GetNameAndAge() (string, int) {return "Y4y17", 21
}func main() {name, age := GetNameAndAge()fmt.Printf("name:%v\tage:%v", name, age)
}//有的时候比如name没有用到,我们还可以用下划线替换掉name
func GetNameAndAge() (string, int) {return "Y4y17", 21
}func main() {_,age := GetNameAndAge()fmt.Printf("age:%v",age)
}

常量的初始化

有一个比较特殊的常量,他是可以更改值的,iota默认开始值为0,每调用一次加1,遇到const关键字的时候被重置为0

package mainimport ("fmt"
)
func main() {const (a1 = iotaa2 = iotaa3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
//输出的结果为0 1 2

使用”_“来跳过某一些值

package mainimport ("fmt"
)
func main() {const (a1 = iota_a3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a3: %v\n", a3)
}
//输出的结果为0  2

iota中间插队

package mainimport ("fmt"
)
func main() {const (a1 = iota_a3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a3: %v\n", a3)
}
//输出的结果为0  2

Go语言的数据类型

package main
import ("fmt"
)func main() {var name string = "zhangsan"age := 20b := truefmt.Printf("%T\n%T\n%T\n", name, age, b)inter := &agefmt.Printf("%T\n", inter)a := [2]int{1, 2}efmt.Printf("%T\n", a)c := []int{1,2,3}fmt.Printf("%T\n",c)
}

分别输出:

最后面的c := []int{1,2,3} 他不是数组,它叫做切片,也是个动态的数组,就是当长度不指定的时候,便是切片;

数字类型:

Go语言字符串字面量

在Go语言中,字符串字面量使用双引号”“或者是反引号来创建。在Go语言中没有char类型,单行的字符串用双引号,多行的字符串用的是反引号;

package mainimport "fmt"func main() {var str string = "hello"str2 := `line 1line 2line 3`fmt.Printf("str: %v\n", str)fmt.Printf("str2: %v\n", str2)
}

字符串的连接

”+“号

package main
import ("fmt"
)
func main() {name := "Y4y17"age := "20"s := name + agefmt.Printf("s: %v\n", s)}

fmt.Sprintf()

package main
import ("fmt"
)
func main() {name := "Y4y17"age := "20"s1 := fmt.Sprintf("%v,%v", name, age)fmt.Printf("s1: %v\n", s1)
}

strings.Join()

package main
import ("fmt""strings"
)
func main() {name := "Y4y17"age := "20"s2 := strings.Join([]string{name, age}, ",")fmt.Printf("s2: %v\n", s2)
}
//strings.Join这种方式,两个参数,第一个参数是一个用来连接的空的数组,第二个参数是
//用来连接时的中间的分隔符

write.buffer

package mainimport ("bytes""fmt"
)func main() {var buffer bytes.Bufferbuffer.WriteString("Y4y17")buffer.WriteString(",")buffer.WriteString("20")fmt.Printf("buffer.String(): %v\n", buffer.String())
}

Go语言中的切片操作

package mainimport "fmt"
func main() {s := "hello world"n := 3m := 5fmt.Printf("s[n]: %v\n", s[n])fmt.Printf("s[n:m]: %v\n", s[n:m])		//前闭后开区间  [)fmt.Printf("s[n:]: %v\n", s[n:])fmt.Printf("s[:m]: %v\n", s[:m])
}

Go语言中的字符串函数

package mainimport ("fmt""strings"
)func main() {s := "hello World"//返回字符串的长度fmt.Printf("len(s): %v\n", len(s))//字符串的分割函数fmt.Printf("strings.Split(s, \" \"): %v\n", strings.Split(s, " "))//判断字符串中是否包含另一个字符串fmt.Printf("strings.Contains(s, \"hello\"): %v\n", strings.Contains(s, "hello"))//转换小写fmt.Printf("strings.ToLower(s): %v\n", strings.ToLower(s))//转化大写fmt.Printf("strings.ToUpper(s): %v\n", strings.ToUpper(s))//判断字符串中是否含有某个前缀fmt.Println(strings.CutPrefix(s, "hello"))//判断字符串中时候含有某个后缀fmt.Println(strings.CutSuffix(s, "World"))}

Go格式化输出

package mainimport "fmt"type website struct {name string
}func main() {site := website{name: "Y4y17.com"}fmt.Printf("site: %v\n", site)  //%v 代表的就是varfmt.Printf("site: %#v\n", site) //%#v 会将详细内容输出fmt.Printf("site: %T\n", site)  //%T代表的是type
}

Go语言的运算符

与其他的语言一样,+ - * / %的用法都是一样的,当然还有自增和自减的运算符(++ --)

package main
import "fmt"
func main() {a := 10b := 21fmt.Printf("a: %v\n", a)fmt.Printf("b: %v\n", b)fmt.Printf("(a + b): %v\n", (a + b))fmt.Printf("(a - b): %v\n", (a - b))fmt.Printf("(a / b): %v\n", (a / b))fmt.Printf("(a * b): %v\n", (a * b))//fmt.Printf("(b % a): %v\n", (b % a))c := b % 10fmt.Printf("c: %v\n", c)//++ --a++fmt.Printf("a: %v\n", a)b--fmt.Printf("b: %v\n", b)
}
/*
a: 10
b: 21
(a + b): 31
(a - b): -11
(a / b): 0
(a * b): 210
c: 1
a: 11
b: 20
*/

Golang中的选择结构

if else语句

package mainimport "fmt"func main() {a := 18if a > 18 {fmt.Println("成年")} else {fmt.Println("未成年")}
}

Go语言不同于其他的语言,它可以在if语句中定义变量:

package mainimport "fmt"func main() {if a := 18; a > 18 {fmt.Println("成年")} else {fmt.Println("未成年")}
}

if else if语句

package mainimport "fmt"func main() {if a := 18; a > 18 {fmt.Println("成年")} else if a < 18 {fmt.Println("未成年")} else {fmt.Println("18岁")    }
}

switch结构

package main
import "fmt"
func f1() {var day intfmt.Scan(&day)switch day {case 1, 2, 3, 4, 5:	//只要匹配到一个值就可以fmt.Println("work day")case 6, 7:fmt.Println("relax")default:fmt.Println("输入出错")}
}func main() {f1()
}
在Go语言中,不需要使用break
package mainimport "fmt"func f1() {score := 60//当switch后面什么都不写的时候,默认为trueswitch {case score >= 60:fmt.Println("及格")case score > 70 && score <= 100:fmt.Println("优秀")default:fmt.Println("不及格")}
}func main() {f1()
}

fallthrough(穿漏)

package mainimport "fmt"func f1() {score := 100switch score {case 100:fmt.Println("100")fallthrough		//加上fallthrough的时候,会继续向下执行case 200:fmt.Println("200")case 300:fmt.Println("300")}
}
func main() {f1()
}

Go语言中switch语句的注意事项

  1. 支持多条件匹配

  1. 不同的case之间不使用break分割,默认只会执行一个case

  1. 如果想要执行多个case,需要使用fallthrough关键字,也可以用break终止

  1. 分支还可以使用表达式,例如a>10

Go语言中的for循环

//格式还是和其他的语言是一样的,只不过不需要加上括号
package mainimport "fmt"func f1() {// i := 1// for i <= 10 {// 	fmt.Printf("i: %v\n", i)// 	i++// }for i := 1; i <= 10; i++ {fmt.Printf("i: %v\n", i)}
}
func main() {f1()
}

for range循环

Go语言中可以使用for range遍历数组、切片、字符串、map以及通道。通过for range遍历的返回值具有以下的规律:

  1. 数组、切片、字符串返回索引和值

  1. map返回键和值

  1. 通道只返回通道内的值

package mainimport "fmt"func f() {var a = [...]int{1, 2, 3, 4, 5, 6}	//当[]内什么都不写的时候,就是切片// for i, v := range a {// 	fmt.Printf("i: %v\tv: %v\n", i, v)// }//还可以直接输入forr,快捷键for _, v := range a {fmt.Printf("v: %v\n", v)}
}
func main() {f()
}
package mainimport "fmt"func f() {m := make(map[string]string, 0)m["name"] = "Y4y17"m["age"] = "23"m["email"] = "Y4y17@email.com"for key, value := range m {fmt.Printf("key: %v\tvaule: %v\n", key, value)}
}
func main() {f()
}

Go语言中的跳转语句

break

break除了在switch 和 for循环中去使用,还可以在标签中使用:

package mainimport "fmt"func f() {
MYLABEL:for i := 0; i < 10; i++ {fmt.Printf("i: %v\n", i)if i >= 5 {break MYLABEL}}fmt.Println("END")
}func main() {f()
}

continue

package mainimport ("fmt"
)func f1() {for i := 0; i < 10; i++ {MYLABLE:for j := 0; j < 10; j++ {if i == 2 && j == 2 {	//跳过i=2 j=2的情况continue MYLABLE}fmt.Printf("%v:%v\n", i, j)}}
}
func f() {for i := 0; i < 10; i++ {if i == 2 {continue} else {fmt.Printf("i: %v\n", i)}}
}func main() {// f()f1()
}

goto

goto语句常用于跳出多层循环

package mainimport ("fmt"
)func f2() {for i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if i == 2 && j == 2 {	//当i=2 j=2的时候,直接跳出两个循环,跳到END继续运行goto END}fmt.Printf("%v:%v\n", i, j)}}
END:fmt.Printf("end...")
}
func main() {f2()
}

Go语言中的数组

定义和初始化

package mainimport "fmt"func test1() {//数组的定义var a1 [2]intvar a2 [3]stringvar a3 [2]boolfmt.Printf("a1: %T\n", a1)fmt.Printf("a2: %T\n", a2)fmt.Printf("a3: %T\n", a3)//数组的初始化var a4 = [2]int{3, 4}var a5 = [2]string{"Y4y17", "hello"}var a6 = [2]bool{true, false}fmt.Printf("a4: %v\n", a4)fmt.Printf("a5: %v\n", a5)fmt.Printf("a6: %v\n", a6)var a7 = [...]int{7, 8, 9}fmt.Printf("len(a7): %v\n", len(a7))//根据索引进行赋值var a8 = []int{0: 1, 5: 9}var a9 = []string{1: "Y4y17", 8: "hello"}fmt.Printf("a8: %v\n", a8)fmt.Printf("a9: %v\n", a9)
}
func main() {test1()
}

数组的遍历

package mainimport "fmt"func test1() {var a = [5]int{1, 2, 3, 4, 6}for i := 0; i < len(a); i++ {fmt.Printf("a[%v]: %v\n", i, a[i])}
}
func test2() {var str = [4]string{"Y4y17", "hello", "world", "7777"}for i, v := range str {		//其中i代表的是索引值,v代表的就是str[i]//如果不想使用i(索引值),那么我们可以将i修改为下划线(_)fmt.Printf("str[%v]: %v\n", i, v)}
}
func main() {test1()fmt.Printf("-----------\n")test2()
}

输出结果如下:

Go语言中的切片

切片的声明

package mainimport "fmt"func test1() {//切片的声明var list1 []intfmt.Printf("list1: %v\n", list1)var list2 = make([]int, 2)fmt.Printf("list2: %v\n", list2)//切片的初始化var list3 = []int{1, 2, 3}fmt.Printf("list3[1]: %v\n", list3[1])//输出list2的长度和容量fmt.Printf("len(list2): %v\n", len(list2))fmt.Printf("cap(list2): %v\n", cap(list2))
}
func main() {test1()
}

切片的初始化

针对切片的切分遵循:左闭右开 即 [ )

package mainimport "fmt"func test1() {//第一种初始化var list1 = []int{1, 2, 3, 4}fmt.Printf("list1: %v\n", list1)//第二种初始化//利用数组进行初始化var a = [...]int{1, 2, 3, 4, 5, 6}list2 := a[2:5]fmt.Printf("list2: %v\n", list2)list3 := a[2:]fmt.Printf("list3: %v\n", list3)list4 := a[:]fmt.Printf("list4: %v\n", list4)list5 := a[:5]fmt.Printf("list5: %v\n", list5)
}
func main() {test1()
}

切片的遍历

同样切片的遍历和数组的遍历类似,存在两种遍历的方式:

package main
import "fmt"
func test1() {var list1 = []int{1, 2, 3, 4, 5, 6}for i := 0; i < len(list1); i++ {fmt.Printf("list1[%v]: %v\n", i, list1[i])}
}
func test2() {var list1 = []int{1, 2, 3, 4, 5, 6}for i, v := range list1 {fmt.Printf("i:%v v: %v\n", i, v)}
}
func main() {// test1()test2()
}

切片的增删改查

package mainimport "fmt"//add
func add() {var list = []int{1, 3, 2, 5, 99}list = append(list, 100)fmt.Printf("list: %v\n", list)
}//delete
func delete() {var list = []int{1, 2, 3, 4, 5, 6, 7}list = append(list[:3], list[4:]...) //删除索引为3的元素fmt.Printf("list: %v\n", list)
}//update
func update() {var list = []int{1, 2, 3, 4, 5, 6, 7}list[4] = 777fmt.Printf("list: %v\n", list)
}//query
func query() {var list = []int{1, 2, 3, 4, 5, 6, 7}key := 5for _, v := range list {if key == v {fmt.Printf("v: %v\n", v)}}
}//copy函数的用法
func test() {var list = []int{1, 2, 3, 4}var list2 = make([]int, 4)copy(list2, list)// fmt.Printf("list: %v\n", list)fmt.Printf("list2: %v\n", list2)}
func main() {//add()// delete()// update()//query()test()
}

Go语言中的map

map是一种无序的键值对的集合;最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值;

两种定义map的方式:

  1. 一种是通过内建函数make

  1. 另一种是通过map关键字来定义Map

package mainimport "fmt"
func test2() {map1 := map[string]string{"name": "Y4y17", "age": "23", "email": "xxx.com"}for _, v := range map1 {fmt.Printf("v: %v\n", v)}
}
func test1() {//map的声明var map1 map[string]string//创建集合map1 = make(map[string]string)//map 插入key-value对map1["name"] = "Y4y17"map1["age"] = "23"map1["email"] = "xxx.com"//使用键来输出map值for site := range map1 {fmt.Println(site, "---->", map1[site])}v, ok := map1["name"]fmt.Printf("v: %v\n", v)fmt.Printf("ok: %v\n", ok)v, ok = map1["ages"]fmt.Printf("v: %v\n", v)fmt.Printf("ok: %v\n", ok)
}
func main() {test1()
}

相关文章:

Golang学习Day1

&#x1f60b; 大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白。本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;欢迎关注 &#x1f601;&#xff0c;一起学习 &#x1f497; &#xff0c;一起进步 ⭐ 。⭐ 此后如竟没有炬火&#xff0c;我便是唯一的光…...

《设计模式》工厂模式

《设计模式》工厂模式 工厂模式又分为简单工厂&#xff08;Simple Factory&#xff09;、工厂方法&#xff08;Factory Method&#xff09;和抽象工厂&#xff08;Abstract Factory&#xff09;都是常用的创建型设计模式&#xff0c;它们的主要区别如下&#xff1a; 简单工厂…...

JS - 原型对象、原型链是什么

一 阅读掘金 https://juejin.cn/post/7007416743215759373 https://juejin.cn/post/7007416743215759373 二 阅读掘金小册原型知识点 原型 涉及面试题&#xff1a;如何理解原型&#xff1f;如何理解原型链&#xff1f; 当我们创建一个对象时 let obj { age: 25 }&#xff0…...

STM32f103 CubeMX封装 led程序

本文代码使用 HAL 库。 文章目录前言一、LED 原理图二、CubeMX创建工程三、LED 相关函数1. 输出电平函数&#xff1a;2. 延时函数&#xff1a;3. 翻转电平函数&#xff1a;四、详细代码实验现象 &#xff1a;总结代码 源码&#xff1a;前言 从这篇文章开始&#xff0c;我们讲解…...

智慧教室系统--温湿度控制系统

随着科技的不断进步&#xff0c;智能化已经成为了各个行业的发展趋势&#xff0c;智慧教室作为未来教育的主流趋势之一&#xff0c;也将受益于这一趋势。而智慧教室中的温湿度控制系统是其中的重要组成部分&#xff0c;为了创造一个舒适、健康、安全的教学环境&#xff0c;智慧…...

只要一直向前定能到达远方,社科院与杜兰大学金融管理硕士项目为你注入动力

在人生这条道路上&#xff0c;我们很远的路要走&#xff0c;不管前方是否平坦&#xff0c;我们只要坚持前向&#xff0c;终将抵达远方。一路上我们付出很多&#xff0c;也收获很多。想要变得更强大&#xff0c;就要不断优化自身&#xff0c;积攒更多的能量&#xff0c;社科院与…...

Java性能-回收算法-Throughout回收算法

垃圾回收算法 理解Throughput回收器 回收器三个基本操作——回收 找到不使用的对象 释放内存 压缩堆碎片 Minor GC和Full GC&#xff0c;每个操作都会标记&#xff0c;释放和压缩对应的目标分代 [63.205s][info][gc,start ] GC(13) Pause Full (Ergonomics) [63.205s][info][…...

立项近7年,索尼产品经理分享PS VR2开发背后的故事

备受期待的索尼PS VR2终于正式发售&#xff0c;VR爱好者们终于有机会体验到《地平线&#xff1a;山之呼唤》等PS VR2独占的VR大作。近期&#xff0c;为了解PS VR2头显诞生背后的故事&#xff0c;外媒AV Watch采访到PS VR2的开发负责人Yasuo Takahashi&#xff0c;在本次采访中&…...

Kubernetes 如何通过ingress-nginx实现应用灰度发布?

在日常的工作中&#xff0c;我们会经常对应用进行发版升级&#xff0c;在互联网公司尤为频繁&#xff0c;主要是为了满足快速的业务发展。我们经常用到的发布方式有滚动更新、蓝绿发布、灰度发布。滚动更新&#xff1a;依次进行新旧替换&#xff0c;直到旧的全部被替换为止。蓝…...

华为OD机试 - 密室逃生游戏(Java) | 机试题+算法思路+考点+代码解析 【2023】

密室逃生游戏 小强增在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子, 并给出箱子编号,箱子编号为 1~N 。 每个箱子中都有一个 字符串s ,字符串由大写字母、小写字母、数字、标点符号、空格组成, 需要在这些字符串中找到所有…...

redis的主从复制细节

文章目录复制机制的运作复制的一些事实master持久化关闭时&#xff0c;复制的安全性Redis复制是如何工作的只读性质的slave设置一个slave对master进行验证允许只写入N个附加的副本Redis如何处理过期键重新启动和故障转移后的部分同步复制机制的运作 master和slave的复制运作依…...

SparkSQL

第1章 SparkSQL 概述1.1 SparkSQL 是什么Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。1.2 Hive and SparkSQLSparkSQL 的前身是 Shark&#xff0c;给熟悉 RDBMS 但又不理解 MapReduce 的技术人员提供快速上手的工具。Hive 是早期唯一运行在 Hadoop …...

Python|每日一练|栈|数组|字典树|数组|树|广度优先搜索|单选记录:逆波兰表达式求值|回文对|二叉树的层序遍历

1、逆波兰表达式求值&#xff08;栈&#xff0c;数组&#xff09; 根据 逆波兰表示法(https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E5%BC%8F/128437)&#xff0c;求表达式的值。 有效的算符包括 、-、*、/ 。每个运算对象可以是整数&#xff0c;也可以是另一个…...

慧教室系统--远程控制系统

随着科技的不断进步&#xff0c;越来越多的教育机构开始使用智慧教室系统来提升教学效果和学生体验。智慧教室系统不仅可以自动化管理设备&#xff0c;还可以实现远程控制&#xff0c;帮助教师和学生更加便捷地使用教室设备。智慧教室系统作为一款领先的智慧教育解决方案&#…...

OSCP-课外1(http万能密码、hydra密码暴力破解http、代码审计、Win缓存区溢出)

目录 难度 主机发现&端口扫描 信息收集 万能密码 hydra密码暴力破解...

ELK日志分析--Logstash

Logstash简介 Logstash安装 测试运行 配置输入和输出 使用Geoip过滤器插件增强数据编辑 配置接收 Beats 的输入 1.Logstash简介 Logstash管道具有两个必需元素input和output&#xff0c;以及一个可选元素filter。输入插件使用来自源的数据&#xff0c;过滤器插件根据你的…...

Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据

场景 Navicat通过存储过程批量插入mysql数据&#xff1a; Navicat通过存储过程批量插入mysql数据_霸道流氓气质的博客-CSDN博客 上面使用过Navicat借助存储过程批量插入数据。但是插入数据是固定的 insert语句&#xff0c;如果在本地开发时需要模拟插入一些随机数据(从指定…...

【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】

文章目录前言1.高精度加法2.高精度减法3.高精度乘法4.高精度除法写在最后前言 当我们在利用计算机进行一些计算时&#xff0c;可能会遇到这类问题 &#xff1a; 有些计算要求精度高&#xff0c;希望计算的数的位数可达几十位甚至几百位&#xff0c;虽然计算机的计算精度也算较…...

事理知识图谱

事理知识图谱能够有力第建模各类事件之间的演化关联关系为事理逻辑推理提供更好的数据基础。 事理图谱定义 事理知识图谱可以将文本中对事件以及事件之间的关系抽取并抽象出来&#xff0c;构建成一个有向图形式的事理知识库。在结构上&#xff0c;事理知识图谱是一个有向有环…...

多綫程之python爬蟲構建

目录多綫程定義簡介原理优点缺点优势代碼框架實現導包打印類爬蟲類構造方法獲取代理設置headers獲取新session獲取源代碼解析網頁解析子頁面保存數據綫程任務得到url啓動多綫程爬蟲總結多綫程 以下定義來自百度百科&#xff0c;看看就好沒仔細寫 定義 多线程&#xff08;mul…...

【干货】Redis在Java开发中的基本使用和巧妙用法

Redis是一款高性能的内存数据结构存储系统&#xff0c;能够支持多种数据结构类型&#xff0c;如字符串、哈希、列表、集合、有序集合等&#xff0c;也能够支持高级功能&#xff0c;如事务、发布/订阅、Lua脚本等&#xff0c;具有高可用性、高并发性和可扩展性的优点。在Java开发…...

历时半年,我终于阿里上岸了,附面经和Java非科班学习心得

个人经历 本科双非化学&#xff0c;跨考了电子硕士&#xff0c;研究生依然双非。无互联网实习&#xff0c;无比赛无论文。&#xff08;研究生研究方向是车辆电子和楼宇自动化&#xff0c;有自动化和高校实训讲师相关的实习经历&#xff09; 21年11开始学Java准备秋招。 阿里上…...

ArkUI实战,自定义饼状图组件PieChart

本节笔者带领读者实现一个饼状图 PieChart 组件&#xff0c;该组件是根据笔者之前封装的 MiniCanvas 实现的&#xff0c; PieChart 的最终演示效果如下图所示&#xff1a; 饼状图实现的拆分 根据上图的样式效果&#xff0c;实现一个饼状图&#xff0c;实质就是绘制一个个的实…...

工作实战之系统交互api调用认证设计

目录 前言 一、黄金段位接口交互 二、钻石段位接口交互设计 1.接口文档定义 2.工具类以及demo提供 a.调用方部分代码 b.被调用方 三.星耀段位接口访问设计 1.在钻石段位的基础上&#xff0c;进行sdk的封装 a.maven引入 b.sdk包含工具类 四.王者段位接口访问设计 1.开发详情 2.…...

学习系统编程No.5【虚拟地址空间】

引言: 北京时间&#xff1a;2023/2/22&#xff0c;离补考期末考试还有5天&#xff0c;不慌&#xff0c;刚午觉睡醒&#xff0c;闹钟2点20&#xff0c;拖到2点50&#xff0c;是近以来&#xff0c;唯一一次有一种睡不醒的感觉&#xff0c;但是现在却没有精神&#xff0c;因为听了…...

Linux常用指令(未完待续。。。)

* basename&#xff1a;只留下路径的“最后一部分” X、文件夹&目录操作 复制 &#xff1a;cp /xxx /xxx - a 该选项通常在拷贝目录时使用。它保留链接、文件属性&#xff0c;并递归地拷贝目录&#xff0c;其作用等于dpR选项的组合&#xff1b; - d 拷贝时保留链接&#…...

用D写裸机

原文 用D编写裸机RISC-V应用 这篇文章展示,如何用D编写,目标为RISC-VQEMU模拟器的程序裸机"你好".项目 为什么是D? 我最近一直在用C编写裸机代码,我有点对C缺乏特征感到沮丧.D引入了叫betterC的模式(基本上禁止了D运行时的所有语言功能).使得D裸机编程大致与C一…...

(二十五)、实现评论功能(5)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】

1&#xff0c;实现二级回复的入库操作 1.1 两个子组件&#xff08;comment-item和comment-frame&#xff09;与父组件reply之间的属性传值 comment-item&#xff1a; props: {item: {type: Object,default () {return {}}}},comment-frame&#xff1a; props: {commentObj: {…...

【概念辨析】二维数组传参的几种可能性

一、二维数组传参竟然不是用二级指针进行接收&#xff1f; 今天进行再一次的二级指针学习时&#xff0c;发现了一条以前没怎么注意过的知识点&#xff1a;二维数组进行传参只能用二维数组&#xff08;不能省略列&#xff09;进行接收或者是数组指针。 问题复现代码如下&#xf…...

python和C++代码实现图片九宫格切图程序(附VS2015配置Opencv教程)

1、python代码实现图片分割成九宫格 需要包含的库&#xff0c;没有下载安装的&#xff0c;需要自己安装哦。 实现原理很简单&#xff0c;就是用PIL库不断画小区域&#xff0c;切下来存储成新的小图片。 假设每一个格子的宽和高分别是w、h&#xff0c;那么第row行&#xff08…...