随机数

[toc] 我们应用中的随机数 抽奖,大转盘 我们经常接触的验证码 密码找回 go中select的公平保证 再然后https通信中的秘钥生成 还有游戏中爆装备的概率等 你以为的随机是真的随机吗 如果我们试着在程序开始的生成一个随机数,你会发现每次都是一样的。 我们可以准确的判断出随机数是什么。 所以这也就是我们经常说的伪随机数。 那有没有真正的随机数呢,比如我们可以再一开始生成一个seed,然后再去生成随机数,这样每次都不一样了,但是这样就是真正的随机了吗。举一个极端的例子,你用随机数生成密码,...阅读全文

简书 2021-04-18 09:32:35 lucasgao

go语言 defer详解

每个goroutine都维护一个自己的defer链表。 新注册的defer会被添加到链表头。 defer链表执行时,从链表头开始执行。所以表现出倒叙执行。 函数如果注册了defer函数,编译器会在代码底部插入deferreturn函数。 函数执行到deferreturn时,会根据defer结构体中的字段判断当前链表头的defer是不是自己注册的,是则执行并删除,反之,代表当前函数注册的defer已经执行完了,函数结束。 go1.12之前(含)使用上述方法执行defer,有一下几个问题: _def...阅读全文

简书 2021-04-18 05:32:35 __robin

对golang sync.once 实现的思考

源代码分析 sync.Once的源码很精简,但是有一行原子操作的代码却让我产生了疑惑。 在提出疑惑前,我们先分析下其实现的源代码。 我先添加一些基本的注释 // 去掉了源代码里面的注释 // Once is an object that will perform exactly one action. type Once struct { done uint32 m Mutex } func (o *Once) Do(f func()) { // fast path, // o.done=0代表...阅读全文

简书 2021-04-18 05:32:35 zhubaba

2021-04-17 golang环境安装

1.在网站下载GO:https://studygolang.com/dl tempsnip.png 2.选择想存放的位置,一路点击安装: cmd查看安装情况: image.png 3.配置环境变量: 删除用户变量里的:GOPATH=C:\Users\51237\go 配置系统变量:这就是以后存放代码和第三方包的地方。 添加GOPATH:D:\program\go image.png 且在path中添加gopath的bin目录(没有就新建一个):D:\program\go\bin image.pn...阅读全文

简书 2021-04-18 05:32:35 shiqianqian

手撸golang 仿spring ioc/aop 之9 扫码4

手撸golang 仿spring ioc/aop 之9 扫码4 缘起 最近阅读 [Spring Boot技术内幕: 架构设计与实现原理] (朱智胜 , 2020.6) 本系列笔记拟采用golang练习之 Talk is cheap, show me the code. Spring Spring的主要特性: 1. 控制反转(Inversion of Control, IoC) 2. 面向容器 3. 面向切面(AspectOriented Programming, AOP) 源码gitee地址: ...阅读全文

简书 2021-04-18 05:32:31 老罗话编程

go-zero 如何扛住流量冲击(二)

本篇文章承接上一篇go-zero 如何扛住流量冲击(一)。 上一篇介绍的是 go-zero 中滑动窗口限流,本篇介绍另外一个 tokenlimit ,令牌桶限流。 使用 const ( burst = 100 rate = 100 seconds = 5 ) store := redis.NewRedis("localhost:6379", "node", "") fmt.Println(store.Ping()) // New tokenLimiter limiter := limit.New...阅读全文

51CTO博客 2021-04-17 23:30:54 mob604756f0bbf4

Go-Zero 如何扛住流量冲击(一)

不管是在单体服务中还是在微服务中,开发者为前端提供的 API 接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性。即接口也需要安装上保险丝,以防止非预期的请求对系统压力过大而引起的系统瘫痪。 go-zero 集成了开箱即用的 限流器 。其中内置了两种限流器,也对应两类使用场景: 本文就来介绍一下 periodlimit 。 使用 const ( seconds = 1 total = 100 quota = 5 ) // New li...阅读全文

51CTO博客 2021-04-17 23:28:54 mob604756f0bbf4

Go-Zero 是如何追踪你的请求链路?

“ go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。” 序言微服务架构中,调用链可能很漫长,从 http 到 rpc ,又从 rpc 到 http 。而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪。 追踪的方法就是在一个请求开始时生成一个自己的 spanID ,随着整个请求链路传下去。我们则通过这个 spanID 查看整个链路的情况和性能问题。 下面来看看 go-zero 的链路实现。 代码结构...阅读全文

