golang RabbiMQ简单操作

安装erlang 因为RabbitMQ是基于erlang开发的 安装RabbiMQ 上述步骤自行百度windows linux都支持 安装注意事项: erlang要和RabbiMQ版本对应上 RabbiMQ windows安装需要将.erlang.cookie改成一样的 rabbitMQ常用的命令 启动监控管理器:rabbitmq-plugins enable rabbitmq_management 关闭监控管理器:rabbitmq-plugins disable rabbitmq_manage...阅读全文

Go入手

1、Mac配置环境 1.1 安装go: https://golang.org/dl/ 下载画圈文件,安装即可1.2 配置环境vim ~/.bash_profile 打开配置文件复制下面这些: export PATH="/opt/local/bin:/opt/local/sbin:/usr/local/go/bin:$PATH" export GOROOT=/usr/local/go export GOPATH=/Users/你的go目录/Go export GOBIN=$GOPATH/bin e...阅读全文

golang protobuf unknown字段透传

需求背景: 云端在线架构有上游A-中间模块B-下游C三个模块,都是proto格式数据传输交互。流量方向为从A->B->C,当A模块需要给proto增加某个字段,这个字段中间模块B并不关系,只需要透传给下游模块C来使用。 那么A和C模块都升级proto的情况下,作为透传模块的B能不能不升级proto文件呢?答案是肯定的,这就要说到proto3的unknown字段支持了(proto2和大于proto 3.5版本的支持) proto定义: A模块和c模块的proto: syntax = "proto3...阅读全文

饿了么监控体系:从架构的减法中演进而来

本文根据黄杰老师在〖2019 Gdevops全球敏捷运维峰会-广州站〗现场演讲内容整理而成。讲师介绍黄杰,前饿了么框架工具部监控平台负责人。2015年加入饿了么,负责整个监控平台的构建及周边工具链的建设。之前曾在携程、eBao等多家公司工作,在监控、消息系统及大数据等领域积累了丰富经验。分享概要1、背景2、遇到的问题3、场景化4、系统设计大家好!很荣幸有这样的机会和大家交流,今天分享的主题为《饿了么监控体系的演进》。我差不多是2015年中加入饿了么,主要是负责饿了么整个监控平台的搭建,从0开始搭...阅读全文

golang 回收机制

