使用opentracing,jaeger实现golang链路追踪

Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API。我们可以使用opentracing在关键代码中进行埋点记录,线上可以快速直观查看调用执行情况。 要点说明 config设定 cfg := &config.Configuration{ Sampler: &config.SamplerConfig{ Type: samplerType, Param: samplerParam, }, Reporter: &config.ReporterConfig{ LogS...阅读全文

Segmentfault 2019-12-13 05:32:41 麦穗儿

Ubuntu 16.04安装GoLand后不能切换到搜狗输入法

现象: 1、通过命令行命令./golang.sh启动时,不能使用搜狗输入法; 2、通过命令行命令sudo ./golang.sh启动时则可以,但添加到launch后,通过点击图标则还是不行。 解决办法: 1、在命令行中以"sudo ./golang.sh"启动GoLand; 2、新建或打开一个项目,然后点击Tools->Create Desktop Entry 3、cd /usr/share/applicatons,打开jetbrains-goland.desktop,在"Exec="后增加"g...阅读全文

简书 2019-12-12 19:32:45 wxb2dyj

并发编程挑战:死锁与上下文切换

引言 上下文切换(有时也称做进程切换或任务切换)是指 CPU 从一个进程或线程切换到另一个进程或线程。上下文切换会影响多线程执行速度。死锁是指多个进程或线程循环等待它方占有的资源而无限期地僵持下去的局面。 1、上下文切换 上下文定义 cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文。 引发问题 对于CPU密集型任务,多线程处理会发生上下文切换,会影响到执行速度,如果时IO密集型,多线程技术优点尽显。 如何减少上下文切...阅读全文

简书 2019-12-12 19:32:44 老男孩_Misaya

DevOps专题|Lua引擎打造超轻量级客户端

Lua 作为一门轻量级脚本语言,源码使用标准C语言发布,语法简洁,非常适合嵌入式、客户端、游戏等场景。 Lua引擎语言特点 轻量级 源码简单,以lua最新版5.3.5为例,加上lua自身提供的lib库,仅30多个.c文件,编译后仅200多k,strip后经upx压缩,可控制在100k以下。 语法简洁 小巧灵活,支持闭包,有GC机制,通过语法糖可实现面向对象编程,提供了通用类型table,可实现数组、map和对象。 支持多平台 lua语言本身和lib库由标准C语言编写,可在windows、*nix...阅读全文

简书 2019-12-12 19:32:43 京东云技术新知

Go语言之装饰器

转自本人公众号:灰子学技术原文链接:https://mp.weixin.qq.com/s/33VmMYOCQjptIyALABXfuQGo的装饰器本质上允许您包装现有功能,并添加你自己的自定义功能,它操作的对象是函数,返回的对象也是函数。1.简单的一个装饰器例子:​结果分析:从输出的结果能够看出,调用了装饰器之后,函数testFunc已经实现了,“自己的代码 + 原来代码”的效果。2.如果我们希望装饰器装饰的函数类型不是固定的呢,也就是说我们希望装饰器装饰的函数可以是任何函数,这样我们该怎么办?...阅读全文

Go语言中文网 2019-12-12 18:54:14 ZhDavis

蚂蚁金服开源 MOSN 核心概念解析

前言 MOSN 是一款使用 Go 语言开发的 Service Mesh 数据平面代理,2018 年 7 月由蚂蚁金服开源,开源地址 https://github.com/sofastack/sofa-mosn,MOSN 旨在为服务提供分布式、模块化、可观察和智能化的代理能力。MOSN 是 Modular Observable Smart Network 的简称。MOSN 可以与任何支持 xDS API 的 Service Mesh 集成,亦可以作为独立的四、七层负载均衡使用。未来 MOSN 将支...阅读全文

简书 2019-12-12 17:32:47 ServiceMesher

golang govendor windos下的使用

为何使用govendor? 解决项目部署到各个平台的包依赖问题。 govendor提供一个包管理的能力,方便在任意环境下编译部署。 首先下载govendor包到本地 go get -u github.com/kardianos/govendor 到govendor目录下执行 go build go instanll 此时在GOPATH路径下的bin目录中应该生成了govendor.exe文件 执行 govendor 会发现没有这个指令的话,是windos环境变量没有配置。 image.png i...阅读全文

简书 2019-12-12 15:32:46 青果山圣斗士

golang基础学习-AES加密

高级加密标准(AES全称Advanced Encryption Standard),AES加密数据块分组长度必须为128bit(byte[16]),密钥长度可以是128bit、192bit、256bit中的任意一个。 ps:本文中PKCS7填充函数是从别的地方找的,具体地方不记得了。后续找到链接会补上参考地址。 AES实现的方式: 1.电码本模式(Electronic Codebook Book (ECB)) 2.密码分组链接模式(Cipher Block Chaining (CBC)) 3.计...阅读全文

Segmentfault 2019-12-13 05:32:40 wmm369

7.Go语言基础之函数

1.函数 1.1函数定义 Go语言中定义函数使用fun关键字,具体格式为 func 函数名(参数)(返回值){ 函数体 } 其中: 1.函数名:由字母,数字,下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名不能重名。 2.参数:参数由变量名和变量类型组成。 3.返回值:可以只写返回值类型,多个返回值必须用()包裹,并用,分隔。 4.函数体:实现指定功能的代码块。 定义一个求两个数和的函数: func intSum(x int, y int) int { return x + y ...阅读全文

51CTO博客 2019-12-12 10:04:38 DevOperater

深度解读k8s1.17新特性

Kubernetes 1.17的发行版引入了一些强大的新功能,并且看到其他功能趋于成熟或趋于普遍可用。此概述提供了一些最值得注意的更改的摘要,其中包括: 集群网络和路由控制以及可伸缩性方面的重大改进; 集群存储,pod调度和运行时选项的新功能; 更好的自定义资源支持。 请注意,要尝试这些功能,您将需要有权访问运行Kubernetes 1.17的集群,并且在某些情况下还需要为Kubernetes组件设置启用某些新功能。托管Kubernetes集群通常不支持最新的Kubernetes版本,或者不允许...阅读全文

Segmentfault 2019-12-13 05:32:40 iyacontrol

6.Go语言基础之map

1.map 1.1map介绍 Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化后才能使用。 1.2map定义 map定义语法如下: map[KeyType]ValueType 其中, KeyType表示键的类型。 ValueType表示键对应的值的类型。 map类型的变量,默认初始值为nil,需要使用make()函数来分配内存。语法为: make(map[KeyType]Valu...阅读全文

51CTO博客 2019-12-11 19:22:15 DevOperater

go 函数使用,闭包

函数类型也是一等的数据类型。这是什么意思呢? 这意味着函数不但可以用于封装代码、分割功能、解耦逻辑,还可以化身为普通的值,在其他函数间传递、赋予变量、做类型判断和转换等等,就像切片和字典的值那样。而更深层次的含义就是:函数值可以由此成为能够被随意传播的独立逻辑组件(或者说功能模块)。对于函数类型来说,它是一种对一组输入、输出进行模板化的重要工具,它比接口类型更加轻巧、灵活,它的值也借此变成了可被热替换的逻辑组件。 我先声明了一个函数类型,名叫Printer,注意这里的写法,在类型声明的名称右边的...阅读全文

51CTO博客 2019-12-10 09:50:22 1350368559

Golang expvar原理

前言 在学习go的metric的过程中,有些实现支持prometheus、expvar等,expvar是什么,竟然在sdk的库中?另外,发现jaeger(github.com/uber/jaeger-lib)也支持这种metric数据暴露方式。 分析 expvar提供将变量暴露出去的机制(暴露到http接口等),java中也有类似的机制。 原理 go默认创建一个全局并发安全的map,可以将key为string,val为实现Var的实例保存进去;同时,将所有的key保存到列表中。 http暴露原理...阅读全文

简书 2019-12-12 00:32:45 huiwq1990

Go 获取磁盘使用情况(跨平台)

最近在项目中需要根据磁盘使用情况来做一下处理,发现没有什么标准库可以获取磁盘当前使用情况,在网上找了一段代码在 Linux 下运行可以,但在 Windows 跑会抛异常。 后来在网上找到了这篇文章,文章分别给出了两个平台各自获取磁盘使用情况的方法,在此基础上使用golang 的条件编译就可以实现跨平台获取了。 解决这个问题花了大半天,现在项目快结束了有时间就传到 gitlab 上了方便以后使用。 使用示例 获取包 go get gitlab.com/tingshuo/go-diskstate/ ...阅读全文

简书 2019-12-12 00:32:45 tingshuo123

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有: 流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻...阅读全文

简书 2019-12-12 00:32:44 热爱coding的稻草

构建基于Git的知识管理体系

构建基于Git的知识管理体系 简介 基于“让你成长为一棵树而不是一地草”的理念,搭建自己的知识金字塔,构建持续发展、增值的技能树。 最终目标 GitMdNote 个人日志,Git仓库,个人知识,收集归纳的主战场 EverNote 云端存储同步工具,可以用来归档,整理,多终端查看 GitMdBlog 日志仓库预览工具,方便查看,友好界面,专注(golang) EverSynClient 印象笔记同步工具,同步笔记仓库到印象笔记(TypeScript) GitHubPage 定期发布文章,输出成功到...阅读全文

简书 2019-12-12 00:32:41 笑吧小鸟

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻辑...阅读全文

Segmentfault 2019-12-13 05:32:39 热爱coding的稻草

C/C++ Linux 后台服务器开发高级架构师学习知识路线总结

前言:小编也是从事c方面10多年的工作经验、今天跟大家分享一下我总结出来的一系列 C/C Linux后台服务器开发的学习路线。从Linux开发工程师-Linux后台开发工程师-Linux高级互联网架构师。想必大家都知道从事后台开发首先就是要选择一种语言,小编今天跟大家分享是用C/C++ 做的后台开发。所以想从事这方面的朋友得有C/C++的基础。 首先跟大家说的是从学习步骤:(Linux入门到精通篇)一、Linux开发环境1.了解Linux环境搭建,了解LinuxC编程2.了解Linux安装,命令...阅读全文

简书 2019-12-11 21:32:45 半夏花开_a3f7

去除slice中重复的元素,认识空struct

golang标准库本身没有提供一个去除slice中重复元素的函数,需要自己去实现。今天读源码时发现了一个,算是比较优秀的技巧了,如果你有更好的办法,欢迎讨论! 另外让我们看一下空struct的作用,他之前一直没有被我重视,看来以后要多审视自己的coding了! func main() { s := []string{"hello", "world", "hello", "golang", "hello", "ruby", "php", "java"} fmt.Println(removeDupl...阅读全文

简书 2019-12-11 21:32:43 taj3991