本文目录一览:

golang x509的Certificate.Verify函数

周末在家无趣,研究了一个golang里面的Certificate.Verify函数。

golang的官方定义在这里:

函数原型声明如下:

func (c Certificate) Verify(opts VerifyOptions) (chains [][] Certificate, err error)

其中:

这个函数的功能是:

Verify attempts to verify c by building one or more chains from c to a certificate in opts.Roots, using certificates in opts.Intermediates if needed. If successful, it returns one or more chains where the first element of the chain is c and the last element is from opts.Roots.

If opts.Roots is nil and system roots are unavailable the returned error will be of type SystemRootsError.

解释一下就是:

举一个例子:

假设存在证书链签出关系:C1 - C2 - C3 - C4,即C1签出C2,C2签出C3,C3签出C4;现在使用函数:

我们根据Intermediates和Roots的值不同,比较输出结果:

Golang解析json的特殊情况处理

Go解析json遇到了大数字、不定格式等特殊情况,在此做了一个整理。

选择哪个要视输入而定。

json.Unmarshal 操作对象是一个 []byte ,也就意味着被处理的JSON要全部加载到内存。如果有一个加载完的JSON使用 json.Unmarshal 会快一些。

json.Decoder 操作的是一个 stream ,或者其他实现了 io.Reader 接口的类型。意味着可以在接收或传输的同时对其进行解析。当处理一组较大数据时无需重新copy整个JSON到内存中。

最好的选择办法如下:

默认情况下,go对json解析过程中遇到的数字都会当做float64处理。如果数字过大会有精度丢失。可以使用json.Number来处理。

输出结果:

使用 json.Decoder 只能操作 io.Reader 类型的JSON数据。

有时候遇到字段不定的JSON,需要一边判断一边解析。如:

可以先统一解组到interface{} 然后判断关键字段再进行后续处理。

结果

使用RawMessage便于分步Unmarshal

原文链接

golang生成JSON及解析JSON

一、JSON解析到结构体

在介绍这部分之前先简要介绍一下Json语法

JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。

数据在名称/值对中

数据由逗号分隔

大括号保存对象

中括号保存数组

1.JSON名称/值对

2.JSON值

可以是:

JSON数据

JSON 数字可以是整型或者浮点型

JSON对象

JSON 对象在大括号({})中书写:

对象可以包含多个名称/值对:

JSON数组

JSON 数组在中括号中书写:

数组可包含多个对象:

JSON布尔值

二、JSON转map

输出结果:

三、生成JSON

本文来自php中文网的 golang教程 栏目: