gRPC 使用 protobuf 构建微服务

原文链接,转载注明来源即可。本文代码:GitHub本文目录: 微服务架构 单一的代码库 以前使用 Laravel 做 web 项目时,是根据 MVC 去划分目录结构的,即 Controller 层处理业务逻辑,Model 层处理数据库的 CURD,View 层处理数据渲染与页面交互。以及 MVP、MVVM 都是将整个项目的代码是集中在一个代码库中,进行业务处理。这种单一聚合代码的方式在前期实现业务的速度很快,但在后期会暴露很多问题: 开发与维护困难:随着业务复杂度的增加,代码的耦合度往往会变高,...阅读全文

2018-05-04 11:34:37 wuYin
阅读:1378 评论:3

基于go搭建微服务实践教程 (概览)

原文:Go Microservices blog翻译:秦伟格转载请注明原文及翻译。 译者按:公司转向重新做一套支付系统,并打算用golang的微服务来实现。于是上网上找一找教程,发现中文教程都不是很系统,于是找到了这一篇,自己实践下来,感觉深浅适中,讲解清晰,一步一步可以跟着做下来,之后能明白微服务大概的意思。所以用业余时间翻译了一下,献给大家。(笔者居住在国外,但第一次翻译技术文章,希望大家能指正不足) 这一系列博客会用go语言搭建一个为服务系统,这个过程中,我们会逐步加入新的东西,并且最后让...阅读全文

2018-05-05 14:34:36 瘦瘦鸭
阅读:4027 评论:0

Golang使用RemoteAddr()获取远程主机地址的注意事项

一、问题描述http.Request 下的方法RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。 使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取ip,客户端地址都是127.0.0.1 。 对于这个问题一直百思不得其解,最后搞了半天才发现是nginx 的原因。 因为线上项目使用nginx做了反向代理,所以导致服务端每次获取的都是nginx的地址,即127.0.0.1 。 关于这个问题的具体的内容可以查看:HTTP协议中的X-Real-IP,...阅读全文

2018-01-18 00:00 马谦的博客
阅读:10626 评论:0

Golang标准库深入 - 锁、信号量(sync)

概述 sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。 本包的类型的值不应被拷贝。 虽然文档解释可能不够深入,或者浅显易懂,但是我觉得还是贴出来,对比了解可能会更好。 Go语言中实现并发或者是创建一个goroutine很简单,只需要在函数前面加上"go",就可以了,那么并发中,如何实现多个goroutine之间的同步和通信?答: channel 我是第一个想到的, sync, 原子操作at...阅读全文

2018-05-17 23:33:04 90design
阅读:4426 评论:0

Golang中你不可不知的各种永远阻塞的写法

Go的运行时的当前设计,假定程序员自己负责检测何时终止一个goroutine以及何时终止该程序。 可以通过调用os.Exit或从main()函数的返回来以正常方式终止程序。而有时候我们需要的是使程序阻塞在这一行。 使用sync.WaitGroup 一直等待直到WaitGroup等于0 package main import "sync" func main() { var wg sync.WaitGroup wg.Add(1) wg.Wait() } 空select select{}是一个没有任...阅读全文

2018-05-21 00:33:04 大糊涂
阅读:2682 评论:0

golang利用reflect包实现struct与params自动绑定

