Skip to content

Commit 9e7d7ca

Browse files
committed
欢迎关注我的博客,区块链全阶段课程即将上线,敬请期待!
1 parent d66e255 commit 9e7d7ca

File tree

220 files changed

+12681
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

220 files changed

+12681
-0
lines changed

.idea/workspace.xml

+407
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+85
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,87 @@
11
# LearnGo
22
打造全网最棒的Go语言学习项目
3+
第一阶段
4+
第1章:Go语言语法基础
5+
1.1 Go语言介绍
6+
1.2 Go语言开发环境搭建
7+
1.3 详解GOPATH
8+
1.4 Go语言基本数据类型
9+
1.5 常量、变量、表达式
10+
1.6 iota定义常量组
11+
1.7 标准输入与输出
12+
1.8 程序运算1:数学运算
13+
1.9 程序运算2:逻辑运算
14+
1.10 程序运算3:位运算
15+
1.11 流程控制1:选择结构
16+
1.12 流程控制2:循环结构
17+
1.13 流程控制3:延时执行defer
18+
1.14 流程控制4:直接跳转goto
19+
1.15 函数1:参数和返回值
20+
1.16 函数2:匿名函数
21+
1.17 函数3:闭包函数
22+
1.18 读取命令行参数
23+
1.19 复合类型1:数组
24+
1.20 复合类型2:切片
25+
1.21 复合类型3:映射
26+
1.22 复合类型4:结构体
27+
1.23 复合类型5:指针
28+
1.24 SDK标准库1:strings
29+
1.25 SDK标准库2:math
30+
1.26 SDK标准库3:os
31+
第2章:Go语言语法进阶
32+
2.1 面向对象1:封装
33+
2.2 面向对象2:继承
34+
2.3 面向对象3:多态
35+
2.4 面向对象4:接口与实现
36+
2.5 面向对象5:接口的继承
37+
2.6 面向对象5:接口的类型断言
38+
2.7 文件操作1:文件读写的一般操作
39+
2.8 文件操作2:实战案例
40+
2.9 JSON读写1:JSON序列化
41+
2.10 JSON读写2:JSON反序列化
42+
2.11 JSON读写3:读写JSON文件
43+
2.12 异常处理1:恐慌与处理
44+
2.13 异常处理2:返回错误
45+
2.14 异常处理3:自定义异常
46+
2.15 反射简介
47+
2.16 单元测试
48+
2.17 压力测试
49+
2.18 网络常识
50+
2.19 网络通信1:UDP
51+
2.20 网络通信2:TCP简单通信
52+
2.21 网络通信3:TCP交互通信
53+
2.22 网络通信4:TCP广播
54+
2.23 网络通信5:执行HTTP的GET/POST请求
55+
2.24 网络通信6:搭建HTTP服务器
56+
第3章:Linux与数据库
57+
3.1 Linux操作系统简介
58+
3.2 Linux日常命令
59+
3.3 Linux下搭建Go语言开发环境
60+
3.4 MySQL数据库1:简介与安装
61+
3.5 MySQL数据库2:基本增删改查
62+
3.6 MySQL数据库3:表结构与字段约束
63+
3.7 MySQL数据库4:表关系管理
64+
3.8 MySQL数据库5:多表联合查询
65+
3.9 MySQL数据库5:Go与MySQL的交互
66+
3.10 Redis数据库1:简介与安装
67+
3.11 Redis数据库2:常用数据操作
68+
3.12 Redis数据库3:常用管理操作
69+
3.13 Redis数据库4:Go与Redis的交互
70+
第4章:高并发与项目实战
71+
4.1 并发技术1:CSP并发理论
72+
4.2 并发技术2:多协程
73+
4.3 并发技术3:管道通信
74+
4.4 并发技术4:同步调度
75+
4.5 并发技术5:死锁问题
76+
4.6 正则表达式
77+
4.7 图形用户界面1:初识Walk
78+
4.8 图形用户界面2:常用控件
79+
4.9 实战项目1:基于开源数据的成语查询
80+
4.10 实战项目2:多人聊天室
81+
4.11 实战项目3:并发爬虫
82+
4.12 实战项目4:Go语言打造区块链
83+
84+
教材博客地址:https://blog.csdn.net/u010986776
85+
配套视频地址:即将上线
86+
技术问题答疑:https://blog.csdn.net/u010986776
87+
学员互动社群:即将上线

