Go语言基础及其应用实例 | 青训营笔记

89 阅读3分钟
这是我参与「第五届青训营 」笔记创作活动的第1天

本节课重点

Go语言特色

  1. 简洁
  2. 快速
  3. 安全
  4. 并行编程
  5. 自动垃圾回收

Go语言基础语法

包声明

package main

引入包

// 单个引入
import "XXX"
// 多个包引入
import (
    "xxx"
    "xxx"
    )

变量

可以指定变量类型,也可以让系统自动识别类型。

var num int
var num int = 100
var num = 100
nun := 100

函数

三种基本声明方式。

func xxx(parameter1, parameter2, data_type) (data_type)
func xxx(parameter1, parameter2, data_type) (data_type1, data_type2)
func xxx(parameter1, parameter2, data_type) (return_value data_type)

控制流

  1. 判断
    1. if else
    2. switch
      • 不需要break,不会向下穿透
if 条件 {

} else {

}

switch 表达式 {
    case 常量:
    case 常量:
    case 常量:
    default:
}
  1. 循环
    • for
      • 注意左括号不能换行
for {
}
for 条件;条件;条件; {
}

注释

  1. 单行注释
//您好这里是注释
  1. 多行注释
/*
这里是多行注释
这里是注释
*/

本节课难点

标准库

链接:Go语言标准库文档中文版

名称    摘要
bufio    bufio 包实现了带缓存的I/O操作.
bytes    bytes包实现了操作[]byte的常用函数.
container    
     heap    heap包提供了对任意类型(实现了heap.Interface接口)的堆操作.
     list    list包实现了双向链表.
     ring    ring实现了环形链表的操作.
context    Package context defines the Context type, which carries deadlines, cancelation signals, and other request-scoped values across API boundaries and between processes.
database    
     sql    sql 包提供了通用的SQL(或类SQL)数据库接口.
          driver    driver包定义了应被数据库驱动实现的接口,这些接口会被sql包使用.
errors    error 包实现了用于错误处理的函数.
fmt    fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf.
math    math 包提供了基本常数和数学函数。
     big    big 包实现了(大数的)高精度运算.
     cmplx    cmplx 包为复数提供了基本的常量和数学函数.
     rand    rand 包实现了伪随机数生成器.
net    net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket.
os    os包提供了操作系统函数的不依赖平台的接口.
regexp    regexp包实现了正则表达式搜索.
sort    sort 包为切片及用户定义的集合的排序操作提供了原语.
strconv    strconv包实现了基本数据类型和其字符串表示的相互转换.
strings    strings包实现了用于操作字符的简单函数.
sync    sync 包提供了互斥锁这类的基本的同步原语.
text    
time    time包提供了时间的显示和测量用的函数.

实例

猜数游戏

二分法猜数。 功能拆分:

  1. 创造随机数
    • 为了创造随机数,这里用当时时间戳做种子
  2. 处理输入
    1. 用bufio.NewReader(os.Stdin)读取输入
    2. 用reader.ReadString读入字符串
    3. 使用strings.TrimSuffix去除后缀
    4. strconv.Atoi转化类型为int
  3. 比较输出结果

命令行词典

  1. 利用edge开发人员工具获取翻译的curl
  2. 使用代码生成工具Convert curl commands to Go (curlconverter.com)生成代码
  3. 为request写一个结构体
  4. 将返回的json通过JSON转Golang Struct - 在线工具 - OKTools生成结构体
  5. 写输入输出信息

模拟Socks5

通过go语言模拟一个socks5的代理。

  1. 使用net包监听本地端口1080
  2. 写auth双向授权
    1. 读取的协议内容
      1. ver协议版本
      2. 支持认证的方法数量
      3. 读取methods
    2. 提供对应的验证方法信息
      1. ver协议版本
      2. method
  3. 模拟connect的协议
    1. 读取协议内容
    2. 回应客户端
    3. 双向转发

我遇到的问题及其解决方法

  1. 对socks5协议不太明白
    • 查阅相关概念,协议内容。
  2. 对几种处理流(bufio, byte等)的分类应用不够透彻
    • 查阅官方文档。

引用参考

www.runoob.com/go/go-tutor…