前言 因为 golang 静态强类型语言特性以及没有很好的泛型支持导致在用 go 写 web 服务的时候,总会因为要对 http params 的解析和类型转换上要花很多时间,并且这会让代码显得很冗余,那有什么办法可以解决这一苦痛呢?答案当然是有的,这里我讲会到如何用 reflect 包写一个工具类实现 model 层 struct 与 http params 的自动映射绑定。 具体实现其实很简单,主要用到的就是通过 reflect.TypeOf() 获取字段的类型(包括字段名,类型,Tag描述...阅读全文

阅读:923 评论:0

Golang服务程序daemon化踩坑记录

之前写习惯了C/CPP,都知道可以使用Linux上的daemon函数来方便的实现守护进程。最近切换到go上,想如法炮制,第一个想到的就是基于cgo直接调用,类似如下代码: //#include<unistd.h> import "C" func Daemon() { C.daemon(1,0) } 上面代码确实可以成功执行,可问题随之而来。测试的时候,我发现使用了上述代码片段的程序,测试时会随机出现程序无限假死的情况,google的大部分结果都说的是golang的Scheduler和Linux的...阅读全文

2018-05-21 01:33:05 WangRichard
阅读:6705 评论:4

不得不知道Golang之sync.Map源码分析

sync.Map源码分析 背景 众所周知,go普通的map是不支持并发的,换而言之,不是线程(goroutine)安全的。博主是从golang 1.4开始使用的,那时候map的并发读是没有支持,但是并发写会出现脏数据。golang 1.6之后,并发地读写会直接panic: fatal error: concurrent map read and map write package main func main() { m := make(map[int]int) go func() { for ...阅读全文

2018-06-08 20:18:59 梦朝思夕
阅读:755 评论:0

golang如何truncate日志文件

有时候我们生成的日志文件很大,如果文件过大,或者磁盘空间有限,那么我们就需要把日志文件改小一点。 (当然实际应用场景中,一般采用log rotate的方式实现多个日志文件,定期把旧的日志文件挪走或者删除) 现在我们考虑如何把日志文件变小的场景。 首先想到的是文件truncate,遗憾的是truncate是把新的内容删掉,而不是把旧的内容删掉;因为通常我们的做法是要把旧的日志内容删除,而保留最新的日志内容。 方法1:拷贝文件,然后把前半部分删除,保留新的后半部分 $ wc -l logfile $...阅读全文

2018.07.04 10:33 CodeGeek
阅读:2169 评论:0

GO PDF资源 汇总!

汇总密码下载链接:https://pan.baidu.com/s/1oqsCMKU8OXv7vt_srb1KOg 密码:7t4g PDF 合集下载链接:链接:https://pan.baidu.com/s/18s44v7f5HFTT_DL7qCf-9A 密码:5koe pdf 清单: Go语言学习笔记.雨痕(详细书签) go语言标准库 PDF 下载 Go并发编程实战 第2版_Lite PDF go语言程序设计 高清扫描版带书签 Go Web编程.(谢孟军).[PDF]阅读全文

2018-07-31 22:32:53 REL9009
阅读:42661 评论:12

利用Docker部署Golang

1. 安装docker2.mkdir myDocker3.cd myDocker && touch Dockerfile4.Dockerfile写入# 将golang环境作为父镜像FROM golangMAINTAINER Razil "zc6496359"WORKDIR $GOPATH/src/godockerADD . $GOPATH/src/godockerRUN go build main.goEXPOSE 8080ENTRYPOINT ["./main"]参数解释:FROM -> 母镜...阅读全文

2018.08.08 02:35 BullShit_8645
阅读:882 评论:0

Go2设计草案介绍

前言Go,毫无疑问已经成为主流服务端开发语言之一,但它的类型特性却少的可怜,仅支持 structural subtyping。在 TIOBE 排名前二十的语言中,不管是上古语言 Java, 还是 2010 年之后出现的新语言 Rust/Julia 等,都支持至少三种类型特性,对此社区抱怨很多,另外还有它的错误处理方式,以及在 Go1.11 版本才解决的依赖管理等问题。在最近的 GopherCon2018 上,官方放出了解决这些问题的草案 (draft),这些内容还没有成为正式的提案 (propo...阅读全文

2018-08-30 09:28:42 Go中国
阅读:1081 评论:5

飞雪无情的博客Go语言、Android相关的十大热门文章

最近几年,写了一些博客,加起来不算多,150篇左右吧。 对于很多人来说,可能不明白我为什么写博客,写博客对于我来说,可能就像大家看电影一样,有时间就看看(写写)。对于我自己也是一些东西的总结,有时候通过写,才能加深理解。写博客还可以可以让你保持学习的心态,和读者交流,自我能力提升。 写的东西涉及各方面都有,但是以技术互联网居多,辅以管理、生活、总结等,内容有浅有深,如果你看到了,并且可以从中受益,那么这篇文章也就有了价值。 最近从这150篇中,根据阅读数,选了Golang(Go语言)、Andro...阅读全文

2018年10月8日 00:06 飞雪无情
阅读:581 评论:0

利用golang申请Let's Encrypt的HTTPS实现证书自动部署

一.HTTPS的好处 1.目前已经都普及用https协议了,但是还是有一些没用https,https协议可以标识网站是否安全,简单的说就是网站传输数据的时候https更安全,http可能会被窃听数据等,而https数据传输会进行加密,所以是更安全可靠的协议,更大谷歌浏览器这些都大力推进用https。 二.申请HTTPS证书 一.首先说一下流程吧申请一个HTTPS证书的简单步骤 1.向一个颁发证书的机构(CA)发出申请 2.CA验证你域名的控制权 3.下发证书 二.上面说到申请的步骤很简单就3步,...阅读全文

2018.11.24 16:04* 毛毛虫de一生
阅读:3170 评论:0

Go语言基础入门学习线路图+开源项目推

Go作为近两年迅速流行起来的编程语言始终致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,让开发者使用起来感觉异常快速且简单。相信有意向深入学习Go语言的小伙伴都在研究Go的开源项目,今天我就把自己觉得不错的6个Go开源项目和学习线路图分享给大家,希望大家能获得收获和成长。Go语言基础入门学习线路图:Go语言开源项目推荐:推荐一:kubernetes 【Star:44418】Kubernetes基于Docker,其目的是让用户通过Kubernetes集群来进行云端容器集群的...阅读全文

2018-11-28 17:21:43 程序员小千
阅读:4194 评论:0

protobuf可变长度原理

这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章【golang-protobuf使用】 可变长度类型 官网说明地址:https://developers.google.com/protocol-buffers/docs/proto3 proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64 连续位标识 Protobuf用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后...阅读全文

阅读:1957 评论:0

Golang中的一些常用的简单算法

本文为转载,原文:Golang中的一些常用的简单算法 Golang 介绍 Golang中的一些常用的简单算法, 包括抢红包算法,洗牌算法等 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序的顺序。 以下示例中以int切片为例给出一个简单算法: import ( "fmt" "math/rand" "time" ) func main() { intArr := []int{1,2,3,4,5,6,7,8,9} for i := 0; i < 10; i++{ shuffle(int...阅读全文

2018.12.13 20:28 ChainZhang
阅读:2729 评论:0

golang如何使用sarama访问kafka

golang如何使用sarama访问kafka 下面一个客户端代码例子访问kafka服务器,来发送和接受消息。 使用方式 命令行参数 $ ./kafkaclient -h Usage of ./client: -ca string CA Certificate (default "ca.pem") -cert string Client Certificate (default "cert.pem") -command string consumer|producer (default "con...阅读全文

2018.12.15 16:20 CodingCode
阅读:2132 评论:0

go-echarts 开源啦

<p align="center"> <img src="https://user-images.githubusercontent.com/19553554/52535979-c0d0e680-2d8f-11e9-85c8-2e9f659e7c6f.png" width=300 height=300 /> </p> <h1 align="center">go-echarts</h1> <p align="center"> <em>???? The adorable cha...阅读全文

2019-02-11 02:23:59 chenjiandongx
阅读:3551 评论:5