1. Golang GC 发展 Golang 从第一个版本以来,GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。 v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier 2. GC 算法简介 这一小节介绍三种经典的 GC 算法: 引用计数(reference counting) 标记-清扫(mark & sweep) 节点复制(Copying Garbage...阅读全文

Go|sync.mutex 源代码分析

sync.mutex 源代码分析 [TOC] 针对 Golang 1.10.3 的 sync.Mutex 进行分析,代码位置:sync/mutex.go sync_mutex.jpeg 结构体定义 type Mutex struct { state int32 // 指代mutex锁当前的状态 sema uint32 // 信号量,用于唤醒goroutine } Mutex 中的 state 用于指代锁当前的状态,如下所示 1111 1111 ...... 1111 1111 \________...阅读全文

Golang系列之os 相关操作

记录相关os的操作函数 1. golang之os 判断文件夹是否存在 // 判断所给路径文件/文件夹是否存在 func Exists(path string) bool { _, err := os.Stat(path) //os.Stat获取文件信息 if err != nil { if os.IsExist(err) { return true } return false } return true } 2. golang之os 判断路径是否为文件夹 // 判断所给路径是否为文件夹 fun...阅读全文

go mod有了它,再也不用担心运行缺少类库了

参考链接:https://blog.csdn.net/weixin_39003229/article/details/97638573 什么是go.mod? Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。 Go.mod其实就是一个Modules,关于Modules的官方定义为: Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modu...阅读全文

Golang grpc server响应请求

朋友偶然问了一句,golang的grpc在接到请求后是如何调到对应的实现函数的? 当时对着代码讲了一通。后来想想觉得这是个好问题,写下来记录一下。 注册: func main() { listen, err := net.Listen("tcp", ":2008") if err != nil { fmt.Println("net.Listen tcp :2008 err", err) return } s := grpc.NewServer() hServer := xxx.Server{} ...阅读全文

腾讯云函数SCF初探

前不久的微信开发者大会上在推他们的Serverless架构,即他们的产品腾讯云函数SCF。 当然这个也不是新鲜的事物,在亚马逊提供的同类服务叫做lambda,阿里云提供的则叫做函数计算,Cloudflare的则名为workers。 在编程语言的支持上,除了Cloudflare的workers只支持javascript。 其余几家都支持python、php、golang、node,java等主流开发语言。 关于workers的描述,Cloudflare官网是这样描述的: ……Cloudflare ...阅读全文

Kubernetes 中部署 NFS Provisioner 为 NFS 提供动态分配卷(上篇)

一、NFS Provisioner 简介 NFS Provisioner 是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷。 持久卷被配置为:namespace−{pvcName}-${pvName}。 二、External NFS 驱动的工作原理 K8S 的外部 NFS 驱动,可以按照其工作方式(是作为 NFS server 还是 NFS client)分为两类: 1、nfs-client 也就是我们接下来演示的这一类,它通...阅读全文

Go Modules : v2 及更高版本

本文是一篇翻译文章: blog.golang.org/v2-go-modul… 原文作者:Jean de Klerk 和 Tyler Bui-Palsu 译者:befovy 校对:polaris1119 译文由 GCTT 原创编译,Go语言中文网 荣誉推出 简介 本文是 Go modules 系统的第四部分 Part 1: 使用 Go Modules 译文 Part 2: 迁移到 Go Modules 译文 Part 3: 发布 Go Modules 译文 Part 4: Go Modules ...阅读全文

掘金 2019年12月04日 半岛打铁匠

Rust 入门 (四)

所有权是 rust 语言独有的特性,它保证了在没有垃圾回收机制下的内存安全,所以理解 rust 的所有权是很有必要的。接下来,我们来讨论所有权和它的几个特性:借用、切片和内存结构。 什么是所有权 Rust 的核心特性是所有权。各种语言都有它们自己管理内存的方式,有些是使用垃圾回收机制,有些是手动管理内存,而 rust 使用的是所有权机制来管理内存。 所有权规则 所有权规则如下: rust 中的每个值都有一个自己的变量。 rust 值在同一时间只能绑定一个变量。 变量超出作用域,值会自动被销毁。 ...阅读全文

掘金 2019年12月04日 单鹏飞

Golang并发

在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否有一种机制:使用者分配足够多的任务,系统能自动帮助使用者把任务分配到 CPU 上,让这些任务尽量并发...阅读全文

Golang的异常处理介绍

package main import "github.com/astaxie/beego/logs" func main() { //关于Golang的异常处理方式说明 //1.关键词 panic 2.recover 3.defer函数 //panic 的作用是抛出一个错误信息 可以看作是Java中的throws new Exception //panic 调用完程序会立即停止 后续程序不会再执行 //demo1. var number=10 if number==10{ panic("错误信...阅读全文

Golang中make和new初始化对象的区别

1.关于在golang当中我们经常使用new或者make去创建对象那么 讲解一下new和make的区别 Golang中 new 和 make 是两个内置函数,主要用来创建并分配类型的内存。在我们定义变量的时候,可能会觉得有点迷惑,不知道应该使用哪个函数来声明变量,其实他们的规则很简单,new 只分配内存,而 make 只能用于 slice、map 和 channel 的初始化 package main import "github.com/astaxie/beego/logs" type Stu...阅读全文

撮合引擎开发:完结篇

欢迎关注「Keegan小钢」公众号获取更多文章 撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 撮合引擎开发:流程的代码实现 撮合引擎开发:缓存和MQ 撮合引擎开发:日志输出 撮合引擎开发:完结篇 本小节是该系列文章的最后一篇了,将讲解剩下的一些东西,包括交易委托账本中订单队列的实现逻辑、更多订单类型的实现逻辑。另外,不少朋友在问,完结后所有代码是否会开源放上 Github?我只能说,长期大概率会开源,但短期内还没打算...阅读全文

掘金 2019年12月05日 Keegan小钢