go-micro+gin+etcd微服务实战之服务注册与发现

在构建微服务时,使用服务发现可以减少配置的复杂性,本文以go-micro为微服务框架,使用etcd作为服务发现服务,使用gin开发golang服务。 使用gin 的原因是gin能够很好的和go-micro进行集成。 本文主要介绍服务注册和发现的实现 关于如何搭建etcd服务可以移步:https://www.jianshu.com/p/ec0e4911236d 本文默认以搭建好了etcd服务,服务的地址是:192.168.109.131:12379 如果你搭建好了自己的etcd服务,可以按照上面文...阅读全文

简书 2020-05-07 15:38:25 技术修仙

my-project 后端系统搭建(2) golang+docker

后端的搭建规划是:启动一个go docker 镜像的container, 用于编译golang项目,并把container的输出(main文件)指向指定目录:/var/lib/jenkins/workspace/my-project-backend 即($PWD)jenkins job的workspace, 然后再把main文件拷贝到一个固定目录下,重命名在执行。 之所以重命名是因为文件名字为main的不容易让人理解这个可执行文件的本意。golang build可以自定义输出结果的名字,但是好像...阅读全文

什么,秒杀系统也有这么多种!

前言 本文结构很简单: 5张图送你5种秒杀系统,再加点骚操作,再顺带些点心里话????‍♀️。 一个简单的秒杀系统 实现原理: 通过redis原子操作减库存 图一 优点 缺点 简单好用 考验redis服务能力 是否公平 公平 先到先得 我们称这类秒杀系统为: 简单秒杀系统 如果刚开始QPS并不高,redis完全抗的下来的情况,完全可以依赖这个「简单秒杀系统」。 一个够用的秒杀系统 实现原理: 服务内存限流算法 + redis原子操作减库存 图二 优点 缺点 简单好用 - 是否公平 不是很公平 相...阅读全文

Segmentfault 2020-05-12 08:32:34 TIGERB

Librarian: 帮你快速一键启动一个markdown站点

有时候我们写的文档,想要发布到公网或局域网上,分享给他人。当你不想花时间在纠结怎么搭建网站,下载各种依赖等等。那么 Librarian 也许可以帮到你。Librarian 可以一键启动一个 markdown 站点,你只需要写好 markdown 文档,以及设置目录yml。 github地址:https://github.com/GoAdminGroup/librarian 使用 下载Librarian 文件名 系统 系统架构 大小 librarian_darwin_x86_64_v0.0.2.z...阅读全文

Segmentfault 2020-05-11 21:32:33 cg33

Golang学习——interface接口学习(二)

Golang接口断言学习 一.类型断言 二.接口断言 1.if else结构 接口断言2.switch结构 接口断言 在Golang中,空接口 interface{}没有定义任何函数,因此Golang 中所有类型都实现了空接口。当一个函数的形参是interface{},那么在函数中,需要对形参进行断言,从而得到它的真实类型。 一.类型断言 在学习接口断言之前,先了解一下类型断言,其实接口断言也是在判断类型。 类型断言,通过它可以做到以下几件事情: 检查 i 是否为 nil检查 i 存储的值是否为...阅读全文

掘金 2020年05月07日 相守之路

12. Go 语言流程控制:defer 延迟语句

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 swi...阅读全文

掘金 2020年05月07日 王一白

使用Go开发前端应用(三)

前言 在写这个系列第一篇文章的时候,有些朋友可能不知道wasm能够使用在什么场景,虽然在评论里面有提及,但是没有上具体的例子,这篇文章,使用一个具体的例子来示范下wasm的使用场景。这篇文章主要会讲以下几个方面的东西: md5简单介绍 使用Go计算文件md5 使用js计算文件md5 性能对比 文件秒传什么实现的? md5的简单介绍 md5 简单的说就是它是一种散列算法,在以前有很多网站或者系统,都是使用 md5 来加密的,md5 的特征是,任意长度的输入,它都可以给你生成一个128位的结果出来,...阅读全文

掘金 2020年05月07日 zhongzhong05

让我们一起啃算法----移除元素

移除元素(Remove-Element) 题干如下: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例 2...阅读全文

Segmentfault 2020-05-11 09:32:36 三斤和他的朋友们

12. Go 语言流程控制:defer 延迟语句

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件...阅读全文

Segmentfault 2020-05-11 08:32:33 Python编程时光

分布式系统高可用实战之限流器(Go 版本实现)

限流器,顾名思义用来对高并发的请求进行流量限制的组件。 限流包括 Nginx 层面的限流以及业务代码逻辑上的限流。流量的限制在众多微服务和 service mesh 中多有应用。限流主要有三种算法:信号量、漏桶算法和令牌桶算法。下面依次介绍这三种算法。 笔者在本文的程序示例均以 Go 语言实现。 1. 问题描述 用户增长过快、热门业务或者爬虫等恶意攻击行为致使请求量突然增大,比如学校的教务系统,到了查分之日,请求量涨到之前的 100 倍都不止,没多久该接口几乎不可使用,并引发连锁反应导致整个系统...阅读全文

golang构建web服务入门教程-配置管理(三)

