Go 语言上手-基础语言 | 青训营笔记

181 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

go基础语法

声明变量

  • var a
  • var a elemtype
  • f := elemtype()
  • var a elemtype //不赋值

申明常量

  • 把var改成const即可 //go中常量没有确定的类型,根据上下文自动确定

if语句

  • 条件判断无括号,执行内容必须使用{}

for语句

  • go中无while dowhile循环

switch语句

  • 不用break结束,会自动跳出
  • case写条件分支来代替多个for循环

切片

  • s := make([]string,3) //make
  • append扩容必须重新赋值
  • 可以和python一样切片,但不可以负数逆向切片

map

  • go中的map完全无序
  • 用两个变量获取map元素,后一个为bool型,表示这个值是否存在

range

  • range遍历数组会返回索引与值

func

  • go的函数原生支持返回多个值

struct

  • 注意struct和struct方法创建的区别 func (u user) checkPassword(password string) bool { //方法 func checkPassword(u user,password string) bool { //函数

error

  • go中常多接受一个err值,用 if err !=nil{ 判断err是否存在,若存在则需要进行处理

fmt

  • 注意println与printf的区别
  • go中的printf可以用%v打印任何类型

json

  • 只需要保证结构体的每个公开字段首字母大写,就能用json.Marshal(a)对其序列化

time

  • 与python的time基本相同,但其格式化使用的是t.Format("2006-01-02 15:04:05"),特殊时间

env

  • os.Args 用于获取命令行参数,第一个参数是地址,可以用于直接命令行输入
  • os.Getenv 获取环境变量
  • os.Setenv 写入环境变量
  • exec.Command 快速启动子进程,并获取其输入输出

实例

猜谜游戏

  • vscode的调试台不可以直接输入,需要在终端执行
  • bufio读取输入较为复杂,仅为了提前学习

命令行字典

  • 代码逻辑:通过api访问,发送request请求,对返回的response解析,提取出需要的内容
  • curlconverter.com/#go //自动生产request对应的代码
  • oktools.net/json2go //自动生产response对应的代码
  • 自动生产的代码中struct字段的首字母都为大写,所以可以用json直接序列化和反序列化

socks5

  • curl --socks5 127.0.0.1:1080 -v www.qq.com //连接测试
  • nc测试需要安装