Golang Map实现(一)

本文学习 Golang 的 Map 数据结构,以及map buckets 的数据组织结构。 hash 表是什么 从大学的课本里面,我们学到:hash 表其实就是将key 通过hash算法映射到数组的某个位置,然后把对应的val存放起来。 如果出现了hash冲突(也就是说,不同的key被映射到了相同的 ...

Golang中的sync.Pool对象

Golang中存在一个Sync.Pool 对象,从名字上看像是对象池,但他本质上和实际上的对象池有着很大的区别,下面将详细介绍该对象。 Sync.Pool对象可伸缩、并发安全; 数据结构 sync.Pool对外暴露Get、Put、New三个方法,Get返回Pool中的对象,当没有取得到对象时调用Ne ...

go语言系列-常量

简介 常量是一个简单值的标识符,在程序运行时,不会被修改的量,即常量是恒定不变的值,声明常量的关键字是 const 。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义 案例演示 iota Go 语言预定义了这些常量:true、false 和 iota。 iot ...

[go]反射

一、reflect.Typeof() 如果传入的是一个接口,如果是动态绑定了一个实现结构体的,则显示具体结构体的Type,否则是接口的名字。这个方法返回的是一个Type接口,其实就是返回了 绑定类型的rtype,这个指针在Value这个结构体有 Typeof返回的是一个Type接口下面看看Type接 ...

gorm系列-简单入门

简介 GORM系列:b站搜七米 文档:https://www.liwenzhou.com/posts/Go/gorm/ 什么是ORM:Object(对象) Relational(关系) Mapping(映射) 对象:程序中的对象/实例 例如Go中的结构体实例 关系:关系数据库 例如MySQL gor ...

gin系列-中间件

Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等 定义中间件 Gin中的中间件必须是一个gin.HandlerFunc类型 入门案例 注册中间件 在gin框架中 ...

高效的后端API开发模板-illuminant

"概要" "整体介绍" "补充说明" "Q. 有了 prisma 自动生成的 graphql 接口, 为什么还要 rest 接口和 websocket 接口?" "Q. 为什么要通过 illuminant 加一层反向代理, 而不是直接暴露 prisma 的 graphql 接口?" "Q. 既然 p ...

golang slice 源码解读

本文从源码角度学习 golang slice 的创建、扩容,深拷贝的实现。 内部数据结构 slice 仅有三个字段,其中array 是保存数据的部分,len 字段为长度,cap 为容量。 通过下面代码可以输出空slice 的大小: 创建 创建一个slice,其实就是分配内存。cap, len 的设置 ...

使用Golang的singleflight防止缓存击穿

背景 在使用缓存时,容易发生缓存击穿。 缓存击穿:一个存在的key,在缓存过期的瞬间,同时有大量的请求过来,造成所有请求都去读dB,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。 singleflight 介绍 singleflight类的使用方法就新建一个singleflight.Gro ...

Golang的Context介绍及其源码分析

简介 在Go服务中,对于每个请求,都会起一个协程去处理。在处理协程中,也会起很多协程去访问资源,比如数据库,比如RPC,这些协程还需要访问请求维度的一些信息比如说请求方的身份,授权信息等等。当一个请求被取消或者超时的时候,其他所有协程都应该立即被取消以释放资源。 Golang的context包就是用 ...

gin系列-重定向

#### ```go package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() //http重定向 r.GET("/index", func(c *gin.Contex... ...

gin系列-参数绑定

为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content Type识别请求数据类型并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体中。 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSON、f ...

MySQL的事务隔离级别是什么?

😋我是平也,这有一个专注Gopher技术成长的开源项目 "「go home」" 背景介绍 想必事务大家都已经非常熟悉了,它是一组SQL组成的一个执行单元,要么全执行要么全不执行,这也是它的一个特性——原子性。而事务的应用场景也非常广泛,最经典的就是转账问题,A给B打钱,不能出现A钱扣了B还没收到的 ...

golang实现常用集合原理介绍

golang本身对常用集合的封装还是比较少的,主要有数组(切片)、双向链表、堆等。在工作中可能用到其他常用的集合,于是我自己对常用的集合进行了封装,并对原理做了简单介绍,代码库地址:https://github.com/chentaihan/container,代码都是经过测试的,欢迎下载使用,反馈 ...

深度解密 Go 语言之 sync.Pool

最近在工作中碰到了 GC 的问题:项目中大量重复地创建许多对象,造成 GC 的工作量巨大,CPU 频繁掉底。准备使用 来缓存对象,减轻 GC 的消耗。为了用起来更顺畅,我特地研究了一番,形成此文。本文从使用到源码解析,循序渐进,一一道来。 本文基于 Go 1.14 [toc] 是什么 是 sync ...

吾八哥学k8s(三):kubernetes里创建资源的方法

上一篇里已经成功的将一个golang的demo服务部署到k8s环境里了,部署的时候我们用到了yaml配置文件,今天这里简单的介绍下如何使用创建kubernetes里的资源。在kubernetes里,一切对象皆为资源,可以通过命令或配置文件来创建。 命令行创建资源 通过命令行可以创建namespace ...

吾八哥学k8s(二):golang服务部署到kubernetes

本篇主要讲解如何将golang的服务部署到kubernetes集群里,附带相关的golang的demo和yml文件内容。纯新手入门方式,生产服务需要完整的CI/CD流程来支持。 golang服务代码 这里简单写一个k8s-demo的服务,提供两个接口ping和version接口,main.go文件代 ...

<1···101112···36>