Go1.7里面的BCE(跳跃检测排除)(译文)

最近发布的 Go 1.7 里面使用了一个新的基于 SSA 的编译后端(目前只有 amd64 可用)。SSA 使得编译出来的代码更加高效 SSA,主要是里面有包含了 BCE和公共子表达式消除。 这篇文章将会通过一些例子给大家展示 Go 1.7 里面BCE是如何工作的。 在 Go 1.7 里面我们可以通过这个命令 go build -gcflags="-d=ssa/check_bce/debug=1" 来展示我们的代码哪一行需要进行越界检查。 例子1 // example1.gopackage ma...阅读全文

51CTO博客 2021-04-21 20:04:37 mob604756f0bbf4

Go 内嵌静态资源

使用 Go 开发应用的时候,有时会遇到需要读取静态资源的情况。比如开发 Web 应用,程序需要加载模板文件生成输出的 HTML。在程序部署的时候,除了发布应用可执行文件外,还需要发布依赖的静态资源文件。这给发布过程添加了一些麻烦。既然发布单独一个可执行文件是非常简单的操作,就有人会想办法把静态资源文件打包进 Go 的程序文件中。下面就来看一些解决方案: go-bindatago-bindata 是目前我的程序 pugo 在用的嵌入静态资源的工具。它可以把静态文件嵌入到一个 go 文件中,并提供一...阅读全文

51CTO博客 2021-04-21 20:01:31 mob604756f0bbf4

再见go-micro!企业项目迁移go-zero全攻略(一)

作者:Mikael最近发现 golang 社区里出了一个新兴的微服务框架。看了一下官方提供的工具真的很好用,只需要定义好 .api 文件模版代码都可以一键生成,只需要关心业务;同时 core 中的工具极大减少了开发成本。废话不多说,来看看这个微服务框架:go-zero起源聊聊与go-zero结缘最先接触go-zero是2020年10月国庆假期,说来也巧,看到有人在go-micro群中问go-zero情况,当时go-zero作者在群中就大概回答了一下,引起了我的好奇,当时公司用的go-micro1...阅读全文

51CTO博客 2021-04-21 19:48:08 wx607fee5b9d0e6

我用go-zero开发了第一个线上项目

作者:结冰前言 说在最前面,我是一个外表谦让,内心狂热,外表斯文,内心贪玩的一个普通人。我的职业是程序员,是一个golang语言爱好者,一半是因为golang好用,一半是因为其他语言学不好。我是从phper转为gopher的,写php的时候我认识了互联网软件,写go的时候感觉自己终于在编程。初见golang 我大学专业是软件。第一门编程语言是C++,知道了指针,知道了加减乘除,知道了编程去控制软硬件。后来选修了java,被ssh框架戏耍了一个暑假。再后来进入了一个社团技术部,再被html/css...阅读全文

51CTO博客 2021-04-21 19:47:48 wx607fee5b9d0e6

我用 go-zero 一周实现了一个中台系统,已开源!

作者:Jack最近发现golang社区里出了一个新星的微服务框架,来自好未来,光看这个名字,就很有奔头,之前,也只是玩过go-micro,其实真正的还没有在项目中运用过,只是觉得 微服务,grpc 这些很高大尚,还没有在项目中,真正的玩过,我看了一下官方提供的工具真的很好用,只需要定义好,舒适文件jia结构 都生成了,只需要关心业务,加上最近 有个投票的活动,加上最近这几年中台也比较火,所以决定玩一下,开源地址: github.com/jackluo2012…先聊聊中台架构思路吧:中台的概念大概...阅读全文

51CTO博客 2021-04-21 19:47:27 wx607fee5b9d0e6

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

不管是在单体服务中还是在微服务中,开发者为前端提供的API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性。即接口也需要安装上保险丝,以防止非预期的请求对系统压力过大而引起的系统瘫痪。go-zero 集成了开箱即用的 限流器 。其中内置了两种限流器,也对应两类使用场景:种类原理场景periodlimit单位时间限制访问次数需要强行限制数据的传输速率tokenlimit令牌桶限流限制数据的平均传输速率,同时允许某种程度的突发传输本文就...阅读全文

