微信支付(退款结果通知)golang AES-256-ECB解密

处理微信支付退款结果通知时,需要对返回数据进行AES-256-ECB解密,golang标准库未支持AES ECB加解密,特此记录。 一、解密方式 解密步骤如下 对加密串A做base64解码,得到加密串B 对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置 ) 用key*对加密串B做AES-256-ECB解密 二、Golang 示例代码 package main import ( "encodi...阅读全文

2017-12-02 18:59 nanjishidu
阅读:6355 评论:1

Golang 介绍及踩坑系列之二

Golang 介绍及踩坑系列之一 ( https://zhuanlan.zhihu.com/p/29545675 ) 编译篇 一直以来,我认为Golang非常爱憎分明。 它避免了java c/c++ 大括号是放在行尾还是另起一行的死辩,坦然的提供了gofmt,让所有人闭嘴安静的写代码。 它根除了二进制发布的可能,你所有的vendor必须有源代码,然后一起编译。甚至缺省支持了一个工具叫做go get,这货直接跟github,bitbucket之类的repo hoster交流,把代码从网上拿...阅读全文

2017-10-06 17:40:43 Chang
阅读:2310 评论:0

Golang中重新open 已经被close的chan管道

最近忽发奇想,在Golang中怎么把,已经关闭的管道再次打开。这样就避免了,每次都要make一个新的chan,节省内存申请和GC的时间,查看go的源代码,经过简单地摸索后,实现了,示例代码如下。 func TestUnsafe ( t * testing . T ) { c1 = make ( chan struct {}, 10 ) c1 <- struct {}{} <- c1 close ( c1 ) p := ( * unsafe . Pointer )( unsafe . Pointe...阅读全文

2017-01-05 09:54:17 GoWKH
阅读:2223 评论:0

零拷贝读取文件成go对象

我们观察到从文件读取到go对象,需要两次拷贝: 从文件拷贝到内存,成为[]byte 从[]byte,按照格式进行读取,拷贝到go对象上 怎么样优化这个读取速度呢? 利用mmap,把文件直接映射到内存,go允许把这片内存已经转化成[]byte来使用 直接在这个[]byte上“展开”go对象 所谓”展开“就是一个reinterpret cast,对一个指针的类型重新解读。 var bytes = []byte{ 16, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0...阅读全文

2017-12-06 21:04:46 taowen
阅读:3340 评论:0

go-kit 上手之example stringsvc3 通过代理实现分布式处理

使用的包 创建到特定地址代理服务器的client 定义使用了代理机制的新服务 根据用户输入的代理服务器地址生成对应的代理服务器中间件 main 运行结果 代理中间件 stringsvc3没有完全按照官网中stringsvc3的写法,而是在stringsvc2的基础上增加了proxy.go 主要就是给uppercase增加了代理中间件,主要步骤分三步: 1)向特定地址代理服务器发送请求的client的编码和解码函数。 2)生成向特定地址代理服务器发送请求的client。 3)用client配合lo...阅读全文

2017年10月30日 08:52:16 KingEasternSun
阅读:1161 评论:0

VS code golang 开发环境搭建

安装go (1)下载go安装程序 下载地址:https://golang.org/dl/ (墙内下载地址http://www.golangtc.com/download),如果是您的系统是windows32 位系统,请选择go1.6.2.windows-386.msi即可,如果想尝鲜可以安装go1.7beta2,1.7正式版要在8月1号发布 (2)下载后直接双击msi文件安装,默认安装在c:\go (3)安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 C:\Go\...阅读全文

2017-12-14 01:03:06 乞丐88
阅读:1139 评论:0

Golang 中的微服务 - 第一部分

## 介绍 Golang 中的微服务系列总计十部分,预计每周更新。本系列的解决方案采用了 protobuf 和 gRPC 作为底层传输协议。为什么采用这两个技术呢?我花了相当长的时间,才想出并决定采用这个方案。这个方案对开发者来说,非常清晰而简明。我也很乐意把自己在搭建、测试和部署端到端的微服务过程中的心得,分享给想接触这块的朋友们。 在这个教程中,我们将先接触几个基础的概念和术语,然后开始搭建第一个简单的微服务模型。 本系列中,我们将会创建以下服务: - 委托 - 存...阅读全文

2017-12-26 22:20:00 polaris
阅读:28373 评论:15

仅需简单 5 步,给你的 Golang 程序添加 GUI (使用 Electron )

创建一个 Golang app 是一件简单又轻松的事情,但是有时候你想给你的应用锦上添花:创建一个 GUI! 在本篇文章中,我将通过使用 astilectron 工具中的 bootstrap 以及 bundler 给一个简单的 Golang 程序添加 GUI。 我们的带有 GUI 的 Golang app 能够打开一个文件夹并且展示其中的内容。 你可以在这里找到完成后的 [代码](https://github.com/asticode/go-astilectron-demo) ...阅读全文

2017-12-27 21:44:33 polaris
阅读:44508 评论:3

golang channel 总结

1、未初始化的channel读,阻塞 package main import ( "fmt" "time" ) func main() { var ch chan int go check(ch) fmt.Println("main runtime end") time.Sleep(time.Second * 1000) } func check(ch chan int) { select { case i := <-ch: fmt.Println("read ch data=", i) } f...阅读全文

阅读:1187 评论:0

golang 通过 qq 开通smtp 发送邮件的 全步骤(tls +ssl)

首先 打开邮件 2 找到 》设置 》账户 选项卡 这里会根据你的账号安全添加密保 ,添加密保 后 会给你 一个 密钥 (2)验证密保 (3)获取授权码 这个授权码 一会会用到 提前须知 :ssl, tls, 是不同的协议 首先 我们用starttls 协议 写 一个 简单的 例子 1 ============= = 1 start ===================== package main import ( "net/smtp" "strings" "fmt" ) func SendT...阅读全文

2018-01-15 15:33:06 lwtcumt
阅读:3604 评论:0

udp编程的那些事与golang udp的实践

udp编程的那些事与golang udp的实践 tcp/ip大协议中,tcp编程大家应该比较熟,应用的场景也很多,但是udp在现实中,应用也不少,而在大部分博文中,都很少对udp的编程进行研究,最近研究了一下udp编程,正好做个记录。 sheepbao 2017.06.15 tcp Vs udp tcp和udp都是著名的传输协议,他们都是基于ip协议,都在OSI模型中传输层。tcp我们都很清楚,它提供了可靠的数据传输,而udp我们也知道,它不提供数据传输的可靠性,只是尽力传输。 他们的特性决定了...阅读全文

2018-01-16 13:31:21 sheepbao
阅读:2195 评论:2

TCP RTO计算方法以及go实现验证

TCP RTO计算方法和思考以及go实现验证 概述 最近在研究tcp的重传机制,tcp的重传大概有三种,超时重传(rto)、快速重传(fack)、早期重传(er)。今天讲讲rto,并用go实现其算法,探究一下。主要参考tcp/ip-guid 基本概念 RTO即超时重传时间 RTT数据包往返时间 平均偏差是指单项测定值与平均值的偏差(取绝对值)之和,除以测定次数。 RTO计算算法 RTO的计算依赖于RTT值,或者说一系列RTT值。rto=f(rtt) 在Linux中,最开始实现的是一个比较简单的经...阅读全文

2018-01-16 13:42 sheepbao.github 等
阅读:2086 评论:1

gf框架之grpool - 高性能的goroutine池

Go语言中的goroutine虽然相对于系统线程来说比较轻量级,但是在高并发量下的goroutine频繁创建和销毁对于性能损耗以及GC来说压力也不小。充分将goroutine复用,减少goroutine的创建/销毁的性能损耗,这便是grpool对goroutine进行池化封装的目的。例如,针对于100W个执行任务,使用goroutine的话需要不停创建并销毁100W个goroutine,而使用grpool也许底层只需要几千个goroutine便能充分复用地执行完成所有任务。经测试,在高并发下...阅读全文

阅读:3469 评论:2

golang web开发获取get、post、cookie参数

在成熟的语言java、python、php要获取这些参数应该来讲都非常简单,过较新的语言golang用获取这些个参数还是费了不少劲,特此记录一下。 golang版本:1.3.1在贴代码之前如果能先理解一下golang http.request的三个属性Form、PostForm、MultipartForm应该能较好的理解代码,下面摘录一下。 Form、PostForm、MultipartForm说明Form、PostForm、MultipartForm说明 简要说明一下 Form:存储了post...阅读全文

2018-01-16 11:23 xiaoleiel
阅读:1595 评论:0

golang---信号signal

golang中os/signal包的使用 chenbaoke · 2015-06-17 20:03:59 · 2748 次点击 · 预计阅读时间 1 分钟 · 不到1分钟之前 开始浏览 这是一个创建于 2015-06-17 20:03:59 的文章,其中的信息可能已经有所发展或是发生改变。 os/signal包实现对信号的处理 golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号;一个是 stop方法用来取消监听。 func Notify(...阅读全文

阅读:1615 评论:0

gf框架之gvalid - 强大灵活的数据校验/表单校验模块

gf提供了非常强大易用的数据校验功能,通过gvalid包提供,封装了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验等特性。由于gf是模块化、低耦合设计,gvalid包也可以在项目中单独引入使用。 使用方式: ```go import "gitee.com/johng/gf/g/util/gvalid" ``` ### 校验规则 40种常用的校验规则: required 格式:req...阅读全文

阅读:3551 评论:0

Go 中的位运算

![cover](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-bits/cover.png) 在以前内存和处理能力(CPU)都是非常昂贵的,于是直接在位上编程就成为了处理信息的首选方式(在有些情况下也是唯一的方式)。如今,直接对位进行操作在底层系统、图像处理和密码学等领域还是至关重要的。 在 Go 语言中支持以下几种操作位的方式: ``` & 位与 | 位或 ^ ...阅读全文

2018-01-28 11:24:25 saberuster
阅读:5450 评论:0

golang Endian字节序

golang 字节序 简述 最近看TCP通信发现字节序,对此不太了解,故记录下来。 所谓字节序就是字符顺序。在查看资料常用的有2类排序方式: Big-Endian 高位字节放在内存的低地址端,低位字节放在内存的高地址端。 Little-Endian 低位字节放在内存的低地址段,高位字节放在内存的高地址端。 例如 十进制数255用二进制表示为1111 1111,十进制数256用二进制表示则为1 0000 0000那么这个1存放的位置是在前还是后,就是 Big-Endian 和 ittle-Endi...阅读全文

2018-01-31 16:33:03 johnL
阅读:2256 评论:0

Golang 中 defer 的五个坑 - 第三部分

> 译注:全文总共有四篇,本文为同系列文章的第三篇 - [第一部分](https://studygolang.com/articles/12061) - [第二部分](https://studygolang.com/articles/12136) 本文将侧重于讲解使用 defer 的一些技巧 如果你对 defer 的基本操作还没有清晰的认识,请先阅读这篇 [文章](https://blog.learngoprogramming.com/golang-defer-simplif...阅读全文

2018-02-01 10:05:25 yujiahaol68
阅读:8915 评论:0