gin通过go build -tags实现json包切换及库分析

 更新时间:2023年09月05日 14:56:18   作者:Memory  
这篇文章主要为大家介绍了gin通过go build -tags实现json包切换及库分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

gin的json库分析

github.com/gin-gonic/gin/internal/json包下,存在两个文件

一个是json.go,一个是jsoniter.go

json.go

// Copyright 2017 Bo-Yi Wu.  All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
// +build !jsoniter
package json
import "encoding/json"
var (
    // Marshal is exported by gin/json package.
    Marshal = json.Marshal
    // Unmarshal is exported by gin/json package.
    Unmarshal = json.Unmarshal
    // MarshalIndent is exported by gin/json package.
    MarshalIndent = json.MarshalIndent
    // NewDecoder is exported by gin/json package.
    NewDecoder = json.NewDecoder
    // NewEncoder is exported by gin/json package.
    NewEncoder = json.NewEncoder
)

jsoniter.go

// Copyright 2017 Bo-Yi Wu.  All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
// +build jsoniter
package json
import "github.com/json-iterator/go"
var (
    json = jsoniter.ConfigCompatibleWithStandardLibrary
    // Marshal is exported by gin/json package.
    Marshal = json.Marshal
    // Unmarshal is exported by gin/json package.
    Unmarshal = json.Unmarshal
    // MarshalIndent is exported by gin/json package.
    MarshalIndent = json.MarshalIndent
    // NewDecoder is exported by gin/json package.
    NewDecoder = json.NewDecoder
    // NewEncoder is exported by gin/json package.
    NewEncoder = json.NewEncoder
)

两个文件分别定义了不同json包提供的MarshalUnmarshal等方法,默认编译时,会采用官方的json库,当tags参数等于jsoniter时,则会采用jsoniter

go build -tags=jsoniter .

go build - tags

通过在代码中增加注释//+build xxx时,编译时传递对应的tags值,就会编译不同的文件。

  • 构建约束以一行+build开始的注释。在+build之后列出了一些条件,在这些条件成立时,该文件应包含在编译的包中;
  • 约束可以出现在任何源文件中,不限于go文件;
  • +build必须出现在package语句之前,+build注释之后应要有一个空行。

 参考 https://www.jb51.net/jiaoben/297334xjf.htm 

以上就是gin通过go build -tags实现json包切换及库分析的详细内容,更多关于gin切换json包的资料请关注脚本之家其它相关文章!

相关文章

  • Linux系统下Go语言开发环境搭建

    Linux系统下Go语言开发环境搭建

    这篇文章主要介绍了Linux系统下Go开发环境搭建,需要的朋友可以参考下
    2022-04-04
  • Go语言中如何实现并发

    Go语言中如何实现并发

    Go的并发机制通过协程和通道的简单性和高效性,使得编写并发代码变得相对容易,这种并发模型被广泛用于构建高性能的网络服务、并行处理任务和其他需要有效利用多核处理器的应用程序,这篇文章主要介绍了在Go中如何实现并发,需要的朋友可以参考下
    2023-09-09
  • golang flag包的使用教程

    golang flag包的使用教程

    golang 的 flag 包是用于处理命令行参数的工具包,我们可以基于这个包来开发自定义的命令行工具,下面小编就来为大家介绍一下flag包的具体使用吧
    2023-09-09
  • Go中init()执行顺序详解

    Go中init()执行顺序详解

    go允许定义多个init(),多个init()会涉及到执行先后的问题,本文将详细讲解Go中init()执行顺序,感兴趣的朋友一起看看吧
    2022-09-09
  • 如何go语言比较两个对象是否深度相同

    如何go语言比较两个对象是否深度相同

    这篇文章主要介绍了如何go语言比较两个对象是否深度相同,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 探索Golang Redis实现发布订阅功能实例

    探索Golang Redis实现发布订阅功能实例

    这篇文章主要介绍了Golang Redis发布订阅功能实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go检查结构体中是否存在某个字段及创建结构体切片或映射

    Go检查结构体中是否存在某个字段及创建结构体切片或映射

    这篇文章主要为大家介绍了Go检查结构体中是否存在某个字段及创建结构体切片或映射实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • golang使用mapstructure解析json

    golang使用mapstructure解析json

    mapstructure 是一个 Go 库,用于将通用映射值解码为结构,这篇文章主要来和大家介绍一下golang如何使用mapstructure解析json,需要的可以参考下
    2023-12-12
  • golang 使用 viper 读取自定义配置文件

    golang 使用 viper 读取自定义配置文件

    这篇文章主要介绍了golang 使用 viper 读取自定义配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Go语言二维数组的传参方式

    Go语言二维数组的传参方式

    这篇文章主要介绍了Go语言二维数组的传参方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论