51CTO博客 2021-04-21 19:47:05 wx607fee5b9d0e6

一文读懂云原生 go-zero 微服务框架

0. go-zero介绍从今年8月7日github开源以来,已经获得了2700+ star的 go-zero 是一个集成了各种工程实践的web和rpc框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero包含极简的API定义和生成工具goctl,可以根据定义的api文件一键生成Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript代码,并可直接运行。使用go-zero的好处:轻松获得支撑千万日活服务的稳定性内建级联...阅读全文

51CTO博客 2021-04-21 19:46:47 wx607fee5b9d0e6

如何利用go-zero在Go中快速实现JWT认证

关于JWT是什么,大家可以看看官网,一句话介绍下:是可以实现服务器无状态的鉴权认证方案,也是目前最流行的跨域认证解决方案。要实现JWT认证,我们需要分成如下两个步骤客户端获取JWT token。服务器对客户端带来的JWT token认证。1. 客户端获取JWT Token我们定义一个协议供客户端调用获取JWT token,我们新建一个目录jwt然后在目录中执行 goctl api -o jwt.api,将生成的jwt.api改成如下:type JwtTokenRequest struct { }...阅读全文

51CTO博客 2021-04-21 19:46:23 wx607fee5b9d0e6

Go开源说第四期:go-zero解读与最佳实践(上)

本文有『Go开源说』第三期 go-zero 直播内容修改整理而成,视频内容较长,拆分成上下篇,本文内容有所删减和重构。大家好,很高兴来到“GO开源说” 跟大家分享开源项目背后的一些故事、设计思想以及使用方法,今天分享的项目是 go-zero,一个集成了各种工程实践的 web 和 rpc 框架。我是Kevin,go-zero 作者,我的 github id 是 kevwan。go-zero 概览go-zero 虽然是20年8月7号才开源,但是已经经过线上大规模检验了,也是我近20年工程经验的积累,...阅读全文

51CTO博客 2021-04-21 19:45:57 wx607fee5b9d0e6

再见go-micro!企业项目迁移go-zero全攻略(二)

承接上篇:上篇文章讲到 go-zero 架构设计和项目设计。本篇文章接着这个项目设计,将生成的 app 模块 中 gateway 和 RPC 进行改造。废话不多说,让我们开始!gateway servicegateway 中我做了一些自定义,在端请求我们后台接口情况下,虽然多数情况是不需要关心错误码的,但是避免不了要某些场景还是需要根据固定错误码去做特殊处理,我自己定义了一个错误类,这个错误类只在 gateway 中使用:err.go:package xerrimport "fmt"type C...阅读全文

51CTO博客 2021-04-21 19:45:32 wx607fee5b9d0e6

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 tokenLimiterlimiter := limit.NewTokenL...阅读全文

51CTO博客 2021-04-21 19:45:04 wx607fee5b9d0e6

go-zero 如何追踪你的请求链路

微服务架构中,调用链可能很漫长,从 http 到 rpc ,又从 rpc 到 http 。而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪。追踪的方法就是在一个请求开始时生成一个自己的 spanID ,随着整个请求链路传下去。我们则通过这个 spanID 查看整个链路的情况和性能问题。下面来看看 go-zero 的链路实现。代码结构spancontext:保存链路的上下文信息「traceid,spanid,或者是其他想要传递的内容」span:链路中的一个操作,存储时间和某些信息p...阅读全文

51CTO博客 2021-04-21 19:44:38 wx607fee5b9d0e6

Go 大数据生态迎来重要产品 CDS

项目地址:github.com/tal-tech/cd…ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它有着优异的性能,可以快速部署和运行。 不过要想使用ClickHouse搭建起数仓用于数据分析,一个重要的问题就是数据如何进入ClickHouse? 我们希望数据源的变化能够自动实时地被同步到ClickHouse,而且支持方便的动态的添加新的数据源(新的数据库,表), 能够自动的生成对应数据源的schema。go-zero团队使用go语言围绕ClickHou...阅读全文

