这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、本堂课重点内容:
- 配置go语言环境
- 了解go语言基础语法
- 理解一些简单项目的代码原理
二、详细知识点介绍:
1.1什么是go语言
go语言是谷歌出品的一门编程语言,具有高性能、高并发的特点。
其语法简单易懂,go语言风格像C语言并且进行了大幅度的简化,学习曲线平缓。
同时它还具有功能丰富,质量完善的标准库,不需要借助第三方库就能完成大部分基础功能的开发。
go语言还具有静态语言里几乎最快的编译速度,这个速度对于C++开发者来说简直不可想象。
go语言也支持跨平台,像windows,linux等操作系统都支持运行。
go语言自带垃圾回收,写代码时无需考虑内存的分配释放。
2.1开发环境安装
略(注意安装goland的话学生可以免费申请使用)
2.2基础语法
变量:
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。一般声明变量是使用var关键字,可以一次声明多个变量,如下列代码示例
package main
import (
"fmt"
"math"
)
func main() {
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
fmt.Println(g) // initialapple
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}
if else:
和C语言没有什么太大区别,就是条件语句不需要加括号了
循环:
go语言只有for循环,但是其for循环有多种形式。可以像C语言一样的for循环,也可以像python一样的range格式对数组等数据结构进行迭代循环
switch:
比C语言更方便,判断条件可以不止为整数值,类似if语句一样条件可以为语句,并且进入条件之后不会继续往下执行语句。
数组;
可以像C语言一样直接找下标,也可以像python一样进行切片操作,注意数组初始化,参考下面代码示例
package main
import "fmt"
func main() {
var a [5]int
a[4] = 100
fmt.Println("get:", a[2])//get: 0
fmt.Println("len:", len(a))//len: 5
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)//[1 2 3 4 5]
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d: ", twoD)//2d: [[0 1 2] [1 2 3]]
}
切片(动态数组):
切片相比于数组其长度不固定,可以追加元素,使用make函数来初始化切片,还可以用len函数获取长度并且可以用cap()函数测量切片最长可以达到多少。如果想增加切片容量必须创造一个新的更大的切片并用copy()函数拷贝原切片
map:
类似C语言的unordermap,内部是无序的,可以用make函数来进行初始化。也可以用delete删除索引
函数;
基本和C语言类似,只是返回值经常是多个值。
指针:
go语言里面的指针的一个用途就是传给函数地址,使得在函数里改的是原本的值而不是拷贝后的新值
结构体:
和C语言类似,不过多赘述
结构体方法:
注意不是写在结构体内部而是外部的
字符串操作:
go支持许多字符串的操作,可以看示例代码
package main
import (
"fmt"
"strings"
)
func main() {
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // true
fmt.Println(strings.HasSuffix(a, "llo")) // true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
fmt.Println(strings.Repeat(a, 2)) // hellohello
fmt.Println(strings.Replace(a, "e", "E", -1)) // hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
}
三、实践练习例子:
1.猜谜游戏
这个项目注意是了解输入输出,注意seed要给个种子,不然随机没有效果。
2.在线词典
主要了解如何抓包,并利用代码生成工具来生成代码
3.SOCKS5代理
主要是计算机网络安全知识以及实现
四、课后个人总结:
主要还是项目实现,尤其是最后一个项目SOCKS5代理部分原理的理解困难,总的来说go语言的语法还是简单的。
五、引用参考:
第五届字节跳动青训营 Go语言基础-基础语法