Go语言中文网 为您找到相关结果 686

高速数据同步服务器——Doozer

昨天在讨论平台新架构的时候,还在说要搞个配置管理的服务出来,方便接口的管理。然后今天就看到了这个……人品爆发了吗? 好吧,不扯淡,直接翻译 Doozer 的 README 吧。Doozer 我还没实测,不过感觉,如果真得像 README 上面说得那样,还是很有用,很有用的。 关键——这个玩意提供了 go 的接口。(补充一点,忘了说了,这个是用 go 开发的) 项目代码托管于此:Doozer。 ———————-翻译分割线———————- Doozer 这是什么? Doozer 是高可用的,完整一致性的用于小量、极端重要的数据的存储。当数据变化时,它立刻通知接入的客户端(不缓存),对于那些很少更新,但是希望更新发生时实时性高的客户端来说是非常理想的。Doozer 对于名字服务、主数据库选取和多个...阅读全文

博文 2014-10-09 16:15:18 mikespook

在生成环境中使用 Go 语言两年的总结

在iron.io的生产环境使用Go语言两年后,我想分享我们的经验和感受。我们是第一批在生产环境中使用Go(Go语言)的公司之一,长久以来我们不知道该有怎样的预期,但到目前为止,很棒。 在之前发表的一篇文章从Ruby切换到Go中我谈了一些,但这次将更具细节一些,我们喜欢这门语言以及一路上我们学到的东西。介绍没有特定顺序,按下面这样: 性能表现(Performance)内存占用(Memory)并发性(Concurrency)可靠性(Reliability)部署(Deployment)天赋(Talent) 性能表现 当我们第一次决定要使用什么语言时我们做了一些调研,为我们的应用环境、消息队列创建了一些模拟。我用Go写了我偏爱的beanstalkd的一个副本实现,使用beanstalkd协议,这样我...阅读全文

golang插件化方案

背景业务线的活动,每一次新活动都做独立项目开发,有大量重复代码,并且浪费数据服务的连接资源;排序服务也许要经常添加业务代码,目前是停服务发布……这些场景为了开发维护效率、稳定性、安全性和性能都使用了Go语言。Go是静态编译语言,在具体的动态场景该如何实现应用级别的持续交付呢?基于k8s,nginx网关,队列回溯消费等工具的实现也可以实现不同程度的持续交付,但是持续交付的要求越高,搭建平台和维护的成本也越高。从应用开发本身出发,可以考虑插件化。>>>阅读全...阅读全文

博文 2018-08-15 13:36:18 倔强_beaf

golang如何快速转换uint8数组到JSON

hi 大家好 在服务端通过websocket收到一串uint8数组: [3,1,"checkin",{"ver":"2.4.7","sid":"","proxies":[]}] 前端用的是js的 `JSON.stringify([messageType, ackId, name, data])` 发送的消息,messageType是3,ackid为1, name为checkin,data为 `{"ver":"2.4.7","sid":"","proxies":[]}` 在服务端我想解析出messageType,ackid,checkin,和data中的各个域(如ver, sid, proxies) 查看了go websocket接口和开源的websocket实现都没...阅读全文

Golang http.DefaultClient 连接服务端压测时出现大量TIME_WAIT异常

今天在做一个压测场景时,通过golang作为client去连接服务,在client的服务器上出现大量的TIME_WAIT连接。经过查找资料,得到解决,参考如下: The default http.Transport is opening and closing connections too quickly. Since all connections are to the same host:port combination, you need to increase MaxIdleConnsPerHost to match your value for num_coroutines. Otherwise, the transport will frequently close the e...阅读全文

博文 2017-09-15 18:33:10 fdhay

Go项目(一)、服务器数据拉取和Material Design风格

零、Go项目的github地址:https://github.com/fantianwen/Go 一、前言:因为希望能能够整合现在安卓的围棋app中较好的东西和当下较为流行的App中常见的功能,于是,打算开始这个叫Go的项目。 初步希望实现的功能: 1、使用Material Design风格进行app界面的搭建; 2、具体实现模块: 1>用户中心; 2>新闻中心; 二、新闻中心的实现: 2.1、使用技术:Jsoup,tcpdump,wireshark,本来打算使用tcpdump和wireshark来进行sina体育客户端的数据包的抓取,然后分析出sina体育客户端和服务器端的交互接口。希望有时间能够学习下lunix下的抓包工具tcpdump命令。使用tcpdump分析数据接口失败之后,就使用...阅读全文

