Go语言基础 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
1.开发环境
- 安装 golang、修改goproxy
- 配着继承开发环境——VSCode(Go插件)、GoLand、云开发gitpodio
2.基础语法
package main
import(
"fmt"
)
func main() {
fmt.Println("hello world")
}
运行
go run xxx
二进制文件
go build xxx
./xxx
2.1 变量
强类型语言,与C类似
//变量
//自动推导
var a = "hello"
//显示写出
var b int = 10
//:=值
f := float32(e)
//常量 无确定类型
const h = 5000
2.2 跳转控制
- if else
// if 无括号;大括号不可去
if a%2==0{
xx
}else{
xx
}
- 循环
//仅有for循环;for循环可无循环条件
for j:=7; j<9; j++{
break;
continue;
}
- switch
switch a{ //无括号,可使用任意类型
case 1:
xxx //不加break也可以跳出
default:
xxx
}
2.3 数组
var a[5] int
2.4 切片
s := make([]string, 3)
s := append(s, "d", ...)//追加
s[2:5]//取[2,5)内的元素
2.5 map
m:= make(map[string]int)
m["a"] = 1
r, ok = m["a"] //获取
delete(m, "a")//删除
2.6 遍历range
//如果想忽略其中一个可以用 _ 代替
for index, num := range nums
for k, v:= range map
2.7 function
//可携带多个返回值
func add(a int, b int) int, bool{
return a+b, ok
}
2.8 指针
//与C类似
func add2ptr(n *int){
*n +=2
}
add2ptr(&n)
2.9 结构体
type user struct{
name string
pwd string
}
//为结构体定义方法
func (u user) checkPassword(pwd string) bool{
}
//为结构体定义方法可带指针,对结构体进行修改
func (u *user) xxx
2.10 error
func xxx()(xxx, err error){
return xxx, nil//无error返回nil
return xxx, errors.New("not found")
}
上述出现了nil,在Go语言中,布尔类型的零值(初始值)为 false,数值类型的零值为 0,字符串类型的零值为空字符串"",而指针、切片slice、映射map、通道channel、函数和接口的零值则是 nil。
其余内容为,字符串操作、Json(encoding/json)、时间处理(time)、数字解析(stronv)、进程信息(os, os/exec)
3.实战
3.1猜谜游戏
- 生成随机数
// math/rand
// time
rand.Seed(time.Now().UnixNano())
secrectNumber := rand.Intn(maxNum)
- 输入输出
//bufo
//os
//strings
reader := bufo.NewReader(os.Stdin)
input, err := reader.ReadString("\n")//读取一行
input = strings.TrimSuffix(input, "\n")//去掉换行符
fmt.Println("xxx",input) //打印一行
3.2 词典
- 构建http请求
- 对请求右键copy as cURL
- 复制到curlconverter.com/#go
- 生成代码
2. 解析json
//encoding/json
//构建结构体
type DictRequest sturct{
TransType string `json:trans_type`
}
string =json.Marshal(struct)//序列化
//生成response body对应结构体:oktools.net/json2go
struct = json.Unmarshal(strings)//反序列化
3.3 SOCKS5 代理服务器
源码:hi-hi.cn/go
- TCP
- 协程
go func()
- 函数退出前执行
defer conn.close()