51CTO博客 2021-04-17 23:26:40 mob604756f0bbf4

Go-Zero如何应对海量定时/延迟任务

一个系统中存在着大量的调度任务,同时调度任务存在时间的滞后性,而大量的调度任务如果每一个都使用自己的调度器来管理任务的生命周期的话,浪费 cpu 的资源而且很低效。 本文来介绍 go-zero 中 延迟操作,它可能让开发者调度多个任务时,只需关注具体的业务执行函数和执行时间「立即或者延迟」。而 延迟操作,通常可以采用两个方案: Timer:定时器维护一个优先队列,到时间点执行,然后把需要执行的 task 存储在 map 中 collection 中的 timingWheel ,维护一个存放任务组...阅读全文

51CTO博客 2021-04-17 22:50:25 mob604756f0bbf4

Go实现自定义语言的基础 - goyacc简易入门

0x01 自言自语一直就对解析文档,比较感兴趣,一直没深入研究,只停留在仅知道 Lex & yacc 和 antlr 的名词阶段,最近看了go-zero的api解析器,觉得甚好,是时候花时间学习一下了。 简单看了go-zero发现是自己实现了词法分析、语法解析,这不符合我的一贯偷懒作风,所以并未其源码开始学习。既然用golang那么他自带的goyacc就是我学习的不二之选。当然你可能会听说Lex&yacc 已经很古老了,antlr更先进一点。但是既然goyacc能成为golang官方工具,那么肯...阅读全文

51CTO博客 2021-04-17 22:46:58 mob604756f0bbf4

还在担心服务挂掉?Sentinel Go 让服务稳如磐石

背景 微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化,服务之间的依赖关系变得越来越复杂,业务系统也面临着巨大的高可用挑战。 在生产环境中大家可能遇到过以下不稳定的情况: 大促时瞬间洪峰流量导致系统超出最大负载,load 飙高,系统崩溃导致用户无法下单 “黑马”热点商品击穿缓存,DB 被打垮,挤占正常流量 调用端被不稳定第三方服务拖垮,线程池被占满,调用堆积,导致整个调用链路卡死 这些不稳定的场景可能会导致严重后果,但很多时候我们又容易忽视这些与流量...阅读全文

51CTO博客 2021-04-17 22:08:51 mob604756f0bbf4

Nacos Go微服务生态系列(一) | Dubbo-go 云原生核心引擎探索

作者:李志鹏, Github账号:Lzp0412,开源社区爱好者,Nacos Committer,Nacos-SDK-go作者,现就职于阿里云云原生应用平台,主要参与服务发现、CoreDNS、ServiceMesh相关工作,负责推动Nacos Go微服务生态建设。 近几年,随着Go语言社区逐渐发展和壮大,越来越多的公司开始尝试采用Go搭建微服务体系,也涌现了一批Go的微服务框架,如go-micro、go-kit、Dubbo-go等,跟微服务治理相关的组件也逐渐开始在Go生态发力,如Sentine...阅读全文

51CTO博客 2021-04-17 22:06:17 mob604756f0bbf4

Go chassis 微服务开发框架实战系列(一)

什么是 Go chassisgo chassis 是一个 go 语言微服务开发框架,专注于云原生应用的开发,我们主要的使用场景是云服务开发。我们将自己在云服务开发过程中沉淀的能力融入到了开发框架中,以帮助开发团队快速编写云原生应用。 文章目标本文介绍我们的设计理念和目标,为何 go chassis 会诞生。后面的系列文章会着重介绍使用方法,项目实战。对于微服务架构模式,云原生要素,为什么选择 go 语言等将不再过多赘述。 诞生背景公司开发云服务,要构建健壮,韧性,安全,高可靠的云服务,必然有大量...阅读全文

51CTO博客 2021-04-17 22:02:58 mob604756f0bbf4

难以遏制的人因差错 -Go 的日志工具之痛

Go的日志工具之痛go生态一直没能有一个强势的日志工具,优秀的日志有zap,zerolog,但是API各有各的设计理念,自然是不兼容的 openlog和seclog的初衷倒退5年,go的日志工具更加不成熟,我们folk lager项目,进行安全整改后成为自己的项目https://github.com/go-chassis/seclog 然而他的老旧的API设计已经被我诟病很久。就是以f为结尾的函数调用 openlogging.GetLogger().Debugf("shuffler %d %d...阅读全文