博文 2015-05-15 23:00:18 HNAer_RadAsm

Golang之双向认证

此篇文章主要介绍https用Golang生成证书和Golang实现https认证的过程,至于ssl/tls相关的知识点,我在文章末尾会附上我个人觉得对读者有用的文章。单向验证过程:客户点包含ca.crt,服务端包含server.key和server.crt;客户端:客户端生成一个随机数random-client,传到服务器端;服务端:服务器端接收消息之后,生成一个随机数random-server和包含公钥的证书,一起回馈给客户端;客户端:客户端收到的东西原封不动,加上premaster secret(通过random-client、random-server 经过一定算法生成的数据),再一次送给服务器端,这次传过去的东西是经过服务端的公钥进行加密后数据;服务端:服务端经过私钥(server....阅读全文

博文 2018-07-02 23:34:40 取个帅气的昵称华华

Go 语言 SMTP指令发邮件(实例)

简单邮件传输协议(SMTP)是一种基于文本的电子邮件传输协议,是在因特网中用于在邮件服务器之间交换邮件的协议。SMTP是应用层的服务,可以适应于各种网络系统。SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF(\r\n)。响应信息一般只有一行,由一个3位数的代码开始,后面可附上很简短的文字说明。 SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体为: (1)建立TCP连接。 (2)客户端向服务器发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令。(EHLO 是扩展指令,不同服务器有不同指令) (3)服务器端以OK作为响应,表示准备接收。 (4)客户端发送RCPT命令。 (5)服务器端表示是否愿意为收件人接收邮件。 (6)协商结束,发送邮件,用命令DA...阅读全文

go使用protobuf如何判断接收到的数据?

我是刚学go的小白,最近参考golang服务器写了一个通讯程序,golang作为服务器用tcp连接unity3d,传输消息用的是protobuf。但是目前遇到一个问题就是客户端发送消息过来(有可能是各种消息,角色移动,角色请求,角色死亡等)服务器这边如何判断具体应该是哪一个消息呢?我给消息加了消息头原本是想通过消息头判断的,但是才发现protobuf在反序列化的时候就必须指定类型了,例如: mp := &message.ConnetInf{} err := proto.Unmarshal(data, mp) 反序列化时必须指定mp是我发送的ConnetInf消息。但是目前问题是在我不确定mp是什么类型的时候该如何反序列化呢?不知有没有做过的大神给指点一两句。谢谢了T ...阅读全文

开源邮件代理服务Exim被爆RCE和DoS漏洞,建议赶紧升级!

影响范围 4.88和4.89 开源邮件传输代理Exim简介 Exim是由剑桥大学Philip Hazel开发的邮件传输代理,负责邮件的路由,转发和投递。它可运行在绝大多数的类Unix系统上,包括Solaris、AIX、Linux、macOS等。相比其他MTA,Exim配置更灵活,支持String Expansion技术,能执行诸如条件判断,字符转换等功能。 Exim漏洞提交至BugTracker 一名安全研究员发现并公开披露了流行互联网邮件信息传输代理Exim中的两个紧急漏洞,其中一个能导致远程攻击者在目标服务器上执行恶意代码。 最开始漏洞是由Phil Ponnock在黑五(11月25日)没有任何预告发布在这里的,提交到了该项目的BugTracker。 漏洞详情 第一个漏洞是使用后释放漏洞C...阅读全文

博文 2017-11-30 01:53:04 www.dbsec.cn

QQ空间已在生产环境中使用QUIC协议

QUIC(Quick UDP Internet Connections,发音’quick’)是Google于2013年发布的基于UDP的多路传输协议,它的主要目标是为了整合TCP协议的可靠性和UDP协议的速度和效率,以降低延迟,提高用户体验。 Google通过大规模的性能分析发现,“相对于TCP而言,QUIC的性能有了真正的进步”,这得益于QUIC的以下特性: 低延迟链接的建立,这对已建立的链接很有好处。在这种情况下,Google搜索页面的平均加载时间缩减了3%。 改进拥塞控制和丢包恢复机制,这在糟糕的网络环境中尤为重要。在这种情况下,Google搜索页面在“最慢的1%的连接”中节省了整整1秒的时间,并且观看基于QUIC的YouTube视频时会减少高达30%的数据重缓存。 据了解,QQ 空间...阅读全文

博文 2017-10-13 06:39:19 郭蕾

golangframework

当前基本完成封装的基本库 JSON ——泛型,协助处理 https://github.com/golangframework/JSON String ——该类是一个[] uft8char,以及常用方法的封装 https://github.com/golangframework/String Directory——公开用于通过目录和子目录进行创建、移动和枚举的静态方法,仿C#的简洁风格 https://github.com/golangframework/Directory Object——协助处理各种未知类型 File——提供用于创建、复制、删除、移动和打开单一文件的静态方法,仿C#的简易风格 https://github.com/golangframew...阅读全文

[上海]GO开发工程师招聘

### 我们是谁 [企业管家](http://www.71gj.com.cn)是上海融行信息技术有限公司旗下的企业服务一站式服务平台。 ![](https://ruby-china-files.b0.upaiyun.com/photo/2017/e9643c07-cd3b-4daa-8be5-89fc27e89aac.png!large) ![](https://ruby-china-files.b0.upaiyun.com/photo/2017/08853790-113d-4937-a4ac-5197a779eca9.png!large) 2016年完成了由险峰华兴,经纬中国和华兴华晟领投的B轮亿级资金规模的融资,公司资金充裕,发展势头强劲。 ### 招聘...阅读全文

go发送邮件

1.获取Go邮件库(自带发送不了) go get gopkg.in/gomail.v1 2.包含库 import ( "gopkg.in/gomail.v1" ) 3.例子 //info.From:发件地址或账号 //to: 收件地址 //body:邮件内容 //port:邮件服务器端口 //info.Host:邮件服务器地址 //info.Password:密码 func GoMail(to, body string) error { info, err := MailInfoGet() if err != nil { beego.Error("Get Mail Config Err:", err) return err } if info.Host == "" || info.Port ...阅读全文

博文 2016-09-19 14:00:01 idwtwt

关于推送,你可能忽略的那些事儿

推送是维持APP留存率最重要的方法之一,但是大多数APP开发者都没有正确意识到推送的意义,也没有建立起一套评估Push质量的方法。推送是一个典型的双刃剑,如果使用的好可以帮你提升留存率,可是使用不当,甚至滥用将会成为你APP的噩梦。但是不幸的是,我看到的大多是推送的不当使用。 1. 给用户一个允许推送的理由 之前看过一篇文章讲的很好,大概的意思是说你要任何事情的时候都请给一个需要的理由。作为APP开发者我们都知道,用户很少会反悔从前做过的设置。我举个简单的例子,如果用户在最初的时候禁止你访问他的通讯录,可能你就再也没有机会访问他的通讯录了。同理,如果用户最初的时候禁止你的推送消息,那么你可能就再也没有机会去为用户发送推送通知了。 所以在希望用户授予推送权限时,一定要给用户一个清...阅读全文

[GoLang]GO语言编写的简易TCP服务端、客户端

客户端程序: package main import ( "net" "os" "fmt" "io" ) //缓冲区大小 const BUFFSIZE = 1024 //定义消息缓冲区 var buff = make([]byte, BUFFSIZE) //链接处理 func handleConn(tcpConn *net.TCPConn, addr string) { if tcpConn == nil { //fmt.Println() return } for{ n, err := tcpConn.Read(buff) if err == io.EOF { fmt.Printf("远程链接:%s已经关闭!\n", tcpConn.RemoteAddr().String()) retur...阅读全文

博文 2014-10-09 16:00:05 u011229962

左耳朵耗子:Go语言,Docker和新技术

老实说,这些年来免费读了很多耗子的文章,受益颇多。近来他在「极客时间」开了专栏,继续在输出好文章,所以就想推荐下。上个月,作为 Go 语言的三位创始人之一,Unix 老牌黑客罗勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顾了一下 Go 语言的发展过程。其中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言。还提到了,中国程序员对 Go 语言的热爱完全超出了他们的想象,甚至他们都不敢相信是真的。这让我想起,我在 2015 年 5 月份拜访 Docker 公司在湾区的总部时,Docker 负责人也和我表达了相似的感叹:他们完全没有想到居然中国有那么多人喜欢 Docker,而且还有这么多人在为 D...阅读全文

博文 2017-12-24 02:31:07 u8i7s7K5bV

golang JWT的简单使用

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。 JWT和session有所不同,session需要在服务器端生成,服务器保存session,只返回给客户端sessionid,客户端下次请求时带上sessionid即可。因为session是储存在服务器中,有多台服务器时会出现一些麻烦,需要同步多台主机的信息,不然会出现在请求A服务器时能获取信息,但是请求B服务器身份信息无法通过。JWT能很好的解决这个问题,服务器端不用保存jwt,只需要保存加密用的secret,在用户登录时将jwt加密生成并发送给客户端,由客户端存储,以后客户端的请求带上,由服务器解析jwt并验证。这样服务...阅读全文

博文 2018-10-31 16:34:58 我的饭卡呢

Think2Go戈登营首期review

2013-09-14 Think2Go戈登营首期review Go语言在CDN下载系统中的应用 Go在微博数据分析中的应用 golang与高强度在线服务 Go语言在CDN下载系统中的应用 今天去参加了Go语言上海的线下活动,这里做个简单的review。只是个人理解,可能有误,拍砖轻点。 首先是谢大闪亮登场,为我们分享他用Go语言在盛大的CDN系统中的应用,大家鼓掌。 我觉得讲的主要内容上可以分两大块来看,一部分是从中心结点到IDC的文件分发过程,另一部分是用户请求到达之后的调度设计。 主要应用场景像什么游戏客户端的分发之类的。先说中心结点服务器到IDC服务器的分发过程。 大家知道,国内的网络环境各种奇葩,最远的距离不是城市到城市的物理距离,而是我用电信,你用联通,或者他是教育网等等。IDC机...阅读全文

Microservice架构模式简介

在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书《Building Microservices》。该书描述了如何按照Microservice架构模式设计及搭建一个具有良好扩展性并可持续开发的系统。除此之外,该书还将基于该模式的系统演化流程与Continuous Delivery等当前甚为流行的开发流程结合在了一起,使得Microservice架构模式看起来非常具有吸引力。基于这些原因,该架构模式迅速被业界所熟知,并在多个产品中被尝试着使用。这其中就包含了我们公司的产品vRA。 在这一年多的时间里,我们不但真正地体会到了Microservice所具有的一系列优点,也犯过一系列错误。因此在这篇文章里,我会对Microservice...阅读全文

博文 2016-01-05 11:38:11 loveis715

C++服务端面试准备(5)网络协议相关

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 由于博主不是计算机专业出身,个人能力有限,本文内容涉及到博主的知识盲区,在这领域不知道需要掌握多少,只是把自己看到的大概归纳一下,请见谅。也希望网友们可以指点指点,谢谢! 网络层次划分 TCP/IP 4层模型:应用层、传输层、网络层、网络接口层TCP/IP 5层模型:应用层、传输层、网络层、数据链路层、物理层OSI 7层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 物理层:发送高低电压即电信号 数据链路层:电信号分组,以太网协议,单位为帧 网络层:对子网间的数据包进行...阅读全文

博文 2020-04-10 21:32:41 DX3906

基于TCP套接字,通过Golang模拟HTTP请求(续)

HTTP报文的格式问题 接着昨天的写。昨天的文章有个不确定的地方,就是建立TCP连接之后,向服务器发送的数据,包括命令、头和主体的格式。这三个部分是如何分割的,我是参考了POSTMAN预览的格式和telnet发送的格式猜测的,原认为行直接是通过\n进行区分的,而头和主题是两个\n进行区分。这样发送也是能够正常解析的,今天去读了一下《HTTP权威指南》和Golangnet/http包,具体了解了下到底是如何区分的。 《HTTP权威指南》第三章3.2节,报文的组成部分当中提到: 每行都以一个由两个字符组成的行终止序列作为结束,其中包括一个回车符\r和一个换行符\n,这个终止序列可以写作CRLF。尽管HTTP规范中说明应该用CRLF来表示终止,但稳健的应用程序也应该接受单个换行符\n作为行的终止。...阅读全文

博文 2017-02-09 12:25:20 Bryce

golang revel下免声明对象动态接收json post 数据

写惯了node服务端API,换到静态类型语言很不爽,规则一大堆~ 要动态必需的!必须的!的! 这里注意几个包 json转换和解析用 github.com/bitly/go-simplejson go get github.com/bitly/go-simplejson body转换解析用 直接导入 strings io/ioutil POSTMAN提交数据 {"data":"yes","hotel":["caonima","gelebi"],"HP":10000000} 控制器action 数据POST接收 package controllers import ( "github.com/revel/revel" "io/ioutil" "strings" console "fmt" sim...阅读全文

博文 2014-12-18 08:00:01 诸葛囧明

使用容器,企业可以更快更好地赚钱

容器技术基于传统的容器虚拟化技术,采取了一种全新的应用打包理念,让整个云计算产业为之颤抖。它能够为开发人员提供几乎相同的开发、测试、预发布和生产环境。同时得益于容器为微服务提供的恰到好处的抽象,容器技术对传统大型软件的解耦也有一套优雅的解决方案。从云平台提供商的角度来看,容器技术简化了混合云的实现,而将负载的变化扔给更上层处理。去年以来,已经有许多云平台厂商将Docker集成到核心云服务上。 ### 托管服务提供商(HSP)——提高投资回报率(ROI) HSP在很多年前就已经认识到容器的好处,目前他们采用这项技术提高ROI。 与传统虚拟机相比,容器虚拟化允许HSP在相同的硬件上放置更多应用程序,对于他们的客户而言,也不存在性能退化,因为容器更轻量,分配但未使用的资源可以共享给其...阅读全文

百度招聘Golang工程师(北京)

工作职责: -负责提升百度整体服务器资源使用效率,持续优化业务迭代的资源成本 -关注业界前沿容量规划技术动态,负责超大规模系统的容量测算、建模及优化  -参与各类业务机房布局、 预算决算、资源规划、混部方案,提高资源投入产出比 -设计、开发完整的平台化解决方案,包括资源管理、容量自动测算、产品线自动压测、弹性伸缩等平台 -探索智能化的负载预测、冗余预留等技术和方向 职位要求: -逻辑思维清晰,具备良好的学习能力、沟通能力和团队合作精神 -计算机、自动化、数学、运筹学、电子信息工程、通信工程等相关专业本科及以上学历 -熟练掌握至少一门开发语言(Python/Go/C++/Java/PHP等),并且具备快速技术迁移能力 -对...阅读全文

golang微服务

避免一个模块故障影响整个程序。能够独立部署、运维、升级。 服务间通过api通讯。 假设上传服务集群起了多个实例,每个实例相同IP但不同端口,那样对外提供服务呢? 有两种方式: 方式1: 上传服务集群向服务注册/发现中心去注册这些对外服务ip+port,然后用户请求上传的时候通过api gw向服务注册/发现中心去请求服务列表,gw拿到服务列表后根据一定的策略(比如随机)返回给客户端,客户端再向具体的服务IP:port去请求上传。 方式2: 上传调度加入LB功能,API网关不直接去服务注册中心去请求服务列表,而是去上传调度去请求一个地址,这个地址是由上传调度根据LB算法返回一个服务IP:PORT,不用gw自己去选择。 api gw的作用: 可以将用户的请求协议(如http)转换为微服务内部的协议...阅读全文

博文 2019-06-19 11:02:59 勇Max

Go 实战丨微信公众号接入及用户消息处理

使用 Go 语言的 Web 框架 Gin 进行微信公众号接入,并实现对微信消息的接收以及回复处理。 同时借助 nginx 代理服务器对代理的端口号以及 URI 进行优化处理。 在文章末尾给出该 Demo 的项目地址。 目录 公众号接入 消息接收 消息回复 使用 ngxin 代理服务器 小结 公众号接入 这里使用微信公众平台提供的接口测试号用于开发使用,接口测试号申请。 公众号的接入主要有两个步骤,微信公众平台接入指南: 填写服务器配置 验证服务器地址的有效性 第一步需要配置服务器的 URL 地址,并且必须以 http:// 或 https:// 开头,分别支持 80 端口和 443 端口;还需配置一个 3 ~ 32 位字符的 Token,用于消息验证。 第二步用于验证消息来源的正确性,当第一...阅读全文

博文 2020-04-04 20:34:23 ColeLie

为什么公司要从Scala转到Go?

Jim Plush是网络安全服务提供商CrowdStrike的云工程高级总监。CrowdStrike由McAffee的前CTO George Kurtz及前副总裁Dimitri Alperovitch于2011年创建。Scala是CrowdStrike内部使用的主要语言。2011年,Jim主导了Scala的使用。在加入CrowdStrike之前,Jim就职的Gravity公司也是Scala重度用户。前段时间,他们将技术栈从Scala转向了Go。Jim Plush从技术总监的角度介绍了这种变化。随着业务增长,公司的工程师从5个增长到200多个。需要考虑的是,如何让code base便于维护,工程师可以轻松跨项目交流,新人能够快速上手。几年前,Jim曾遇到一个问题。当时产品中出现了一个会影响大量...阅读全文

博文 2016-08-10 14:00:01 abv123456789

Golang Package-database/sql

一、导入库 import ( "database/sql" _ "github.com/lib/pq" ) 二、连接DB func main() { db, err := sql.Open("postgres", "user=pqgotest dbname=pqgotest sslmode=verify-full") /*db, err := sql.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full")*/ if err != nil { log.Fatal(err) } defer db.Close() } sql.Open的第一个参数是driver名称,第二个参数是d...阅读全文

博文 2017-01-10 13:00:10 吃一堑消化不良

如何判断安卓设备的联网状态?

对于Android应用的开发,很多时候我们需要去判断Android设备的联网状态,判断之前首先我们需要做的就是获取设备当前状态,这个怎么实现呢? 其实安卓本身就给我们提供了一个判断当前网络的服务,具体代码如下: private ConnectivityManager connectivityManager; //用于判断是否有网络 connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); //获取当前网络的连接服务 NetworkInfo info = connectivityManager.g...阅读全文

go接收到消息如何根据消息头判断接收

消息使用的是protobuf。客户端有个拾取物品的消息,消息头为2001+消息体。另外还有个丢弃物品的消息,消息头为2002+消息体。服务器除了使用switch根据消息头判断该如何解析消息体之外有没有别的方法? 例如我客户端使用的是c#,写了一个字典委托,key值保存消息头,value值保存具体解析消息的方法。接收到服务器发送的消息之后只需要遍历这个字典匹配key值就好了。用switch的话感觉消息多了判断会很麻烦,代码也会很多。...阅读全文

状态变换 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「状态模式」如何在真实业务场景中使用。 「状态模式」比较简单,就是算法的选取取决于于自己的内部状态。相较于「策略模式」算法的选取由用户决策变成内部状态决策,「策略模式」是用户(客户端)选择具体的算法,「状态模式」只是通过内部不同的状态选择具体的算法。 什么是「状态模式」? 不同的算法按照统一的标准封装,根据不同的内部状态,决策使用何种算法 「状态模式」和「策略模式」的区别 策略模式:依靠客户决策 状态模式:依靠内部状态...阅读全文

Go代码打通HTTPs

TL;DR 手工创建CA证书链,手写代码打通HTTPs的两端 HTTPs最近是一个重要的话题,同时也是一个有点难懂的话题。所以网上有大量的HTTPs/TLS/SSL的教程。关于这些的原理,这里不做讲解,有兴趣的可以自行搜索。 本文介绍一个自己创建证书,并编写 Go 代码实现 client/server 两端的过程。从实践的角度帮助理解。 构建 CA 证书链 我们首先要创建 client/server 使用的证书。创建证书的方法有很多种:有不怕麻烦,直接通过 openssl创建的,有通过 cfssl 创建的。这里要介绍的是我认为最简单的一种:tls-gen tls-gen是一个用 Python 编写的、非常易用的工具。它定义了三种 profile。这里我们选择最简单的一种:一个根证书和一组证书...阅读全文

博文 2018-02-13 23:34:36 西北那个峰