这是我参与「第五届青训营」伴学笔记创作活动的第 1 天。
课堂笔记
一、本堂课重点内容:
- go语言基础语法
- go语言的实战案例
二、具体案例:
1. go语言基础语法
- 入门代码,打印hello world
-
Go 语言变量 ——Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字
使用var进行变量声明
var e float64
一次声明多个变量
var a, b int = 3, 4
-
if-else
if后面没有括号,else必须放在if尾部大括号后面,与c语言很像的写法
-
switch
switch后面判断选择条件无括号
switch后面也可以不用判断条件,条件写在case后面进行判断
-
for循环
相比较于C语言没有while,for不加判断条件,直接构成死循环
-
数组
声明语法
var 数组变量名 [元素数量] Type
var a [5]int
b := [5]int{1, 2, 3, 4, 5}
var twoD [2][3]int
-
切片
用make([]类型,长度)函数创建,和数组一样,用append来追加元素,没有长度限制的数组
-
map
键值对集合,类似python中的字典,声明make(map[键类型]值类型)
-
range
用于快速遍历slice或map,返回下标/键和值
-
函数
参数放在变量之后
-
指针
主要用于修改结构体之类的
-
结构体
和C语言很像,包含特定类型的变量集合
-
结构体方法
func (u user) checkPassword (password string) bool{ //(不带指针写法)类成员函数 return u.password == password } func (u *user) resetPassword (password string) { //(带指针写法,可修改结构体)类成员函数 u.password = password } -
错误处理
每次都会用err获取对应的错误值
u, err := findUser([]User{{"wang","1024"}}, "wang")
if err != nil{
fmt.Println(err) //有错误时
return
}
-
字符串操作
调包对应函数处理就行
-
字符串格式化
v打印任意字符,+v更详细,#v更更详细
-
JSON处理
结构体的每个字段首字母大写,就可以用JSON.Marshal进行序列化,使用
-
时间处理
和python语言很想,基本上有对应包,调用对应函数获取时间戳
-
数字解析
和C语言很像
-
进程解析
不知道后面用不用的到,这一块
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
fmt.Println(os.Args) //提供原始命令行参数访问功能,注意,切片中的第一个参数是该程序的路径,并且 os.Args[1:]保存所有程序的的参数。
fmt.Println(os.Getenv("PATH")) //获取环境变量
fmt.Println(os.Setenv("AA","BB")) //设置环境变量
buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
//启动子进程,运行CombinedOutput命令并返回其组合的标准输出和标准错误。
if err !=nil {
panic(err)
}
fmt.Println(string(buf))
}
2. go语言的实战案例
-
猜数字游戏
这个游戏思想相对比较简单,注意设置随机种子,一般随机种子都是借助当前的时间戳实现随机数
-
在线词典
了解到Convert curl commands to code这个网站可以复制curl自动生成爬虫代码
-
Socks5代理
socks代码很多,不多总体思路以及代码也是学习的很理解,讲的很清楚,虽然碰到不少错误,但都解决了
三、课后个人总结
在今天的学习,第一次正式学习go语言,之前也是零零散散想学习go语言,但总是没有一个督促和激励,学到一点点语法就忘记了,其实在任何一门语言学习的过程中,避免不了忘记,所以我们更需要反复实战,反复见识,才可能越学越精,计算机语言基础语法之间都是相似相通的,可能30分钟学不了精通,但在后续的学习中的不断巩固与练习,总会将基础知识反复的