Go
文章平均质量分 76
Go开发实战
curd_boy
热爱编程,喜欢探索新技术
展开
-
【Go】FreeCache BigCache源码分析【未完结】
FreeCacheBigCache原创 2023-04-23 15:12:33 · 229 阅读 · 1 评论 -
【框架篇】Gin框架源码解读【更新中】
中间件的实现 依照设计模式中责任链模式原创 2022-06-09 15:30:28 · 367 阅读 · 1 评论 -
【备忘】Docker run standard_init_linux.go:211: exec user process caused “no such file or directory“
文章目录方案一:修改文件格式(check所有打进镜像启动需要的文件,重点关注docker-entrypoint.sh)方案二:更换基础镜像方案三:静态编译 – Golang Build过程中报的这个错。方案四:方案一:修改文件格式(check所有打进镜像启动需要的文件,重点关注docker-entrypoint.sh)是文件格式问题,需要修改 fileformat=unix方案二:更换基础镜像换基础镜像 为FROM centos方案三:静态编译 – Golang Build过程中报的这个错。go原创 2022-05-30 20:43:12 · 239 阅读 · 0 评论 -
【微服务】RPC和HTTP
文章目录RPCRPC工作模式gRPCgRPC的特性与优缺点1.基于HTTP/22.IDL使用ProtoBuf3.多语言支持HTTP和RPC的优缺点Go语言中的RPC支持与处理grpcprotobuffer 为什么高效Protocol buffers 反序列化RPCRPC(Remote ProcedureCall,远程过程调用) 是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OS原创 2021-08-06 11:13:27 · 5059 阅读 · 0 评论 -
【Go】标准库底层实现 ①
文章目录数据类型引用类型slicemapchannelchannel存在3种状态:context原理panic revover为什么defer才能recoverreflect什么是反射为什么要用反射,(需要反射的 2 个常见场景)defernew make数据类型引用类型slice扩容规则当需要的容量超过原切片容量的两倍时,会使用需要的容量作为新容量。(长度是奇数就+1为容量,是偶数就长度为容量)当原切片长度小于1024时,新切片的容量会直接翻倍。而当原切片的容量大于等于1024时,会反复地原创 2021-08-20 00:49:31 · 1220 阅读 · 1 评论 -
【微服务】【GO训练营总结】
gRPC 和服务发现这是为了解决去中心化的核心目标而引入的。选择 gRPC 的原因gRPC 是基于 http2 双向流且可复用连接,比 http1.1 的单向流省 tcp 连接;代码即文档,表现力比 http restful 强,能提高接口的标准化;可支持在公网,统一内网外通信healthCheck,端对端异步检测,辅助平滑发布服务发现客户端:每个客户端实现服务实例的发现和相同的负载均衡算法,并直连服务实例进行通信;服务端:中间加入网关层,网关实现服务实例的发现,客户端只连网关,好原创 2021-08-17 00:01:55 · 655 阅读 · 0 评论 -
【Go】面试题篇 三
根对象到底是什么?根对象在垃圾回收的术语中又叫做根集合,它是垃圾回收器在标记过程时最先检查的对象,包括:全局变量:程序在编译期就能确定的那些存在于程序整个生命周期的变量。执行栈:每个 goroutine 都包含自己的执行栈,这些执行栈上包含栈上的变量及指向分配的堆内存区块的指针。寄存器:寄存器的值可能表示一个指针,参与计算的这些指针可能指向某些赋值器分配的堆内存区块。有了 GC,为什么还会发生内存泄露?形式1:预期能被快速释放的内存因被根对象引用而没有得到迅速释放(局部变量被全局变量引用原创 2021-08-04 12:24:13 · 237 阅读 · 0 评论 -
【Go】Golang内存管理篇 ⑤
一. 内存管理内存分配器堆和栈区别1.空间分配区别:栈:由操作系统(编译器)自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。堆:一般由代码分配释放,若代码没有显式释放,程序结束时可能由OS回收,分配方式类似链表。2.缓存方式区别:栈:使用的是一级缓存,通常都是被调用时处于存储空间中,调用完毕立即释放。堆:存放在二级缓存中,生命周期由垃圾回收算法来决定。3.数据结构区别:栈:先进后出的线性结构。堆:类似于一颗树。1.1 go内存分配原创 2021-07-16 15:19:18 · 1002 阅读 · 0 评论 -
【微服务】Go进阶四 日志&指标&链路追踪
日志级别https://github.com/golang/glog,是 google 提供的一个不维护的日志库,glog 有其他语言的一些版本,对我当时使用 log 库有很大的影响。它包含如下日志级别:InfoWarningErrorFatal(会中断程序执行)还有类似 log4go,loggo,zap 等其他第三方日志库,他们还提供了设置日志级别的可见行,一般提供日志级别:TraceDebugInfoWarningErrorCriticalFatal记录消息后,直接调原创 2021-04-24 23:34:08 · 723 阅读 · 0 评论 -
【Go】Golang runtime调度③
文章目录调度-GMP调度模型1. GMP支撑了 Go 的高并发2. GMP定义3.Goroutine vs OS thread 有什么区别?抢占1.go协程阻塞时如何进行调度?1. 只G阻塞,M,P可用的2. G,M都被阻塞,P可用系统调用(open file) system call2.GO的调度过程:2.5 PMG模型中状态汇总G状态P的状态M的状态如果Goroutine 一直占用资源怎么办,PMG模型怎 么解决的这个问题?1,如果某个M陷入阻塞呢?2,如果有的M较忙,有的M较闲呢?3,如果一个G运行时原创 2021-02-09 10:31:37 · 1106 阅读 · 1 评论 -
【微服务】微服务治理:熔断、链路追踪
熔断器有三种状态:关闭状态:服务正常,并维护一个失败率统计,当失败率达到阀值时,转到开启状态开启状态:服务异常,调用 fallback 函数,一段时间之后,进入半开启状态半开启装态:尝试恢复服务,失败率高于阀值,进入开启状态,低于阀值,进入关闭状态github.com/afex/hystrix-go,提供了 go 熔断器实现,使用上面也很方便,首先创建一个熔断器hystrix.ConfigureCommand( "addservice", // 熔断器名字,可以用服务名称命名,一个名字对应原创 2021-02-03 22:11:10 · 812 阅读 · 0 评论 -
【Go】Go-Micro微服务框架
简单案例 https://github.com/why19970628/micro-serviceService实现如下接口的,都是Servicetype Service interface { Init(...Option) Options() Options Client() client.Client Server() server.Server Run() error String() string}如 service := micro.NewService()返回的是mic原创 2021-02-02 22:55:24 · 218 阅读 · 0 评论 -
【Go】面试篇 ②
showmebug2 6年经验1.多核cpu cache怎么保持不冲突和一致MESI解决方案 把cache 设置为四个状态,是两个bit来表示,四种状态:修改、独占、共享、失效状态更新:把内存的一块数据加载到cache中,某一个内核对这个数据进行修改,这时就是修改状态,独占的状态。有另外一个相同的数据资源修改时,这时会检测到,将独占状态变为共享状态,之前读取的数据会变成失效的状态,新的内存里面加载到cache里面,还有一些不同的情况:当一个数据处于共享状态,比如两个内核都加载同一份数据,到内核ca原创 2021-01-23 23:49:53 · 529 阅读 · 0 评论 -
【Golang】Go语言面试①
Go 语言笔试面试题汇总Go 语言笔试面试题(基础语法)原创 2021-01-10 16:43:59 · 570 阅读 · 0 评论 -
GO微服务实战之红包系统
业务模型2-3 红包数据库表结构讲解红包序列红包算法红包算法逻辑6点要求微信两倍平均算法原创 2020-09-21 22:28:43 · 599 阅读 · 0 评论 -
【Go】Golang小技巧总结
初步整合GraphQL+ginjson与 map转换为structpackage mainimport ( "encoding/json" "fmt" "github.com/goinggo/mapstructure")func JsonToMap() { jsonStr := ` { "name":"liangyongxing", "age":12 } ` var mapResult map[string]interface{原创 2020-09-15 00:10:40 · 696 阅读 · 0 评论 -
Go开发抽奖项目(iris+xorm+redigo+订单高并发)
前后端需求后端管理需求优惠券表原创 2020-08-22 03:04:08 · 793 阅读 · 1 评论 -
JWT-RESTful进行身份认证
视频链接原创 2020-08-08 16:21:47 · 688 阅读 · 0 评论 -
Go语言gin框架实现网关系统②项目实战
9 项目实战准备9-1 功能预览及介绍演示地址9-2 功能点拆分后端管理功能代理服务器功能9-3 开发流程及评审流程9-4 功能点实现思考后端管理功能代理服务器功能9-5 前端与后端如果开发不阻塞第10章 项目实战之后台管理后端功能10-1 数据表整理与创建设计原则ER图...原创 2020-07-26 19:36:54 · 3858 阅读 · 1 评论 -
Go语言gin框架实现网关系统①网络基础
第2章 扫盲网关前置技术:必备网络基础必备网络基础2-5 节流开源 - TCP为啥需要流量控制原创 2020-06-30 23:36:48 · 1612 阅读 · 0 评论 -
Gin实战-开发用户管理系统(脚手架)
地址: https://www.imooc.com/learn/1175gin基础知识搭建企业级脚手架开发用户管理系统原创 2020-05-23 15:32:54 · 2415 阅读 · 1 评论 -
Gin框架-新闻论坛后端
课程链接路由分组v1 := router.Group("v1/topics")v1.GET("/", topics)v1.GET("/:topic_id",src.GetTopicDetail)简单Dao层代码封装、使用中间件模拟 鉴权类似于python的装饰器func MustLoginin() gin.HandlerFunc { return func(c *gin.Context){ if _,status := c.GetQuery("token");!status{ c原创 2020-05-16 02:40:01 · 942 阅读 · 0 评论 -
【Go】Go语言视频零基础入门到精通项目实战web-基础篇
1.类型转换1.1 简单的类型转换// 浮点数a := 5.0// 转换为int类型b := int(a)Go允许在底层结构相同的两个类型之间互转。例如:// IT类型的底层是int类型type IT int// a的类型为IT,底层是intvar a IT = 5// 将a(IT)转换为int,b现在是int类型b := int(5)// 将b(int)转换为...原创 2019-12-12 12:30:50 · 678 阅读 · 0 评论