Go语言基础语法 | 青训营笔记

68 阅读2分钟

01 简介

什么是Go语言

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

02 入门

2.1 开发环境

  1. 安装Golang

  2. 配置集成开发环境(VSCode、Goland)

  3. 基于云的开发环境

    在线编程环境

2.2 基础语法

🔎示例代码 wangkechun/go-by-example (github.com)

Hello World

package main
​
import (
    "fmt"
)
​
func main() {
    fmt.Println("hello world")
}

变量

Go语言是强类型语言,每一个变量都有变量类型:字符串、整数、浮点型、布尔型……

函数

Golang里面的函数原生支持返回多个值。在实际的业务逻辑代码里面几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个值是一个错误信息。

func exists(m map[string]string, k string) (v string, ok bool) {
    v, ok = m[k]
    return v, ok
}

指针

支持的操作有限,主要用途就是对传入参数进行修改。

//无用,参入参数是个拷贝,+2仅是对拷贝进行了+2,不起作用。
func add2(n int) {
    n += 2
}
​
//需要起作用要写成指针。
//运算的时候要加 *
func add2ptr(n *int) {
    *n += 2
}
​
//为了匹配类型,调用的时候要加 &
func main() {
    n := 5
    add2(n)
    fmt.Println(n) // 5
    add2ptr(&n)
    fmt.Println(n) // 7
}

结构体、结构体方法

将一个普通函数改成结构体方法,可以像a.checkPassword("xx")这样调用。

把第一个参数,加上括号,写道函数名称前面。

带指针能对结构体方法进行修改

func (u *user) resetPassword(password string) {
    u.password = password
}

JSON操作

  • 对一个已有的结构体,可以什么都不做,只要保证每个字段的第一个字母是大写,也就是公开字段。那么这个结构体就能用JSON.marshaler去序列化,变成一个JSON的字符串。
  • 打印字符串要加string()强转,否则是16进制编码。
  • 序列化之后的字符串也能够用JSON.unmarshaler去反序列化到一个空的变量里面。
//默认风格是大写字母开头,可以用json tag修改结果里的字段名
Age   int `json:"age"`

进程信息

  • os.Args来获取进程在执行时的一些命令行参数。
  • os.Gatenv()获取环境变量。
  • os.Setenv()写入环境变量。
func main() {
    // go run example/20-env/main.go a b c d
    fmt.Println(os.Args)           // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
    fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
    fmt.Println(os.Setenv("AA", "BB"))
​
    buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
    if err != nil {
        panic(err)
    }
    fmt.Println(string(buf)) // 127.0.0.1       localhost
}

03 实战

3.1 猜谜游戏

读取输入要加上\r,否则会读到回车报错。

input = strings.TrimSuffix(input, "\r\n")

3.2 在线字典

拿到请求后加上defer resp.Body.Close()避免资源泄露,手动关闭流。

Convert curl commands to Go……

JSON转Golang Struct - 在线工具 - OKTools

3.3 SOCKS5代理

需要安装netcat