W1/day3/01hello.go

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//劳资是单行注释,快捷键是ctrl+/
2+
3+
/*
4+
劳资是段落注释
5+
快捷键是ctrl+shift+/
6+
*/
7+
8+
/*
9+
//生成可执行程序01hello.exe
10+
go build ./01hello.go
11+
12+
//指定输出位置为./fuck.exe
13+
go build -o ./fuck.exe ./01hello.go
14+
15+
//执行编译好的程序
16+
./01hello.exe
17+
18+
//编译执行合二为一
19+
go run ./01hello.go
20+
*/
21+
22+
//包名为main,入口程序的包名必须是main
23+
package main
24+
25+
//引入系统包(系统提供的支持库)
26+
import "fmt"
27+
28+
//入口函数,名字必须是main
29+
func main(){
30+
31+
//调用系统包fmt下的打印函数,打印内容
32+
fmt.Println("Hello,World!Let's Golang!")
33+
fmt.Println("师姐你好,让我们去浪吧!")
34+
35+
}

W1/day3/02战狼小分队.go

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package main
2+
3+
4+
/*import (
5+
//系统的格式化包
6+
"fmt"
7+
//引入系统时间包
8+
"time"
9+
)*/
10+
11+
import "fmt"
12+
import "time"
13+
14+
/*
15+
单协程内部,自上而下【串行】执行
16+
多协程,【并行】执行(同时执行)
17+
*/
18+
19+
//将在独立的协程中并发执行
20+
func doSomething(i int){
21+
//如果子协程睡眠的过程中,主协程结束了,那么子协程会提前结束
22+
//这里的代码是跑在子协程中
23+
time.Sleep(1*time.Second)
24+
fmt.Println("我是战狼小分队",i)
25+
}
26+
27+
func main() {
28+
29+
//main中的代码都是跑在主协程中
30+
fmt.Println("总部要行动了!")
31+
32+
//其它语言并发:进程-线程(并发的资源开销大)
33+
//并发100条【协程】(微线程)
34+
for i:=1;i<100;i++{
35+
36+
//鉴赏一下Go开并发是夺妹地容易...
37+
//开辟独立的子【协程】中并发执行doSomething(i)
38+
go doSomething(i)
39+
}
40+
41+
fmt.Println("总司令晕过去了...")
42+
//为什么要让主协程睡觉?因为主协程如果结束,子协程都会结束
43+
time.Sleep(2*time.Second)
44+
fmt.Println("GAME OVER!")
45+
46+
}

W1/day3/03一百单八将.go

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package main
2+
3+
import "fmt"
4+
5+
//constant常量 variation变量 function函数 print打印 line行
6+
const pi float32 = 3.14
7+
8+
//动态判别类型
9+
const LightSpeed = 300000
10+
var isClever = false
11+
12+
//一次性声明多个
13+
const(
14+
Chidao = 40000
15+
ChinaArea int = 960
16+
)
17+
var(
18+
fug = "hello"
19+
shid int = 123
20+
)
21+
22+
//声明布尔型变量
23+
//var isStupid bool = true//真
24+
//var isStupid bool = false//假
25+
var isStupid bool
26+
27+
/*声明数值型变量*/
28+
//var age int = 60
29+
var age int
30+
//var rmb float32 = 0.5
31+
var rmb float32
32+
//复数
33+
//var vector complex64 = 3+4i
34+
var vector complex64
35+
36+
//声明字符串变量
37+
//var name string = "张全蛋"
38+
var name string
39+
40+
/*声明复合型变量*/
41+
//10长度的整型数组
42+
//var ages [10]int = [10]int{1,2,3,4,5,6,7,8,9,0}
43+
var ages [10]int
44+
45+
//可变长的整型切片
46+
//var heights []int = []int{1,2,3}
47+
var heights []int
48+
49+
//映射(键1:值1,键2:值2...)
50+
//var kpi map[string]int = map[string]int{"代码量":10000,"注释量":3000}
51+
var kpi map[string]int
52+
53+
var weight int = 300
54+
//整型指针,weightPointer存放的不是300,而是放置300的内存地址
55+
//var weightPointer *int = &weight
56+
var weightPointer *int
57+
58+
//定义公有的(首字母大写,否则包内私有)接口Animal
59+
//Go语言是强类型语言,但是空接口interface{}可以代指任何类型
60+
var Animal interface{}
61+
62+
63+
64+
//结构体
65+
//var person struct {
66+
// name string
67+
// age int
68+
// rmb float32
69+
//}
70+
var person struct{}
71+
72+
//声明函数变量
73+
//var eat func() = func() {
74+
// fmt.Println("我是个吃货")
75+
//}
76+
var eat func(a int,b float64)bool
77+
78+
func main() {
79+
80+
fmt.Println("常量LightSpeed的实际类型是%T\n",LightSpeed)
81+
fmt.Println("变量isClever的实际类型是%T\n",isClever)
82+
83+
//变量的声明赋值合二为一,这种声明方式只能在函数内部
84+
dann := 456.78
85+
fmt.Printf("type=%T,value=%v\n",dann,dann)
86+
87+
/*
88+
fmt.Printf格式化打印
89+
%T 类型占位符
90+
%v 值占位符
91+
*/
92+
fmt.Printf("【是否愚蠢】的类型是%T,值是%v\n",isStupid,isStupid)
93+
fmt.Printf("【年龄】的类型是%T,值是%v\n",age,age)
94+
fmt.Printf("【资产】的类型是%T,值是%v\n",rmb,rmb)
95+
fmt.Printf("【向量】的类型是%T,值是%v\n",vector,vector)
96+
fmt.Printf("【姓名】的类型是%T,值是%v\n",name,name)
97+
fmt.Printf("【年龄们】的类型是%T,值是%v\n",ages,ages)
98+
fmt.Printf("【身高们】的类型是%T,值是%v\n",heights,heights)
99+
fmt.Printf("【KPI】的类型是%T,值是%v\n", kpi, kpi)
100+
fmt.Printf("【存体重的地址】的类型是%T,值是%v\n",weightPointer,weightPointer)
101+
fmt.Printf("【人】的类型是%T,值是%v\n", person, person)
102+
fmt.Printf("【饕餮】的类型是%T,值是%v\n",eat,eat)
103+
104+
}