51CTO博客 2021-04-21 18:21:27 wx607fee5b9d0e6

最简单的Go Dockerfile编写姿势,没有之一!

1. Dockerfile一些额外注意点选择最简单的镜像比如alpine,整个镜像5M左右设置镜像时区RUN apk add --no-cache tzdataENV TZ Asia/Shanghai复制代码2. 多阶段构建第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像3. 完整Dockerfile编写过程首先安装 goctl 工具GO111MODULE=on GOPROXY=https://goproxy.cn/,direct ...阅读全文

51CTO博客 2021-04-21 18:17:30 wx607fee5b9d0e6

windows下如何玩转火热的go-zero

作者:阿啄debugIT前言go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。这么牛,怎么不想去试一下?!go语言环境搭建配置GO语言环境新增go的代理GOPROXY=https://g...阅读全文

51CTO博客 2021-04-21 18:12:41 wx607fee5b9d0e6

分布式任务 + 消息队列框架 go-queue

为什么写这个库应用场景有哪些如何使用总结为什么要写这个库?在开始自研 go-queue 之前,针对以下我们调研目前的开源队列方案:beanstalkdbeanstalkd 有一些特殊好用功能:支持任务priority、延时(delay)、超时重发(time-to-run)和预留(buried),能够很好的支持分布式的后台任务和定时任务处理。如下是 beanstalkd 基本部分:job:任务单元;tube:任务队列,存储统一类型 job。producer 和 consumer 操作对象;prod...阅读全文

51CTO博客 2021-04-21 18:08:05 wx607fee5b9d0e6

极速精简 Go 版 Logstash

前言今天来介绍 go-zero 生态的另一个组件 go-stash。这是一个 logstash 的 Go 语言替代版,我们用 go-stash 相比原先的 logstash 节省了2/3的服务器资源。如果你在用 logstash,不妨试试,也可以看看基于 go-zero 实现这样的工具是多么的容易,这个工具作者仅用了两天时间。整体架构先从它的配置中,我们来看看设计架构。Clusters: - Input: Kafka:# Kafka 配置 --> 联动 go-queueFilters:# fil...阅读全文

51CTO博客 2021-04-21 18:07:10 wx607fee5b9d0e6

用 Go + WebSocket 快速实现一个 chat 服务

前言在 go-zero 开源之后,非常多的用户询问是否可以支持以及什么时候支持 websocket,终于在 v1.1.6 里面我们从框架层面让 websocket 的支持落地了,下面我们就以 chat 作为一个示例来讲解如何用 go-zero 来实现一个 websocket 服务。整体设计我们以 zero-example 中的 chat 聊天室为例来一步步一讲解 websocket 的实现,分为如下几个部分:多客户端接入消息广播客户端的及时上线下线全双工通信【客户端本身是发送端,也是接收端】先放...阅读全文

51CTO博客 2021-04-21 17:51:55 wx607fee5b9d0e6

一文搞懂如何实现 Go 超时控制

为什么需要超时控制?请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至出现不可用事故Go 超时控制必要性Go 正常都是用来写后端服务的,一般一个请求是由多个串行或并行的子任务来完成的,每个子任务可能是另外的内部请求,那么当这个请求超时的时候,我们就需要快速返回,释放占用的资源,比如goroutine,文件描述符等。服务端常见的超时控制进程内的逻辑处理读写客户端请求,比如HTTP或者RPC请求调用其它服务端...阅读全文

51CTO博客 2021-04-21 17:51:33 wx607fee5b9d0e6

10天入门go语言教程- 常量变量

转载请注明来源"老男孩IT教育"来源网址:https://www.sholdboyedu.com/new/490.htmlgo语言中if-else语句是经常所用到的,if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行,下面我们一起来学习一下if-else语句的运用吧!if-else 语句if 是条件语句。if 语句的语法是if condition { }如果 condition 为真,则执行 { 和 } 之间的代码。不同于其他语言,例如 C...阅读全文

51CTO博客 2021-04-21 15:40:12 上海老男孩教育