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

JSON 序列化中的转义和 Unicode 编码

本文比较完整地整理一下 JSON 编码中的转义,以及 JSON 对 Unicode 编码的处理。 其实这是我上一篇文章的姊妹篇。在研究 Unicode 颜文字的时候,由于我们的数据传输是通过 JSON 串来完成的,在对颜文字进行转码传输的过程中,也发现了一个问题。解决问题之后,便有了本总结文。 JSON 中的普通转义字符 个人认为,JSON 是目前针对程序员而言可读性(readability)最佳的数据传输格式之一,并且 JSON 完整地考虑到了数据传输中的转义,避免出现各种注入风险。当对 JSON 进行序列化操作时(Go 中称为 marshal),根据 JSON 标准的说明,需要对字符串中的以下字符进行转义: 符号 名称 转义后的字符串 " 双引号 \" / 斜杠 \/ \ 反斜杠 \\ ...阅读全文

golang json解码的坑

go语言中有个大坑,那就json反序列化的坑。下面的代码给出示例和解决办法: package main import ( "bytes" "log" "time" "github.com/json-iterator/go" ) type Info struct { Id int } func Log(format string, args ...interface{}) { log.Printf(format+"\n", args...) } func main() { log.SetFlags(log.Ldate | log.Lshortfile) // m := make(map[string]interface{}) i := Info{ Id: int(time.Now().Unix...阅读全文

博文 2019-06-08 15:32:39 golang推广大使

golang结构体json序列化时,如何自定义时间格式

最近开发一个公司项目,发现Go语言结构体Json转换时,存在时间格式不一样问题。在网上找了很久也没有找到一个很好的方案。即结构体序列化后的格式是`1993-01-01T20:08:23.000000028+08:00`。但为了兼容公司以往的项目,希望沿用`1993-01-01 20:08:23`这种格式。网上找到了下面的代码,可以解决大部分的问题。 ```go import "time" const ( DateFormat = "2006-01-02" TimeFormat = "2006-01-02 15:04:05" ) type Time time.Time func Now() Time { return Time(time.Now()) } func (t *Time) Unma...阅读全文

博文 2018-04-28 19:10:06 liamylian

大幅提升 golang 写日志序列化性能实践

线上服务,需要记录日志量比较大,便于排查问题,同时,线上要求所有日志需要经过rsyslog 灌到kafka 中去,我们日志需要按规定格式序列化。我们使用的log库是 "github.com/Sirupsen/logrus"。 那么问题来了,golang 的序列化性能真的是一言难尽。 从网上资料来看,Protocol Buffers 性能好于json, 而使用json 的话,有个很经典的性能对比图, 具体数据不太重要,结论就是 官方的json 最差,滴滴开源的json 库大致是目前市面最好。然后我们就列出了几个方案。 第一个方案,使用monkey patch ,替换到系统的encoding/json。 第二个方案是直接在log 模块中直接重写json formater 。由于第一种方式会导致调...阅读全文

博文 2018-03-27 23:33:05 caucy

msgpack在java和go中序列化的区别

结论: 对象(结构体)在不同语言环境下,使用msgpack序列化结果有不同 Go结构体,序列化后类似map java,类似Array 目前这个请客导致Golang的server 和 java的client 无法简单实用统一的对象(结构体)来进行通讯 比如Go server端定义: type UserStruct struct { Name string ID int32 } java 的客户端定义 public class UserStruct { public String Name; public int ID; } 不知道有没有方法能统一这2种编码方...阅读全文

博文 2015-05-12 20:00:05 咖啡伴侣

使用golang flag 反序列化自定义的字符串

引用部分: import ( "bufio" "flag" "log" "strings") 自定义字符串: var myString = "add -a=123 -b=456" func main(){ var a,b int var add = flag.NewFlagSet("add", flag.ContinueOnError) add.IntVar(&a,"a",0,"value a") add.IntVar(&b,"b",1,"value b") cmd := strings.Fields(myString) add.Parse(cmd[1:]) log.Println(a+b) } 是不是很简...阅读全文

博文 2014-12-23 13:00:03 ywzjackal

Golang 集成 Protobuf 及 vscode 配置

在存储相对复杂的结构体时 protobuf 比 json 更高效,而且方便后期字段扩展。 我们可以将数据用 protobuf 序列化后存入 mysql 或 redis 中 一、安装 Protobuf 拉取项目 $ go get -d -u github.com/golang/protobuf/protoc-gen-go 切换到 release 版本 $ git -C "$(go env GOPATH)"/src/github.com/golang/protobuf checkout v1.2.0 注意: 如果不指定版本,会使用 master 分支,而 dep 等包管理工具,会优先拉取 release 的版本,导致编译出的 protoc-gen-go 与 vendor 里的源码版本不一致,最终...阅读全文

博文 2019-02-12 17:34:45 UULU

golang(tao框架)

客户端:package mainimport ("context""errors""fmt""net""time""github.com/leesper/holmes""github.com/leesper/tao""github.com/leesper/tao/examples/echo")//模拟信息的结构体type SimulatorMessage struct {Message []byte}var (ErrorNilData error = errors.New("Nil data")simulatorMessage SimulatorMessage)//初始化方法func init() {simulatorData := []byte{0x40, 0x40, 0x40, 0x42...阅读全文

博文 2017-06-20 07:07:44 Robin_272e

Java 工程师成神之路 | 2019正式版

一、基础篇 01.面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala) → 值传递 值传递、引用传递 为什么说 Java 中只有值传递 → 封装、继承、多态 什么是多态、方法重写与重载 Java 的继承与实现 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域、 02.Java 基础知识 → 基本数据类型 7 种基本数据类型:整型、浮点型、布尔型、字符型 整型中 byte、short、int、long 的取值范围 什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额? → 自动拆装箱 什么是...阅读全文

博文 2019-02-18 16:20:58 a1127889067

vue教程推荐

vue 2.x系列在线交互式教程: ## vue教程 [vue](http://xc.hubwiz.com/course/592ee9b2b343f27b0ae1ba99)教程全面系统地讲解最新的前端框架Vue.js 2.x,内容涵盖响应式计算机制、指令和组件、动画效果等诸多方面,教程深入浅出,即适合没有Vue.js开发基础的前端初学者学习,也适合具备一定基础的工程师深入学习提高。 ## vuex教程 [vuex](http://xc.hubwiz.com/course/597d463fff52d0da7e3e397a)教程全面系统地讲解最新的前端框架Vuex 2.x,内容涵盖state/mutation等核心概念、状态管理的工作原理、Vuex实践应用等诸多方面,...阅读全文

Logrus源码阅读(2)--logrus生命周期

上一篇介绍logrus的基本用法, 本篇文章介绍logrus的整个生命周期 func main() { log.Info("hello logrus") } 从上面这个简单的例子, 追踪logrus的整个生命周期 初始化 // exported.go:L108 func Info(args ...interface{}) { std.Info(args...) } Info函数的参数是一个可变参数, 接收任意类型的参数 // exported.go:L11 var ( // std is the name of the standard logger in stdlib `log` std = New() ) func StandardLogger() *Logger { return st...阅读全文

博文 2019-10-09 22:32:44 aside section ._1OhGeD

ProtoBuf 懒人插件

插件由来 之前在学习GRPC 微服务开发时,学习到了ProtoBuf 这个序列化协议,但是ProtoBuf 编译的确实麻烦,于是笔者闲着无聊就自己写了个插件,可以 快捷编译ProtoBuf 文件,1.0.0 中只支持 GRPC go语言的生成;1.0.1 版本,添加GUI界面 ,并支持了多语言的生成。 插件下载 1.0.0版 1.0.1版 使用 1,前提: proto工具下载 1,下载idl代码生成工具 https://repo1.maven.org/maven2/com/google/protobuf/protoc/ protoc放在环境变量的路径中 2,下载生成go代码插件 go get-u github.com/golang/protobuf/protoc-gen-go 3.grpc包...阅读全文

博文 2018-07-25 17:35:06 litesky

GO语言的进阶之路-Golang高级数据结构定义

GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解,但是说起高级点的数据类型,可能我们还是不太清楚,那么今天就跟着我脚步一起学习一下这些高级数据类型数据吧。相信有部分人可能学习过Python,那么我这篇博客基本上不用看了,因为对你来说会觉得so easy。因为太多的相似之处了,只是写法不同。本章主要介绍数组(array),切片(scice),字典(map),结构体(struct)等等。 一.数组 有可能你学习过shell或是python,其实从输出的角度上来说,两者区别不大,但是Golang的数组那是别有一番风味啊,首先在学习数组之前,你要了解数...阅读全文

博文 2017-07-01 10:00:16 yinzhengjie

tech| 再探 grpc

date: 2019-04-25 22:16:01 title: tech| 再探 grpc 折腾 grpc 过几次, 都没有大规模的用起来, 熟悉程度多停留在官网的 helloworld 上, 对原理的理解不够深入, 所以经常会卡住. grpc| python 实战 grpc 这里有介绍过我 卡住 的点, 按照官网的 quick start 文档: 使用 php: 配置 PHP 的环境麻烦, 尤其 grpc/grpc 代码库编译出 grpc_php_plugin 这一步 使用 go: 安装 golang 包, 经常 撞墙(go get 失败) 最后 偷懒 使用 python 跑了一遍, 最大的收获是 grpc 除了 单向请求, 还有 双向通信(stream, 流式通信), 把环境的问题绕过...阅读全文

博文 2019-04-30 16:34:44 daydaygo

Golang公链开发003-数据持久化存储

目录 区块序列化 BoltDB数据库使用 通过BoltDB存储区块 区块链基于BoltDB存储区块 遍历区块链区块信息 通过迭代器遍历区块信息 ##一.区块序列化 本章节讨论如何将区块对象序列化,以便存储至数据库中。 1.序列化概念 互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型。在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象--这两个功能就是序列化和反序列化。一般而言,TCP/IP协议的应用层对应与OSI七层协议模型的应用层...阅读全文

博文 2018-07-25 15:35:56 暗黑魔君

golang god

package main import ( "bytes" "encoding/gob" "log" ) func main() { //知识背景 序列化 //golang可以通过json或gob来序列化struct对象,虽然json的序列化更为通用,但利用gob编码可以实现json所不能支持的struct的方法序列化,利用gob包序列化struct保存到本地也十分简单 //gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。 //rpc remote 场景 var str string = "xiaochuan" e, err := Encode(str) if err != n...阅读全文

博文 2018-12-24 15:51:17 stvenyin

Go编程技巧--io.Reader/Writer

Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。 总览 围绕io.Reader/Writer,有几个常用的实现: net.Conn, os.Stdin, os.File: 网络、标准输入输出、文件的流读取 strings.Reader: 把字符串抽象成Reader bytes.Reader: 把[]byte抽象成Reader bytes.Buffer: 把[]byte抽象成Reader和Writer bufio.Reader/Writer: 抽象成带缓冲的流读取(比如按行读写) 这些实现...阅读全文

博文 2018-02-24 16:34:37 P_Chou水冗

用Go建千亿级微服务 分析详细,适合新手理解概念

今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的 Go 应用。 Go 构建微服务的历程 在2015年之前,头条的主要编程语言是 Python 以及部分 C++。随着业务和流量的快速增长,服务端的压力越来越大,随之而来问题频出。Python 的解释性语言特性以及其落后的多进程服务模型受到了巨大的挑战。此外,当时的服务端架构是一个典型的单体架构,耦合严重,部分独立功能也急需从单体架构中拆出来。 为什么选择 Go 语言? Go 语言相对其它语言具有几点天然的优势: 语法简单,上手快 性能高,编译快,开发效率也不低 原生支持并发,协程模型是非常优秀的服务端模型,同时也适合网络调用 部署方便...阅读全文

博文 2019-04-26 10:31:02 aa1215018028

2019 Golang公链项目实战

百度网盘任务1:001 - 内容介绍.mp4任务2:002 -Block结构.mp4任务3:003 - 根据区块数据生成区块HASH.mp4任务4:004 - CreateGenesisBlock.mp4任务5:005 - Blockchain结构.mp4任务6:006 - 添加新的区块.mp4任务7:007 - ProofOfWork框架.mp4任务8:008 - 工作量证明算法分析.mp4任务9:009 - target移位处理.mp4任务10:010 - 挖矿算法完整实现.mp4任务11:011 - 判断区块Hash的有效性.mp4任务12:012 - 课程目标.mp4任务13:013 - 区块的序列化和反序列化.mp4任务14:014 - boltdb数据库的创建或者打开.mp4任务...阅读全文

博文 2019-10-29 15:03:42 一直努力跑

golang Endian字节序

golang 字节序 简述 最近看TCP通信发现字节序,对此不太了解,故记录下来。 所谓字节序就是字符顺序。在查看资料常用的有2类排序方式: Big-Endian 高位字节放在内存的低地址端,低位字节放在内存的高地址端。 Little-Endian 低位字节放在内存的低地址段,高位字节放在内存的高地址端。 例如 十进制数255用二进制表示为1111 1111,十进制数256用二进制表示则为1 0000 0000那么这个1存放的位置是在前还是后,就是 Big-Endian 和 ittle-Endian 的区别 golang中 在golang 中 encoding/binary 提供了二进制序列化的功能。 提供read 读取编码 和write写编码的等方法 func Read(r io.Read...阅读全文

博文 2018-01-31 16:33:03 johnL

IOTA-全新的状态客户端库

今天,我们正式发布全新的状态客户端库的beta版本,其中包含我们称之为“帐户模块”的内容。这个名称不足以说明什么是重要的更新,因此我们将总结我此次更新客户端库的内容说明。客户端库一直是构建IOTA上层应用的难题。库的功能是以您熟悉的语言来实现您的项目设计目标。IOTA基金会一种在维护Java,JavaScript和Golang版本的客户端库。虽然我们看到很多开发者使用库构建出许多出色的项目,但我们依然认为它离开发者们心中最理想的体验还有很大的距离。几个月前,我们开始彻底的重新设计客户端库,并试图尽可能多地抽象出复杂的操作。因此,开发人员只需要关心他们真正关心的事情:发送交易和接收交易即可,而对于其他琐碎的IOTA协议内容大可无需考虑。新的客户端库做了什么?以前在使用我们的客户端库时,开发人员...阅读全文

博文 2019-04-13 14:34:41 IOTA中国社区

golang结构体json格式化的时间格式问题

最近开发一个公司项目,发现Go语言结构体Json转换时,存在时间格式不一样问题。在网上找了很久也没有找到一个很好的方案。即结构体序列化后的格式是`1993-01-01T20:08:23.000000028+08:00`。但为了兼容公司以往的项目,希望沿用`1993-01-01 20:08:23`这种格式。网上找到了下面的代码,可以解决大部分的问题。 import "time" const ( DateFormat = "2006-01-02" TimeFormat = "2006-01-02 15:04:05" ) type Time time.Time func Now() Time { return Time(time.Now()) } func (t *Time) UnmarshalJ...阅读全文

博文 2017-11-18 18:05:02 inspii

golang快速入门之代码实战

前段时间工作中遇到了golang的项目,稍稍对其产生了点兴趣,打算认真学习下,正巧在搭建mysql主备环境的时候发现如果用一个代理程序的话自己测试会方便很多(主要还是为了造轮子),于是就抽空用golang写了一个tcp代理程序(绝对是空余时间,工作很饱满的) 需求 由于是为了学习golang,所以要在实现代理基础功能的前提下尽可能的用到golang的各种基础知识,不要上来就拿别人的东西,不利于夯实基础 不可能真单纯的为了玩,学一个东西除了为充实大脑,更为了能有实际用途,所以有必要掌握工程化流程 程序不要太繁杂,毕竟这是我的第一个golang工程,来日方长 设计 结构图如下: +----------+ +------------+ | client |<--------+ | | +-----...阅读全文

写给公司新入职前端的protobuf接口调用方法

这只是一篇针对公司内部的指引导性的文档,不是一篇教程。数据层面前段如何与后端对接本篇包含以下内容:1、接口技术简介2、如何与后端对接一、接口技术简介我们使用的gRPC来进行前后台的数据对接。看下官方介绍gRPC is a modern open source high performance RPC framework that can run in any environment. ——-https://grpc.io/about/gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。 ——-http://doc.oschina.net/grpc?t=58008(没有找到中文官网,如果找到请添加到这)好了以上这些。。。了解一下,也可以就是看看,...阅读全文

博文 2018-09-05 20:34:41 清溪绕梧桐

Bleve目录结构

bleve是一个全文搜索引擎,golang里对标java的lucene,但是在结果封装等方面又借鉴了Elasticsearch很多设计,不得不说,不背负历史包袱更方便拨丝抽茧。 本章开始我们尝试分析bleve的源码,个人是不喜欢读他人源码的,1.思想受限。2.破坏自己的风格。当然最主要的是读代码比写代码难 -_-! . 如果你能很好很快的hold住一份复杂代码,你的功底至少比作者高出1个level才实际。不过这不影响咱们读代码。懂不懂不重要,重要的是读没读是吧哈哈。 废话不多说了,直接上一个图,然后嫖一下官网文档,本章交差 image 上图是bleve的目录结构。golang有着丧心病狂的包引用洁癖,所以go语言的程序分层相当讲究自上而下,这样也很方便阅读。 bleve 是top-level...阅读全文

博文 2018-11-02 15:34:43 ansj

大数据Clouder专项技能认证课程:Quick BI企业报表制作

课程介绍 阿里云大学Clouder大数据专项技能认证:Quick BI企业报表制作 本认证课程可以帮助学员掌握图形化报表设计、开发的方法,同时还将掌握搭建企业级报表门户。通过报表门户,将企业的数据通过图形化报表展现出来,实现信息共享。 课程亮点: • 真实环境:实验环境为公共云资源,和客户实际使用资源相同 • 仿真场景:动手实验的数据和需求来自于实际的企业项目 • 实战性强:课程和实验围绕实用性非常强的技能点,可快速应用到实际工作中去 • 易学易懂:内容深入浅出,理论和实践相结合,随时可学,学完即会 课程目标 • 掌握使用Quick BI制作企业报表的方法 适合人群 • 所有人 课时列表 • 免费 课时1:内容...阅读全文

生存还是毁灭?一文读懂挖矿木马的战略战术

前言??比特币等虚拟货币在2019年迎来了久违的大幅上涨,从最低3000美元上涨至7月份的14000美元,涨幅达300%,巨大的金钱诱惑使得更多的黑产团伙加入了恶意挖矿的行列。阿里云安全团队通过对云上僵尸网络家族的监控,发现恶意挖矿已成为黑产团伙主要的牟利方式。2019年共监控到58个成规模的挖矿木马团伙(数据截止到8月底),以累积感染量定义木马活跃度,下图/表是活跃TOP10的木马家族及简介。本文尝试从宏观角度分析、总结挖矿木马常用技术及发展趋势,以期能够给企业安全防护带来启示。家族名简介平台攻击方式ddgs一个Go语言实现的挖矿僵尸网络,最早曝光于2017年10月。LinuxSSH、Redis爆破MinerGuard一个Go语言实现的挖矿僵尸网络,2019年4月开始爆发Windows、L...阅读全文

博文 2019-10-17 22:32:58 aside section ._1OhGeD

记一次获得3倍性能的go程序优化实践,及on-cpu/off-cpu火焰图的使用

自:https://mp.weixin.qq.com/s/9IKaXeWTiiQTFlvZzxgsEA 先把结论列在前面: 1.Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。 2.on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成一张火焰图比较繁琐(尤其是off-cpu图),但绝对值得拥有! 之前一直使用Logstash作为日志文件采集客户端程序。Logstash功能强大,有丰富的数据处理插件及很好的扩展能力,但由于使用JRuby实现,性能堪忧。而Filebeat是后来出现的一个用go语言实现的,更轻量级的日志文件采集客户端。...阅读全文

博文 2017-07-31 10:06:41 鲸息_Leon

boltdb 源码分析-简介-0

boltdb boltdb是一款golang实现的嵌入式K-V存储引擎。在boltdb的源码中的doc.go 对其有一个简要的说明。 其提供事务、ACID语言、无锁MVCC支持。数据提供零拷贝、B-TREE索引。其主要设计源于Howard Chu的LMDB。 持久化 boltdb采用一个单独的文件作为持久化存储。其将不同的文件部分划分为不同的page,不同的page 存储不同类型的数据(meta、key、value)等。当经过反复的增删改查后,文件中可能出现没有数据的 部分。此时boltdb并不打算搬移数据、截断文件来将多余的空间返还给操作系统。而是将这些部分, 加入内部的FreeList来维护,当有新的数据写入时,复用这些空间。因此从用户视角来看,boltdb 的持久化文件只会增大,而不会...阅读全文

[翻译]在 Go 应用中使用简明架构(3)

文在此,续前…… ——–翻译分隔线——– 在 Go 应用中使用简明架构(3) 用例层 现在来看看用例层代码,同样,它刚刚好能放在一个文件中: package usecases import ( "domain" "fmt" ) type UserRepository interface { Store(user User) FindById(id int) User } type User struct { Id int IsAdmin bool Customer domain.Customer } type Item struct { Id int Name string Value float64 } type Logger interface { Log(message string)...阅读全文

博文 2014-10-09 16:19:29 mikespook

Go语言之数组/Slice篇

自“灰子学技术”公众号原文链接:https://mp.weixin.qq.com/s/UDsbIcQMl57ROgBij8xxzQ一、数组的语法介绍Go中的数组与C++中的数组含义并无不同,表示的都是具有相同唯一数据类型的一组已经编号并且长度固定的数组项序列。```var varName [SIZE]type // 备注:该格式是声明格式,变量名 + 数组大小 + 数据类型```数组初始化:数组的初始化基本上是以下例子中的几种格式```package mainimport ("fmt")func main() { var name0s [2]string = [2]string{"hello","shanghai"} var names = [...]string{"hello", "wor...阅读全文

博文 2019-09-06 18:25:48 ZhDavis

Go 的 Protocol Buffer 教程

欢迎程序员们!在这个教程里面,我们将学习如何在你的 Go 应用中使 protocol Buffers 数据格式。我们将详细讲述这种数据格式,以及为什么这种数据格式优于传统的数据格式,例如 XML 甚至 JSON。在我们写更多复杂的例子之前,我们将从一个简单的例子开始编写运行。 在这个教程的最后,你会对 protoco Buffe 有一个基础的了解,并且你将可以顺利的写出更好的系统。 ## 视频教程 https://www.youtube.com/embed/NoDRq6Twkts?ecver=2 ## Protocol Buffer 数据类型 Protocol buffers 是基础的数据格式,和 JSON、XML 非常的相似,都是用于存储结构化的数据,都支持很多不同的语言使用并进行序列化和...阅读全文

博文 2019-07-29 22:38:29 flyup_chen

k8s与监控--改造telegraf的buffer实现

改造telegraf的buffer实现 前言 最近在使用telegraf的场景中,要求数据在程序意外终止的时候不丢失。按照telegraf最初的原始实现,在running_output内部维护了两个buffer,分别是metrics和failMetrics。这两个buffer是基于go中channel实现的。由于没有持久化机制,在意外退出的时候,存在丢失数据的风险。所以这篇文章主要讲述之前telegraf保证数据安全的一些措施和我们对代码的一些优化。 telegraf关于数据安全的处理办法 关于两个buffer,定义在running_output.go的struct中。 // RunningOutput contains the output configuration type Runni...阅读全文

博文 2018-05-03 09:34:37 iyacontrol

Prometheus vs Zabbix

公司要上监控,Prometheus 是最热门的监控解决方案,作为喜新厌旧的程序员,我当然是选择跟风了,但上级更倾向于 Zabbix,那没办法,只能好好对比一番,给出几个靠谱的理由了。 Monitoring system 但稍稍深入一点,我就体会到,我之前其实并没有真的理解口口相传的 Prometheus 的优点,这次对比虽然是始于无奈,但还是蛮有意义的,正好总结一下自己粗浅的体会。 1. 对比 先对两者的各自特点进行一下对比: Zabbix Prometheus 后端用 C 开发,界面用 PHP 开发,定制化难度很高。 后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。 集群规模上限为 10000 个节点。 支持更大的集群规模,速度也更快。 更适合监...阅读全文

博文 2018-11-04 15:34:39 blackpiglet

golang错误处理

问题 错误处理,是非常重要的。在go语言中,错误处理被设计的十分简单。 如果做得好,会在排查问题等方面很有帮助;如果做得不好,就会比较麻烦。 从1.0开始,go中定义错误为 error 接口 // The error built-in interface type is the conventional interface for // representing an error condition, with the nil value representing no error. type error interface { Error() string } go语言中,错误处理的几种方式 通过判断值相等。像 io.EOF,go语言中,称为 sentinel error 通过断言( ty...阅读全文

博文 2019-05-07 19:34:54 每天一个俯卧撑

kubernetes client-go

以下文章为章骏原创,感谢供稿。 今天给大家介绍一下如何使用 client-go 来拓展 Kubernetes API,写一个 Kubernetes 的控制器。 client-go 是 Kubernetes 官方推出的一个库,方便我们来调用 Kubernetes 的 RESTful API。 控制流 Overview 首先,控制器需要与 kubernetes apiserver 进行通讯,则需要一个 client, 这个 client 需要有以下的信息: apiserver 的地址以及连接 apiserver 的认证信息,如用户名密码或者 token。 kubernetes 的 API resource 的 group 和 version,以及结构体的定义。 一个 serializer 来控制...阅读全文

博文 2017-11-01 10:01:04 qq_21816375

golangls工具

# ls 文件大小可视化ls工具(初学者练手项目) 源码地址 [点我](https://github.com/vua/ls) ## Usage ``` git clone git@github.com:vua/ls.git cd ls go build ls.exe -h path ``` ## Result ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210629012232882.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODI4MzE1O...阅读全文

开源项目 2021-06-29 01:18:34

Golang中time包

载自https://studygolang.com/articles/4331time包中包括两类时间:时间点(某一时刻)和时常(某一段时间)1时间常量(时间格式化)const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC...阅读全文

博文 2018-10-08 01:35:43 ck_god

听说,你想让自己的Go程序运行的更快?

http://studygolang.com/articles/6914 到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的。这主要是一篇,关于运行速度,而不是开发速度的文章——这两种速度是有区别的。 我曾经和很多聪明的人一起工作。我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限。应用引擎有一些非常严格的性能要求,所以我们才会做出改变。自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法。 Go的简单和原生并发使其成为一门非常有吸引力的后端开发语言,但更大的问题是它如何应对延迟敏感的应用场景?是否值得牺牲语言的简洁性使其速度更快?让我们来一起看一下Go语言性能优化的几个方面:语言特性、内存管理、并发,并根据这...阅读全文

博文 2016-05-06 12:00:00 leonpengweicn

容器化 Go 开发环境的尝试

写在前面 适用人群 容器化 Go 开发环境 容器化的价值 容器化的 Go 开发环境 定制化 Go 开发环境镜像 运行 Go 开发环境镜像 环境(上下文)一致的必要性 小结 参考 写在前面 昨天上午“起早”到附近的影院看《波西米亚狂想曲》,选的座位比较靠前,最后的二十分钟里愣是没好意思把裤兜里的纸巾掏出来 ????。未来打算用三到五年的时间去开创自己的事业,想必道路不会平坦,不过认真做事的态度不变,大概率这段人生会有一个“酣畅淋漓”的收尾吧。 本文是我在思考“如何组建团队”时候的一个小尝试,旨在通过容器技术(docker)降低探索 Golang 技术开发的门槛。目前的效果还不是很明显,不过作为一种新思路,非常值得大家了解。 适用人群 入门√——初级——中级——高级,本文适合所有对技术感兴趣的开...阅读全文

博文 2019-06-19 10:14:33 敬维

OpenID 关联认证提供 CoreOS dex

CoreOS dex 是 CoreOS 开源的,基于标准的认证提供器和身份验证解决方案。 之所以称之为“dex”是因为集中化用户索引,软件的其他部分也可以进行验证。 主要特性: * 安全 * 标准 * 语言/平台无关 * 身份验证联盟 ![dex Infrastructure Diagram](http://static.oschina.net/uploads/img/201509/04081906_jWLq.png) 提供以下组件: * PostgresSQL 数据库服务,作为 dex 的后端存储 * 单个 dex-overlord,密钥转换和其他管理任务 * 一些 dex-workers,为终端用户验证提供前端 * ...阅读全文

DockOne微信分享(六十一):虚拟化老兵介绍虚拟化技术

【编者的话】本次分享从以下4方面展开: 虚拟化主流技术介绍虚拟化前沿技术介绍Docker技术介绍MixSAN技术介绍 大家好,我是徐安,一位虚拟化老兵。2010年开始在世纪互联(云快线)接触云计算和虚拟化技术,应该算是国内较早的一批人吧。目前在汉柏科技有限公司,负责服务器虚拟化以及桌面虚拟化产品的技术工作。 我将从虚拟化的主流技术介绍,前沿技术介绍,Docker技术介绍,MixSAN技术介绍四个方面展开今天的分享。由于笔者水平和知识所限,难免有理解不正确的地方,请各位大牛批评指正。 首先让我们看看主流虚拟化技术有哪些,无非就是CPU虚拟化,内存虚拟化,网卡虚拟化,磁盘虚拟化。 KVM是目前最主流的虚拟化技术,自Linux 2.6.20之后集成在各主要Linux发行版本中。KVM分为四个模式,...阅读全文

博文 2017-06-25 16:25:03 氨水

Go语言小贴士2 - 协议解析

作者:达达链接:https://zhuanlan.zhihu.com/p/21367696来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。今天这个小贴士主要介绍协议解析的一些知识,Go语言作为服务端编程语言,免不了要涉及到通讯协议解析,即便不是做网络通讯,也难免会涉及到文件解析,其实它们的知识点都是一样的。 现实应用场景中,通讯协议按通常可以分为两类:二进制协议和文本协议。Go语言内置的gob格式就是一种二进制协议,而JSON、XML等则是文本协议。 假设我们要发送123这个数值,用二进制协议只需要一个字节,因为一个字节(byte)有8个二进制位(bit),2的8次方是256,一个字节可以表达0-255之间的任意值,共256种可能性。 如果我们用文本协议发送12...阅读全文

博文 2016-08-29 12:00:01 dasn

Apache的Mesos和Google的Kubernetes 有什么区别?

Apache的Mesos和Google的Kubernetes 有什么区别?本文来自StackOverFlow上的一个问题,主要讨论Mesos和Kubernetes的区别,相信我们很多人也有同意的疑问。 Kubernetes的开发者Craig回答了这个问题,同时masi也做了概述,不一定对,供读者参考。Kubernetes主要针对容器集群,而 Mesos适用于任何的框架和应用,所以Kubernetes可以运行于Mesos上。Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。它可以完美运行在现代的操作系统环境(比如CoreOS 和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。Kubernetes使用Golang开发,具有轻量化、模块化、便...阅读全文