Browsed by
分类:Go包(标准库)

Go的标准库包以及第三方包相关学习使用

【译】子测试和子基准测试的使用

【译】子测试和子基准测试的使用

介绍 Go 1.7,testing 包在 T 和 B 类型上引入了一个 Run 方法,允许创建子测试和子基准测试。子测试和子基准测试的引入可以更好地处理故障(failures),细化控制从命令行运行的测试,并行控制,并且经常会使代码更简单、更易于维护。 Table-driven 测试 在详细介绍之前,首先讨论在 Go 中编写测试的常用方法。 一系列相关验证可以通过循环遍历一系列测试用例来实现: 通常称为 table-driven(表格驱动) 测试,相比每次测试重复相同代码,减少了重复代码的数量,并且可以直接添加更多的测试用例。 Table-driven 基准测试 在 Go 1.7 之前,不可能使用相同的 table-driven 方法进行基准测试。 基准测试对整个函数的性能进行测试,因此迭代基准测试只是将它们整体作为一个基准测试。 常见的解决方法是定义单独的顶级基准,每个基准用不同的参数调…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (1 人打了分, 平均分:5.00,总分:5)
Loading...
标准库 expvar 实战

标准库 expvar 实战

Go 标准库有一个 expvar 包。 该软件包可以通过 JSON 格式的 HTTP API 公开您的应用程序和 Go 运行时的指标。 我认为这个软件包对于每个人 gopher 来说都是有用的。 但是,来自 godoc.org 的数据表明,没有多少人知道这个包。截止目前(2017-6-18),该包被公开的项目 import 2207 次,相比较而言,连 image 包被 import 3491 次之多。这篇文章,我想展示 expvar 包的工作原理,以及它的使用。 包简介 包 expvar 为公共变量提供了一个标准化的接口,如服务器中的操作计数器。它以 JSON 格式通过 /debug/vars 接口以 HTTP 的方式公开这些公共变量。 设置或修改这些公共变量的操作是原子的。 除了为程序增加 HTTP handler,此包还注册以下变量: 导入该包有时只是为注册其 HTTP handle…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
Go中的JSON

Go中的JSON

用过PHP的人都知道,PHP处理JSON数据那是相当方便,json_encode和json_decode两个函数搞定一切。那么在Go中该怎么处理JSON呢? 一、encoding/json标准库 学习 json 库应该先了解 Go 中的 struct tag、reflect等知识。 1、概述 json包实现了json对象的编解码,参见RFC 4627。Json对象和go类型的映射关系请参见Marshal和Unmarshal函数的文档。 参见”JSON and Go”获取本包的一个介绍:http://golang.org/doc/articles/json_and_go.html 这是官方的一篇博文。 2、核心函数和类型 对于函数和类型,我们关注经常使用的。 1)Marshal 和 Unmarshal 这两个是最常使用的函数,也就是 json 对象的编解码。这两个函数…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
标准库— 操作源码之收集go包信息:go/build

标准库— 操作源码之收集go包信息:go/build

在golang标准库中,有那么一类包,它们用于处理go项目目录结构、源码、语法、基本操作等。一般程序中可能用不到这些包,但在go工具链源码中用到了,之所以学习这些标准库,是为了更好的看go工具链的源码。首先我们来看收集go包信息的库:go/build 一、build包概述 该包文档中首先介绍了Go Path。如果对该部分还不清楚,可以看下文档的说明;或者官方其他文档;或者看 Go项目的目录结构。 如果你看过go源码,应该见到过类似这样的包注释:+build ignore。这是编译约束条件(Build Constraints),可以理解为条件编译。关于这部分的更多内容,稍后详细介绍。 二、类型和函数 1、ToolDir变量 该变量的值是go工具链的路径。6g/6l之类的工具,就在这个路径下 2、ArchChar函数 获得架构的字符表示。在之前的文章中介绍过。比如:x86 32bit用8表示;…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
标准库—命令行参数解析flag

标准库—命令行参数解析flag

