(一)Go基础

5 阅读3分钟

1.1 Go

1.1.1 Go语言的优点

  1. 天然支持高并发

    Go语言通过goroutine和channel机制,提供了轻量级的并发支持。goroutine的创建和调度开销远小于线程,使得Go在处理高并发场景时表现出色。

  2. 学习成本低,上手快

    Go语言的语法简洁,去除了许多复杂的概念(如继承、泛型等),使得开发者可以快速上手并投入生产。

  3. 性能高

    Go语言编译后的二进制文件直接运行在操作系统上,无需虚拟机,执行效率高。同时,Go的垃圾回收机制经过优化,减少了GC带来的性能损耗。

  4. 编译后二进制包体积小

    Go语言编译后的二进制文件不依赖外部库,体积小,便于部署和分发。

1.1.2 Go和Java的区别

  1. 语言性: Go简单;Java语言较为复杂,包含更多特性
  2. 类型系统
    • Go支持类型推断,
    • Go不支持继承,使用组合来实现代码复用,更加灵活,松耦合;Java支持继承和多态
  3. 并发:Go使用goroutines和channels实现并发;Java基于Thread和Runnable实现并发
  4. 跨平台:Go直接编译为机器码,性能高;Java需要JVM运行,性能相对较低
  5. 垃圾回收 :Go支持并发垃圾回收,使用并行标记-清除算法;Java使用多种垃圾回收器,如G1、CMS等

1.4 Go其他

1.4.1 深度拷贝

  1. 使用json序列化、反序列化

    通过json序列化和反序列化实现深度拷贝,但性能较低。

  2. gob编码

    使用gob编码进行深度拷贝,比json性能更好,可以处理更复杂的类型。

  3. 第三方库

    可以使用github.com/jinzhu/copier等第三方库实现深度拷贝。

  4. 手动实现

    对于简单的结构体,可以手动实现深度拷贝方法。

1.4.4 闭包

闭包 = 一个函数 + 它引用的外部变量的环境

func createCounter() func() int {
    count := 0 // 这个变量被“拎”走了

    // 返回一个匿名函数(闭包)
    return func() int {
        count++ // 引用了外部的 count
        return count
    }
}

  1. 用途:
    • 数据封装/私有化:有点像面向对象里的“私有成员变量”
    • 生成器/工厂模式:可以根据参数生成具有不同行为的函数
    • 回调与延迟执行:经常用闭包来“捕捉”当前的上下文状态,等以后某个时刻(比如请求返回时)再运行。
  2. 和函数的区别:
    • 普通函数能访问参数+全局变量;闭包还能访问捕获的外部变量
    • 普通函数执行完后,参数和局部变量会被释放;闭包的外部变量会一直存在
    • 闭包内存占用更大些
    • 闭包非并发安全

gin框架是什么,有什么好处

一个用 Go 语言编写的轻量级 Web 开发框架 极速性能: Gin 使用了自定义的 HttpRouter(基于前缀树 Radix Tree),它的路由查找速度比标准库快得多。在高并发 API 场景下,这非常关键。

中间件机制(Middleware): 这是 Gin 的灵魂。你可以轻松地为所有请求添加日志、鉴权、限流、跨域处理,而不需要污染业务逻辑。

参数绑定(Binding): 它能自动把 JSON、Query 参数、表单数据映射到你的 Go struct 中,并自动校验(利用 validator 库)。

异常处理: Gin 内部对 panic 做了中间件级别的捕获(Recovery),防止单个请求的出错导致整个服务崩溃。