W1/day3/04大脸猫.go

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package main
2+
3+
import "fmt"
4+
5+
/*
6+
标识符,用于命名常量、变量、表达式的字符
7+
标识符可以是:大小写字母,数字,_
8+
数字不能开头
9+
*/
10+
11+
/*算算你的脸有多大*/
12+
13+
//定义浮点型常量PI
14+
const PI float32 = 3.14
15+
16+
//定义整型变量radius,用于存储脸的半径
17+
var radius int
18+
19+
//定义浮点型变量area,用于存储脸的面积
20+
var area float32
21+
22+
//定义无参无返回值的函数
23+
func demo41() {
24+
//给radius赋值为10(将10写入radius的内存地址)
25+
radius = 10
26+
27+
//将radius强转为浮点型后,计算出脸的面积,赋值给area变量
28+
area = PI * float32(radius) * float32(radius)
29+
30+
//重新给变量赋值
31+
//area = 108000
32+
33+
fmt.Println("你的脸有", area, "辣么大")
34+
fmt.Printf("你的脸有%f辣么大\n", area)
35+
fmt.Printf("你的脸有%.2f辣么大\n", area)
36+
fmt.Printf("你的脸有%10.2f辣么大\n", area)
37+
38+
radius = 5
39+
area = PI * float32(radius) * float32(radius)
40+
fmt.Printf("你的脸有%-10.2f辣么大\n", area)
41+
}
42+
43+
//定义有参数函数getCircleArea
44+
//参数:r用于接收半径
45+
//驼峰风格的命名
46+
func getCircleArea(r float32) {
47+
//var result float32
48+
//声明赋值合二为一,外加动态检测类型 变量名:=值
49+
result := PI * r * r
50+
fmt.Printf("result的类型为%T\n", result)
51+
fmt.Printf("半径为%.2f的脸有%.2f大\n", r, result)
52+
}
53+
54+
//定义有参数、有返回值函数
55+
//返回值为32位浮点
56+
//小写加下划线风格
57+
func get_circle_area(r float32) float32 {
58+
result := PI * r * r
59+
return result
60+
}
61+
62+
//定义有参数、有返回值函数
63+
//预定义了返回值的名字mianji
64+
func get_circle_area_ii(radius float32) (mianji float32) {
65+
66+
//返回值变量mianji已经在函数定义中声明过了
67+
mianji = PI * radius * radius
68+
69+
//已经定义了返回值的名字,无需在说明return谁
70+
return
71+
}
72+
73+
func main() {
74+
//demo41()
75+
76+
//getCircleArea(5)
77+
//getCircleArea(10)
78+
79+
//接收函数的返回值,赋值给ret变量
80+
//ret := get_circle_area(5)
81+
ret := get_circle_area_ii(5)
82+
fmt.Printf("ret=%.2f",ret)
83+
84+
}

0 commit comments

Comments
 (0)