上一节我们通过几行简单的代码生成了快速创建了一个web服务,今天我们就来使用配置文件来进一步学习与使用 Orange 框架; 接着上一节的代码继续往下修改: 在 $GOPATH/src目录下创建一个demo文件夹,并在文件夹内创建 main.go 文件,然后再创建一个 config.toml 文件; ***config.toml文件内容*** ```php [app] name = "orange" key = "be5356716b937d94eae9...阅读全文

Go语言中文网 2020-05-06 23:25:15 zhucheer

PyTorch入门到进阶 实战计算机视觉与自然语言处理项目

第1章 课程介绍-选择Pytorch的理由本章节主要介绍课程的主要内容、核心知识点、课程涉及到的应用案例、深度学习算法设计通用流程、适应人群、学习本门课程的前置条件、学习后达到的效果等,帮助大家从整体上了解本门课程的整体脉络。第2章 初识PyTorch框架与环境搭建本章节主要介绍PyTorch框架基础知识,对比其他的深度学习框架(比如:Tensorflow等),分析优缺点,以及介绍如何在Linux(Ubuntu16.04)系统下搭建Pytorch环境。第3章 PyTorch入门基础串讲主要介绍P...阅读全文

Go语言中文网 2020-05-06 21:43:29 mature

RSA到底是谁加密?

RSA到底是谁加密? RRSA加密是最常用的非对称加密方式,原理是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。 但你一定会碰到过,两个开发者争执:到底是由谁加密,谁解密? 看完这篇文章,你就会明白这一切。 规范怎么说 我们先来看看权威库open_ssl的文档描述,它定义了四个方法 RSA_private_decrypt RSA_private_encrypt RSA_public_decrypt RSA_public_encrypt 看起来似乎...阅读全文

Segmentfault 2020-05-10 22:32:34 boywus

多阶段构建Golang程序Docker镜像

### Docker简介 Docker是基于Linux容器技术(LXC),使用Go语言实现的开源项目,诞生于2013年,遵循Apache2.0协议。Docker自开源后,受到广泛的关注和讨论。 ##### Docker在开发和运维中的优势 * 更快的交付和部署 使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境,开发完后,测试和运维人员可以直接使用完全相同的环境来部署代码,实现了生产环境的无缝运行。 * 更高效的资源利用 Docker容器的运行不...阅读全文

Go语言中文网 2020-05-06 21:00:14 939496716

阿里Redis最全面试全攻略,读完这个就可以和阿里面试官好好聊聊

什么是Redis及其重要性?Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久化的高性能键值对数据库。Redis的之父是来自意大利的西西里岛的Salvatore Sanfilippo,Github网名antirez,笔者找了作者的一些简要信息并翻译了一下,如图: 从2009年第一个版本起Redis已经走过了10个年头,目前Redis仍然是最流行的key-value型内存数据库的之一。优秀的开源项目离不开大公司的支持,在2013年5月之前,其开发由VMware赞助,而2013...阅读全文

简书 2020-05-06 19:33:00 Java高级架构

【译】实现Raft协议:Part 3 - 持久性和优化

翻译自Eli Bendersky的系列博客,已获得原作者授权。 本文是系列文章中的第一部分,本系列文章旨在介绍Raft分布式一致性协议及其Go语言实现。文章的完整列表如下: 序言:介绍 第一部分:选主 第二部分:指令和日志复制 第三部分:持久性和优化(本文) 在这一部分,我们会添加持久性和一些优化来完善Raft的基础实现。所有代码已上传到这个目录。 持久性 类似Raft这样的一致性算法的目标,就是通过在独立的服务器之间复制任务来创建一个更具高可用性的系统。在此之前,我们主要关注的是网络分区的故障...阅读全文

掘金 2020年05月06日 GuoYaxiang

go 模板详说

模板是我们常用的手段用于动态生成页面,或者用于代码生成器的编写等。比如把数据库的表映射成go语言的struct,这些体力活,写个代码生成器是最合适不过的了. 示例例把表转成 struct : 当然这篇帖子不是写关于代码生成器的,是详细说一下go的Template,对Template的操作熟悉了后,就可以利用他实现你想要的一些功能。 渲染对象 {{.}}来渲染对象本身,对象内部的字段可以{{.field}} 比如下面,我是用一个 map来存储的数据,访问key: name,并使用{{.}}来把 m...阅读全文

掘金 2020年05月06日 compiler

实现Raft协议:Part 0 - 介绍

翻译自Eli Bendersky的系列博客,已获得原作者授权。 本文是系列文章中的序言,本系列文章旨在介绍Raft分布式一致性协议及其Go语言实现。文章的完整列表如下: 序言:介绍(本文) 第一部分:选主 第二部分:指令和日志复制 第三部分:持久性和优化 Raft是一个相对较新的算法(2014),但是已经在业界取到了广泛的应用。最知名的案例应该就是Kubernetes,其中的分布式键值存储组件etcd就依赖了Raft协议。 本系列文章的写作目的,在于描述Raft协议的一个功能完备且经过严格测试的...阅读全文

掘金 2020年05月04日 GuoYaxiang

实现Raft协议:Part 1 - 选主

翻译自Eli Bendersky的系列博客,已获得原作者授权。 本文是系列文章中的第一部分,本系列文章旨在介绍Raft分布式一致性协议及其Go语言实现。文章的完整列表如下: 序言:介绍 第一部分:选主(本文) 第二部分:指令和日志复制 第三部分:持久性和优化 在这一部分,我会介绍我们的Raft实现代码的结构,并重点介绍算法的选主部分。本文的代码包括一个全功能的测试工具和一些您可以用来测试系统的案例。但是它不会响应客户端的请求,也不好维护日志,这些功能会在第2部分添加。 代码结构 简单介绍一下Ra...阅读全文

掘金 2020年05月04日 GuoYaxiang