51CTO博客 2021-04-17 21:48:46 mob604756f0bbf4

你还在手撕微服务?快试试 go-zero 的微服务自动生成

0. 为什么说做好微服务很难?要想做好微服务,我们需要理解和掌握的知识点非常多,从几个维度上来说: 基本功能层面 并发控制&限流,避免服务被突发流量击垮 服务注册与服务发现,确保能够动态侦测增减的节点 负载均衡,需要根据节点承受能力分发流量 超时控制,避免对已超时请求做无用功 熔断设计,快速失败,保障故障节点的恢复能力 高阶功能层面 请求认证,确保每个用户只能访问自己的数据 链路追踪,用于理解整个系统和快速定位特定请求的问题 日志,用于数据收集和问题定位 可观测性,没有度量就没有优化 对于其中每...阅读全文

51CTO博客 2021-04-17 21:47:04 mob604756f0bbf4

Pkg.go.dev 开源了

我们很高兴地宣布,pkg.go.dev的代码库 现已开放源代码。 代码库位于 go.googlesource.com/pkgsite 上(阅读原文获取) ,并镜像到 github.com/golang/pkgsite。我们将继续使用Go问题跟踪器来跟踪 与pkg.go.dev相关的反馈。 贡献如果您有兴趣对与pkg.go.dev相关的任何问题做出贡献 ,请查看我们的 贡献指南(https://go.googlesource.com/pkgsite/+/refs/heads/master/CONT...阅读全文

51CTO博客 2021-04-17 21:26:22 mob604756f0bbf4

JetBrains 发布 2020 年 Go 语言调查报告

有63%的人Go主要用于工作,28%的人用于个人项目 大多数人同时使用多个版本的Go,我估计是要维护不同版本下的项目,下面这个数据印证了这个猜测。 71%的Go开发者主要用来做微服务,排在Scala之后。 GOPATH影响深远啊,74%的人还是只使用一个全局GOPATH,其实最佳实践是分两个,一个用来下载第三方库,另一个用来做项目,但是目前引入新的module之后基本上不用GOPATH了。 版本管理基本上都已经切换到modules,dep和godep紧跟其后,我估计后面这些都是老版本维护工具了 ...阅读全文

51CTO博客 2021-04-17 21:25:29 mob604756f0bbf4

涂鸦智能 dubbo-go 亿级流量的实践与探索

dubbo 是一个基于 Java 开发的高性能的轻量级 RPC 框架,dubbo 提供了丰富的服务治理功能和优秀的扩展能力。而 dubbo-go 在 java 与 golang 之间提供统一的服务化能力与标准,是涂鸦智能目前最需要解决的主要问题。本文分为实践和快速接入两部分,分享在涂鸦智能的 dubbo-go 实战经验,意在帮助用户快速接入 dubbo-go RPC 框架,希望能让大家少走些弯路。另外,文中的测试代码基于 dubbo-go版本 v1.4.0。 dubbo-go 网关实践 dubb...阅读全文

51CTO博客 2021-04-17 21:23:57 mob604756f0bbf4

[斗鱼]没人比我更懂微服务--Go微服务框架Jupiter

项目开源地址: https://github.com/douyu/jupiter Jupiter 是斗鱼开源的,面向服务治理的Golang微服务框架,以开发效率和治理效率为核心目标,从统一开发规范、完善监控埋点、降低开发难度等多个维度来帮助Gopher开发高性能、高可靠性的微服务框架。 Jupiter在斗鱼内部经过三年打磨、几百个服务的线上验证,在多种应用场景中适配、历经多次基础架构迭代,有效地保障了服务应用的快速迭代、精确监控,并在异地多活、容器云、混沌工程等基础建设中,支撑服务的平滑迁移、平...阅读全文

51CTO博客 2021-04-17 21:18:49 mob604756f0bbf4

dubbo-go 中 REST 协议实现

在社区小伙伴们的努力下,Apache/dubbo-go 在 v1.4.0 中支持 REST 协议了。 什么是 REST 协议 REST 是 REpresentational State Transfer(表述性状态转移)的简写,是一种软件架构风格。虽然 REST 架构风格不是一定要基于 HTTP 协议进行传输,但是因为 HTTP 协议的通用性和易用性,现在越来越多的 web 服务采用基于 HTTP 协议实现 RESTful 架构。 在 dubbo-go 中的 REST 协议指的是一种基于 HTT...阅读全文

51CTO博客 2021-04-17 21:16:51 mob604756f0bbf4