先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
代码
age := 0
_, _ = fmt.Scanln(&age)
if age > 18{
fmt.Println("对自己负责")
}
if s:="呀";age>18{
fmt.Println("对自己负责",s)
}
if…else
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
} else {
/* 在布尔表达式为 false 时执行 */
}
注意:else不能换行,必须在}后
代码
_, _ = fmt.Scanln(&age)
if age > 18{
fmt.Println("对自己负责")
} else {
fmt.Println("年龄不大,放过你了")
}
if…else if …else
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
} else if 布尔表达式{
/* 在布尔表达式为 true 时执行 */
} else {
/* 上述分支不满足时执行 */
}
else if 可以有多个,else可以没有
代码
if age < 18 {
fmt.Println("小孩纸~")
} else if age >= 18 && age < 40{
fmt.Println("青壮年~")
}else{
fmt.Println("不惑")
}
switch
switch [表达式] {
case val1[,…]:
…
case val2[,val3,…]:
…
default:
…
}
- 不需要break
- val1 和 val2如果是常量,不能相同,val2和val3可以是同类型的任意值,也不能相同,变量的话没问题
- 为了实现其他语言,例如c++,不加break时,多case,一个结果的情况,一个case后可以加多个
- 表达式的结果类型要与case的一致,当然case也可以是变量、函数的返回值等
- switch后可以定义变量,加分号结束(不推荐)
day := ""
_, _ = fmt.Scanln(&day)
switch day{
case "1":fmt.Println("星期一")
case "2":fmt.Println("星期二")
case "6","7":fmt.Println("周末")
default:
fmt.Println("懒得写了")
}
switch穿透
使用关键字fallthrough,会强制执行下一个case,不做判断。不建议,就不举例了。
type-switch
类型断言的时候再举例。
循环
for
for 开始条件;继续条件;循环体后执行语句{
循环体…
}
代码
str := "lady_killer9"
for i:=0;i< len(str);i++{
fmt.Printf("%c",str[i])
}
**注意:**开始条件、继续条件、循环体后执行语句 都是可以省略的,当开始条件及循环体后执行语句都省略时,两个分号也可以省略
for 继续条件{
循环体…
}
for-range
for key,value := range 变量{
循环体…
}
注意:循环体用不到key时,可以使用匿名变量接收
代码
for index,val := range str{
fmt.Println(index,string(val))
}
Go中是没有while和do…while的,可以自己实现类型的逻辑。
实现while
for{
if condition{
break
}
do something;
}
代码
i := 0
for{
if i == len(str){
break
}
fmt.Printf("%c",str[i])
i++
}
换一种方式
i = 0
for i!=len(str){
fmt.Printf("%c",str[i])
i++
}
fmt.Println()
实现do…while
for{
do something;
if condition{
break
}
}
代码
j := 0
for{
fmt.Printf("%c",str[j])
j++
if j == len(str){
break
}
}
break
break可以指明跳出到哪一层使用标签,,默认是本层循环。
label:
for {
for{
…
break label
}
}
代码
arr := [2][2]int{{1,2},{3,4}}
loop:
for i:=0;i<len(arr);i++{
for j:=0;j<len(arr[0]);j++{
fmt.Println(arr[i][j])
if arr[i][j] == 2{
break loop
}
}
}
continue
同上,可加label
代码
loop2:
for i:=0;i<len(arr);i++{
for j:=0;j<len(arr[0]);j++{
fmt.Println(arr[i][j])
if arr[i][j] == 1{
continue loop2
}
}
}
goto
直接跳到某个标签处,不推荐
for i:=0;i<len(arr);i++{
for j:=0;j<len(arr[0]);j++{
fmt.Println(arr[i][j])
if arr[i][j] == 2{
goto HI
}
}
}
HI:
fmt.Println("hi, goto")
全部代码
分支
case.go
package main
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Println(arr[i][j])
if arr[i][j] == 2{
goto HI
}
}
}
HI:
fmt.Println("hi, goto")
全部代码
分支
case.go
package main
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**