在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。如果命令行参数纯粹自己写代码解析,对于比较复杂的,还是挺费劲的。在go标准库中提供了一个包:flag,方便进行命令行解析。 注:区分几个概念 1)命令行参数(或参数):是指运行程序提供的参数 2)已定义命令行参数:是指程序中通过flag.Xxx等这种形式定义了的参数 3)非flag(non-flag)命令行参数(或保留的命令行参数):后文解释 一、flag包概述 flag包实现了命令行参数的解析。 定义flags有两种方式: 1)flag.Xxx(),其中Xxx可以是Int、String等;返回一个相应类型的指针,如: 2)flag.XxxVar(),将flag绑定到一个变量上,如: 另外,还可以创建自定义flag,只要实现flag.Value接口即可(要…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
Go加密解密之AES

Go加密解密之AES

一、AES简介 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,这个标准用来替代原先的DES。AES加密数据块分组长度必须为128bit,密钥长度可以是128bit、192bit、256bit中的任意一个。 AES也是对称加密算法。关于该算法的更多信息可以参考 http://baike.baidu.com/view/2310288.htm 二、Go AES加密解密 学会了DES加密后,AES加密相当简单。除了第一步,将crypto/des包换为crypto/aes外,其他几乎一样。当然,需要注意的是密钥长度和iv的长度。 DES中blocksize是8byte,AES中则是16byte(128bit)。 AES包中,使用函数func NewCipher(key []byte) (cipher.Block, error)…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
Go加密解密之DES

Go加密解密之DES

接着RSA加密解密,我们继续来看看DES的加密解密 一、DES简介 DES(Data Encryption Standard)是对称加密算法,也就是加密和解密用相同的密钥。其入口参数有三个:key、data、mode。key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。 DES加密,涉及到加密模式和填充方式,所以,和其他语言加解密时,应该约定好加密模式和填充方式。(模式定义了Cipher如何应用…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
GO加密解密RSA番外篇:生成RSA密钥

GO加密解密RSA番外篇:生成RSA密钥

在《Go加密解密之RSA》中,说到了RSA密钥的生成问题,例子中的密钥,是通过openssl生成的。其实,通过那篇文章,可以很容易的反向,用Go生成openssl那样的密钥保存在文件中。该番外篇就是做这事。 一、加解密流程 首先回顾一下上篇文章加解密流程: 1、读取密钥(可以写死在一个变量中保存,也可以从一个外部文件读取) 2、通过encoding/pem中的Decode函数解析到block类型中 3、通过crypto/x509中相应的Parse方法得到密钥(即crypto/rsa包中的PrivateKey和PublicKey) 根据这个流程,我们可以很容易的反过来生成密钥,保存到文件中。 二、生成密钥并编码保存到文件中 首先,我们需要生成密钥,在crypto/rsa包中有一个函数: func GenerateKey(random io.Reader, bits int) (priv *P…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
Go加密解密之RSA

Go加密解密之RSA

安全总是很重要的,各个语言对于通用的加密算法都会有实现。前段时间,用Go实现了RSA和DES的加密解密,在这分享一下。(对于RSA和DES加密算法本身,请查阅相关资料) 在PHP中,很多功能经常是一个函数解决;而Go中的却不是。本文会通过PHP加密,Go解密;Go加密,PHP解密来学习Go的RSA和DES相关的API。 该文讨论Go RSA加密解密。所有操作在linux下完成。 一、概要 这是一个非对称加密算法,一般通过公钥加密,私钥解密。 在加解密过程中,使用openssl生产密钥。执行如下操作: 1)创建私钥: openssl genrsa -out private.pem 1024 //密钥长度,1024觉得不够安全的话可以用2048,但是代价也相应增大 2)创建公钥: openssl rsa -in private.pem -pubout -out public.pem 这样便生产…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...
标准库—XML处理(一)

标准库—XML处理(一)

在JSON还未像现在这么广泛使用时,XML的使用相当广泛。XML作为一种数据交换和信息传递的格式,使用还是很广泛的,现在很多开放平台接口,基本会支持XML格式。Go语言中提供了处理XML的标准库。下面我们一起来学习它。 一、encoding/xml包概述 该包实现了一个简单的XML 1.0 解析器(支持XML命名空间) 二、类型和函数 在看类型和函数之前,先看一下变量和常量 Header常量:由于Marshal生成的xml并不会生成XML标准头部,所以,定义了一个标准头常量 HTMLAutoClose变量:一些应该自动闭合的HTML标签。很明显,这是用来处理html的。这样的标签如:br、hr等 HTMLEntity变量:标准HTML字符实体的映射转换。(实体名=>实体编号) 可见,两个变量都是跟HTML相关的,之后会用到。 1、函数 func Escape(w io.Writer,…

阅读全文 阅读全文

1 Star2 Stars3 Stars4 Stars5 Stars (还没有人评分,赶紧评一下)
Loading...