Go语言基础 | 青训营笔记

40 阅读2分钟

Go语言基础 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

1.开发环境

  1. 安装 golang、修改goproxy
  2. 配着继承开发环境——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 跳转控制

  1. if else
// if 无括号;大括号不可去
if a%2==0{
    xx
}else{
    xx
}
  1. 循环
//仅有for循环;for循环可无循环条件
for j:=7; j<9; j++{
    break;
    continue;
}
  1. 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猜谜游戏

  1. 生成随机数
// math/rand
// time
rand.Seed(time.Now().UnixNano())
secrectNumber := rand.Intn(maxNum)
  1. 输入输出
//bufo
//os
//strings
reader := bufo.NewReader(os.Stdin)
input, err := reader.ReadString("\n")//读取一行
input = strings.TrimSuffix(input, "\n")//去掉换行符
fmt.Println("xxx",input) //打印一行

3.2 词典

  1. 构建http请求
  • 对请求右键copy as cURL
  • 复制到curlconverter.com/#go
  • 生成代码

1673774739410.png 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

  1. TCP
  2. 协程
go func()
  1. 函数退出前执行
defer conn.close()