golang

Golang源码分析之golang/sync之singleflight

目录 1.背景 1.1. 项目介绍 1.2.使用方法 2.源码分析 2.1.项目结构 2.2.数据结构 2.3.API代码流程 3.总结 1.背景 1.1. 项目介绍 golang/sync库拓展了官方自带的sync库,提供了errgroup、semaphore、single »

Golang-Gin Response 统一返回restful格式的数据

目的: gin返回restful格式的数据,返回的200,201 的数据 也包括异常时的404/500等情况 直接调用即可 package response import ( "github.com/gin-gonic/gin" "net/http" ) // Response // context ... »

Golang中的错误处理的示例详解

目录 1、panic 2、包装错误 3、错误类型判断 4、错误值判断 1、panic 当我们执行panic的时候会结束下面的流程: package main import "fmt" func main() { fmt.Println("hello") panic(" »

golang中的错误处理

0.1、索引 https://waterflow.link/articles/1666716727236 1、panic 当我们执行panic的时候会结束下面的流程: package main import "fmt" func main() { fmt.Println("hello") panic ... »

liuyuede123 技术

一文教你如何优雅处理Golang中的异常

我们在使用Golang时,不可避免会遇到异常情况的处理,与Java、Python等语言不同的是,Go中并没有try...catch...这样的语句块,我们知道在Java中使用try...catch...这种模式不仅能分离的错误与返回值和参数,也提供了结构化处理异常的可能,通过面向对象的思想,我们可以 »

详解Golang中gcache模块的基本使用

目录 先说结论 优势 基本使用 打印结果 缓存控制 打印结果 缓存淘汰策略 实战举例 代码示例 打印结果 小技巧 GetOrSetFunc的使用 总结 gcache提供统一的缓存管理模块,提供了开发者可自定义灵活接入的缓存适配接口,并默认提供了高速内存缓存适配实现。 先说结论 »

优雅处理Golang中的异常

我们在使用Golang时,不可避免会遇到异常情况的处理,与Java、Python等语言不同的是,Go中并没有try...catch...这样的语句块,我们知道在Java中使用try...catch...这种模式不仅能分离的错误与返回值和参数,也提供了结构化处理异常的可能,通过面向对象的思想,我们可以 ... »

一篇文章读懂Golang init函数执行顺序

目录 1.init 函数简介 2.执行顺序 2.1 单个源文件的 init 执行顺序 2.2 单个包的 init 执行顺序 2.3 main 包导入多个包时 init 执行顺序 2.3.1 不存在依赖 2.3.2 存在依赖 2.4 包级变量初始化与 init 函数执行顺序 3.小结 参 »

解析Golang中的锁竞争问题

当我们打印错误的时候使用锁可能会带来意想不到的结果。 我们看下面的例子: package main import ( "fmt" "sync" ) type Courseware struct { mutex sync.RWMutex Id int64 C »

Droplet——一款轻量的Golang应用层框架

Github地址 如标题所描述的,Droplet 是一个 轻量 的 中间层框架,何为中间层呢? 通常来说,我们的程序(注意这里我们仅仅讨论程序的范围,而非作为一个系统,因此这里不设计如 LB、Gateway、Mesh等内容,因为它们都处于程序以外)按不同的职责可以分为不同的层次,而按照不同的设计风格 ... »

RobotZero

Golang中Gin框架的使用入门教程

目录 安装与简单测试 常见请求与分组请求 获取参数 与 参数合法性验证 获得query中参数 获得multipart/urlencoded form中的参数 模型绑定和参数验证 自定义参数验证 项目结构参考 Gin框架运行模式 Gin如何获取客户ip Gin处理请求结果 以String »

一文彻底理解Golang闭包实现原理

目录 前言 函数一等公民 作用域 实现闭包 闭包扫描 闭包赋值 闭包函数调用 函数式编程 总结 前言 闭包对于一个长期写 Java 的开发者来说估计鲜有耳闻,我在写 Python 和 Go 之前也是没怎么了解,光这名字感觉就有点"神秘莫测",这篇文章的主要目的就是从编译器的角度来分析 »

彻底理解闭包实现原理

前言 闭包对于一个长期写 Java 的开发者来说估计鲜有耳闻,我在写 Python 和 Go 之前也是没怎么了解,光这名字感觉就有点"神秘莫测",这篇文章的主要目的就是从编译器的角度来分析闭包,彻底搞懂闭包的实现原理。 函数一等公民 一门语言在实现闭包之前首先要具有的特性就是:First class ... »

crossoverJie

Golang 编写Tcp服务器的解决方案

目录 Echo 服务器 拆包与粘包问题 优雅关闭 Golang 开发 Tcp 服务器及拆包粘包、优雅关闭的解决方案 Golang 作为广泛用于服务端和云计算领域的编程语言,tcp socket 是其中至关重要的功能。您可以在 github.com/hdt3213/godis/tcp 中看到本 »

Golang打印复杂结构体两种方法详解

目录 fmt结构体占位符 打印复杂结构体 方案一 方案二 fmt结构体占位符 在Golang中有原生的 fmt 格式化工具去打印结构体,可以通过占位符%v、%+v、%#v去实现,这3种的区别如下所示: type User struct { Name string Age int »

GoLang channel底层代码分析详解

目录 1. channel 底层结构 2. channel 的创建 3. channel 的发送流程 4. channel 的接收流程 5. channel 使用注意事项 以下源码都摘自 golang 1.16.15 版本。 1. channel 底层结构 Golang 中的 chann »

深入理解Golang channel的应用

目录 前言 整体结构 创建 发送 接收 关闭 前言 channel是用于 goroutine 之间的同步、通信的数据结构 channel 的底层是通过 mutex 来控制并发的,但它为程序员提供了更高一层次的抽象,封装了更多的功能,这样并发编程变得更加容易和安全,得以让程序员把注意力留到 »

golang中的defer函数理解

文章目录 golang的defer什么是defer理解deferdefer什么时间执行(defer、 return、返回值 三者的执行顺序)defer输出的值,就是定义时的值。而不是defer真正执行时的变量值(注意引用情况)多个defer,执行顺序 defer的函数一定会执行么?panic情况os »