• Go语言学习笔记


    1. 普通函数声明/定义

    函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体

    func 函数名(形式参数列表) (返回值列表){
        函数体
    }
    
    • 1
    • 2
    • 3

    2. 接口定义及实现

    接口定义,注意和上述函数声明作区分

    type 接口名 interface{
        method1(参数列表) 返回值列表
        method2(参数列表) 返回值列表
    }
    
    • 1
    • 2
    • 3
    • 4

    实现接口所有方法

    func(t 自定义类型) method1(参数列表) 返回值列表{
        // 方法实现
    }
    
    func(t 自定义类型) method2(参数列表) 返回值列表{
        // 方法实现
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注:Golang中无implement这样的关键字

    3. Go Context详解

    Go Context通常被称为上下文,在go中,理解为goroutine的运行状态、现场,存在上下层goroutine context的传递,上层goroutine会把context传递给下层goroutine。每个goroutine在运行前,都要事先知道程序当前的执行状态,通常将这些状态封装在一个 context变量,传递给要执行的goroutine中。
    通过context包,可以非常方便地在请求goroutine之间传递请求数据、取消信号和超时信息。

    4. goroutine调度模型

    goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的
    MPG模式
    M:操作系统的主线程
    P:协程执行需要的上下文
    G:协程
    goroutine之间如何进行通讯?
    全局变量的互斥锁
    使用管道Channel

    5. defer、panic和recover

    Go 语言的 defer 会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源;
    panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的 defer;
    recover 可以中止 panic 造成的程序崩溃。它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥作用。
    参考博客:Go语言设计与实现

    6. import导包时的三种情况

    示例代码:

    import (
        v2 "github.com/YFJie96/wx-mall/controller/api/v2"
        _ "github.com/YFJie96/wx-mall/docs"
        . "fmt"
        "github.com/gin-gonic/gin"
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (1)v2 :别名, 导入包的一个别名,可以直接使用 “v2.” 调用包内接口或方法
    (2)_ :在导入路径前加入下划线表示只执行该库的 init 函数而不对其它导出对象进行真正的导入。因为 Go 语言的数据库驱动都会在 init 函数中注册自己,所以我们只需要进行上述操作即可;否则的话,Go 语言的编译器会提示导入了包却没有使用的错误
    (3). :点相当于把导入包的函数,同级导入到当前包,可以直接使用包内函数名进行调用

    7. GOPATH详解

    在这里插入图片描述
    参考博客:GOPATH 与 GO Modules

    8. Go中的格式化打印“%+v”和“%v”区别

    “%+v”会以字段键值对的形式key-value格式打印
    “%v”只会打印字段值value信息
    参考博客:Go中的格式化打印

    9. Const

    在这里插入图片描述

    10. Go语言中的时间处理

    昨日0点(格式化)

    ts := time.Now().AddDate(0, 0, -1)
    	timeYesterday := time.Date(ts.Year(), ts.Month(), ts.Day(), 0, 0, 0, 0, ts.Location())
    	timeStr := timeYesterday.Format("2006-01-02")
    	fmt.Println(timeStr)
    
    • 1
    • 2
    • 3
    • 4

    某天的第二天的0点整

    nowTimeStr := "2022-02-28"
    	//使用Parse 默认获取为UTC时区 需要获取本地时区 所以使用ParseInLocation
    	t2, _ := time.ParseInLocation("2006-01-02", nowTimeStr, time.Local)
    	towTimeStamp := t2.AddDate(0, 0, 1).Unix()
    	towTimeStr := time.Unix(towTimeStamp, 0).Format("2006-01-02 15:04:05")
    	fmt.Println(towTimeStr)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    例:
    在这里插入图片描述

    11. Go中Handler

    在这里插入图片描述
    Multiplexer根据URL将请求路由给指定的Handler。Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求对应的响应字段(respones header)写入ResponseWriter中,然后返回。
    参考博客:Golang Handler详解

    12. Go语言变量作用域、指针

    参考博客:Go语言变量作用域、指针、数组

  • 相关阅读:
    手机,蓝牙开发板,TTL/USB模块,电脑四者之间的通讯
    Java数字处理类--Math类--随机数
    Python类方法和静态方法(含义、语法、标识、代码示例)
    任务及任务切换
    Elasticsearch教程10】Mapping字段类型之数字Numbers
    软件项目管理 4.2.传统需求建模方法
    【计算机网络微课堂】5.8 TCP的运输连接管理
    P1394 山上的国度 题解
    安卓逆向 - EdXposed LSPosed VirtualXposed
    [apue] 进程控制那些事儿
  • 原文地址:https://blog.csdn.net/qq_38233258/article/details/128051820