GO! Day 1 - 基础语法和一些小Demo | 青训营笔记

84 阅读2分钟

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

碎碎念:刚刚学习Go,所以可能有不完美的地方,请各位指正。

环境搭建

简明扼要了属于是,Download and install - The Go Programming Language

语言概述

一个可运行Go程序需要一下几个部分组成:

  • 包声明
  • 包导入
  • 主函数

所以,最简单的go程序应该这个样子:

package main
​
import "fmt"func main() {
    fmt.Println("Hello, Go!")
}

其中,main函数必须要在main包下,且只能有一个main函数。

运行可以使用go run hello.go运行,或使用go build hello.go将其打包为二进制文件运行。

当你离开编辑器或IDE时,go通常会通过工具帮你格式化一下代码。代码风格全球统一,不可以自定义。

变量声明

  1. var identifier int // 使用默认值
  2. var identifier int = 233 // 声明且赋值
  3. var identifier = 233 // 编译器判断类型
  4. identifier := 233 // 声明且赋值
  5. var identifier1, identifier2 int // 多变量声明
  6. var identifier1, identifier2 = 1, 2 // 声明且赋值

... 常量不多说了 大同小异,使用const关键字

流程控制

  1. if

    • 不需要将条件括起来,括起来格式化的时候也不会保留
    if condition {
        something()
    } else {
        others()
    }
    
  2. switch

    • 省略condition时,var应该是boolean类型
    • 自动break
    switch condition {
        case val1:
            ...
        case val2:
            ...
        default:
            ...
    }
    
  3. forr

    不同的可迭代对象有些许差异

    for iORk, v := range iter {
        fmt.Println(iORk, v)
    }
    
  4. fori

    每个选项都可以省略

    for init; condition; update {
        something()
    }
    

常用数据类型及其他

  1. pointer

    var ptr *int
    

    声明变量可以在变量类型前加*,同时使用&取地址,很像C

  2. struct

    type s struct {
        Member type `json:me,ber`
    }
    

    使用大写首字母字段声明的结构体可以使用json.Marshal()进行序列化或json.Unmarshal()反序列化。

  3. struct-func

    type user struct {
        name     string
        password string
    }
    ​
    func (u *user) checkPassword(password string) bool {
        return u.password == password
    }
    

    like this,在方法名前加结构体指针

  4. function

    /* func methodName(param type) (returnValue type) {
    }
    */
    func exists(m map[string]string, k string) (v string, ok bool) {
    	v, ok = m[k]
    	return v, ok
    }
    

    go语言中函数支持多返回值

  5. error

    func findUser(users []user, name string) (v *user, err error) {
        for _, v := range users {
            if v.name == name {
                return &v, nil
            }
        }
        return nil, errors.New("not found")
    }
    

    go语言中通过函数返回非空error来处理异常,无错误返回nil

  6. map

    m := make(map[keyType]valueType)
    
  7. slice

    s := make([]string, 3)
    

Demo

  1. 流程控制写一个猜数小游戏
  2. 通过struct解析json,获取命令行参数,调用API,发送网络请求
  3. 有点神奇的socks5代理服务器,发送socks5协议报文,建立连接

哦吼!我都推到Liumingxun/byte-go仓库了!欢迎Follow我!🥳