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

gRPC源码/transport/客户端 服务端

综述 http2Client实现自ClientTransport接口http2Server实现自ServerTransport接口 https://github.com/messixukej... 在liangzhiyang/annotate-grpc-go基础上补充了部分注释 客户端:http客户端连接创建 原理(引自http2-spec/HTTP2中英对照版(06-29).md at master · fex-team/http2-spec · GitHub.md)):Upon establishment of a TCP connection and determination that HTTP/2 will be used by both peers, each endpoint ...阅读全文

博文 2018-06-11 11:34:38 蓝白狂想

golang通过mattn/go-sqlite3访问BDB

golang通过mattn/go-sqlite3访问BDB 依赖包 BDB运行环境 $ tree -L 1 bdb bdb |-- bin |-- docs |-- include |-- lib `-- share mattn/go-sqlite3库 $ export GOPATH=$(pwd) $ go get mattn/go-sqlite3 $ ls -l src/github.com/mattn/go-sqlite3 主程序 package main import ( "fmt" "log" "database/sql" "github.com/mattn/go-sqlite3" ) func main() { sqlDriver := "sqlite3_with_extensio...阅读全文

博文 2019-05-31 17:34:40 CodingCode

[uber-zap/part2]自定义记录器

说明 之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上 正文 使用预设的记录器可以节省时间,但如果确定要调整记录器,需要探索自定义记录器的方法 使用zap配置结构体创建记录器 可以使用配置zap.Config创建记录器,这是一个结构体,可以使用需要的值填充结构体,然后调用结构体的.Build()方法来获取记录器 cfg := zap.Config{...} logger, err := cfg.Build() 需要注意的是:zap.Config的结构体没有默认值,至少为zap需要的三个设置提供值 encoder: 只需要添加个Encoding:"XXX",使用json就会创建一个JSON的encoder,另一个值是console 可以使用结构zapcore.EncoderC...阅读全文

博文 2019-03-30 12:34:38 小龙虾

基于2PC和延迟更新完成分布式消息队列多条事务Golang版本

背景 分布式多消息事务问题 在消息队列使用场景中,有时需要同时下发多条消息,但现在的消息队列比如kafka只支持单条消息的事务保证,不能保证多条消息,今天说的这个方案就时kafka内部的一个子项目中基于2PC和延迟更新来实现分布式事务 2PC 2PC俗称两阶段提交,通过将一个操作分为两个阶段:准备阶段和提交阶段来尽可能保证操作的原子执行(实际上不可能,大家有个概念先) 延迟更新 延迟更新其实是一个很常用的技术手段,简单来说,当某个操作条件不满足时,通过一定手段将数据暂存,等条件满足时在进行执行 基于2PC和延迟队列的分布式事务实现 系统架构 实现也蛮简单的, 在原来的业务消息之后再添加一条事务消息(事务消息可以通过类似唯一ID来关联到之前提交的消息), worker未消费到事物提交的消息,就...阅读全文

博文 2019-05-18 11:34:37 仔仔

跟我一起学习GO语言06-01

前面写过关于深度拥抱区块链文章,区块链开发语言GO,被称为互联网时代的C语言,接下来我会以一个初学者的方式,由浅入深的介绍同时也会有搭配相应的代码,一步一步的学习GO语言,都说技多不压身,所以希望大家也一起践行,践行很重要。 首先我们要安装Go语言的开发包,根据自己的需求可以下载不同的对应平台的安装包,当然Go语言不管是在Windows平台、Mac平台还是Linux平台上都是支持的,这个无需担心不支持的情况,下载网址:https://studygolang.com/dl,可以到golang中国上查找相关资料也可以,网址:https://www.golangtc.com/ 下载好自己对应的版本,然后安装,因为占用空间不是很大,所以可以直接默认下一步下一步的推荐安装即可,接下来就是搭建开发环境,...阅读全文

博文 2019-06-01 13:34:41 搬砖人1314

【Go并发编程】第一篇 - Goroutines调度

进程和线程 当运行一个应用程序的时候,操作系统会给这个应用程序启动一个进程。我们可以将进程看作一个包含应用程序在运行中需要用到和维护的各种资源的容器。一个进程至少包含一个线程,这个线程就是主线程。操作系统会调度线程到不同的CPU上执行,这个CPU不一定就是进程所在的CPU。 进程:资源的所有权 线程:执行和调度的基本单位 同一进程下的各个线程共享资源,但寄存器、栈、PC不共享 Go调度 基本术语 Go Runtime管理调度,垃圾收集和Goroutine的运行时环境。这里我们只谈调度器。 Runtime调度器通过把Goroutine绑定到操作系统线程来运行它们。Goroutine可以看作是轻量级的线程。每个Goroutine用G来表示,它包含了用来跟踪栈的字段和当前状态。 Runtime跟踪...阅读全文

博文 2018-06-22 09:34:39 yummybian

我与Jetbrains的这些年

前言 本章主要说一下如何去使用Jetbrains的各类工具,并且在上周参加了Jetbrains开发者日的大会,把参会的感受和体验在这里分享给各位。话不多说,我们进入正题。 使用 想必各位一定使用过Jetbrains的任意一款产品,就算没用过也应该听说过吧。Jetbrains从开始至今总共分为三大模块 Developer Ide (集成开发工具) Language (Jetbrains的开发语言 Kotlin) DevOps (任务管理,持续集成,持续部署的一些东西) 对于Developer Ide我推荐使用Jetbrains ToolBox,它是管理所有Jetbrains Ide的工具。 Jetbrains平均一个月做一次小更新,安装了Jetbrains ToolBox就不必再去关心更新的事...阅读全文

博文 2018-11-23 14:34:42 CrazyCodes

[转载]MMO网络游戏服务器中mysql数据库访问的性能优化探讨

问题: 和一些做mmo大型网络游戏服务器端的人讨论了一些mysql数据库访问的问题,因为我本人没有实际开发大型网游的经验,所以他们说的我也理解的不深,我还是努力理解,但还是觉得他们所谈的好象并不是那么一回事; mysql数据库的访问一般就通过他提供的c api接口访问就可以了,网络游戏服务器端事先和mysql建立并保持1个或者几个连接,正常情况下这些连接将一直保持; 为提高性能,网络游戏服务器程序启动后一般都会把事先需要的数据从数据库提取到内存供使用,以减少读数据库的频率,这到好理解; 当然,网游开发中,遇到需要立即写库或者更新库的内容时,我们会立即向数据库服务器发送insert,delete,update等以期望数据库能立即更新我们的数据,比如玩家切换到新地图,这种数据就有必要立即提交到数...阅读全文

博文 2019-01-01 12:34:45 Golang语言社区

Go 编译器内部知识:向 Go 添加新语句-第 2 部分

这是探讨 Go 编译器两篇文章的最后一篇。在[第 1 部分中](https://studygolang.com/articles/25101),我们通过构建自定义的编译器,向 Go 语言添加了一条新语句。为此,我们按照此图介绍了编译器的前五个阶段: ![go compiler flow](https://raw.githubusercontent.com/studygolang/gctt-images/master/compiler-internal/go-compiler-flow.png) 在"rewrite AST"阶段前,我们实现了 until 到 for 的转换;具体来说,在[gc/walk.go](https://github.com/golang/go/blob/master/...阅读全文

博文 2020-03-12 22:40:36 polaris

go自定义一个定时器

### 定时器 + [查找更多案例](http://www.5lmh.com/ "查找更多案例") + Timer:时间到了,执行只执行1次 ```go package main import ( "fmt" "time" ) func main() { // 1.timer基本使用 //timer1 := time.NewTimer(2 * time.Second) //t1 := time.Now() //fmt.Printf("t1:%v\n", t1) //t2 := <-timer1.C //fmt.Printf("t2:%v\n", t2) // 2.验证timer只能响应1次 //timer2 := time.NewTimer(time.Second) //for { // <...阅读全文

博文 2019-11-27 16:44:33 lu569368

golang学习(1)

1 go语言特点:原生支持高并发,带垃圾回收,快速编译静态编译型语言2 go安装:2.1 go的几种安装方式2.2 Go的环境变量 $GOROOT:go的安装目录,配置后不会再更改;$PATH:需要将go的bin目录添加到系统$PATH中以便方便使用go的相关命令,配置后也不会再更改;$GOPATH:go项目在本地的开发环境的的项目根路径(以便项目编译,go build, go install),不同的项目在编译的时候该环境变量可以不同:上图: 2.3 GOPATH指配置的go的工作空间,区别于Go的安装包位置,GOPATH需要加入环境变量。比如GOPATH配置的路径指向gowork下,那么gowork目录下一般会有三个目录,bin,pkg,src,bin 下是可执行程序,理解为编译完成可直...阅读全文

Golang bytes.buffer详解

Buffer 介绍 Buffer 是 bytes 包中的一个 type Buffer struct{…} A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. (是一个变长的 buffer,具有 Read 和Write 方法。 Buffer 的 零值 是一个 空的 buffer,但是可以使用) Buffer 就像一个集装箱容器,可以存东西,取东西(存取数据) 创建缓冲器 func main() { buf1 := bytes.NewBufferString("hello") buf2...阅读全文

博文 2019-01-28 15:34:49 小马哥_Magical

新贵 Rust(1)

首先要明确的一点就是 rust 是系统级别的底层开发语言。与 c++ 处于同一层面。rust 有可能在将来逐步取代 C++ 在嵌入式和游戏领域老大的地位。而且 rust 在区块链技术领域也有不熟的表现Rust 是一种注重高效、安全、并行的系统程序语言。Mozilla将 Firefox 的命运与Rust语言捆绑起来。Rust是Mozilla主导开发的注重安全、速度和并发的系统级编程语言,最新版本为1.15。随着Rust的成熟,Mozilla开始尝试用Rust开发Firefox的组件,其中包括核心引擎Servo/Project Quantum。 Rust VS golangCargo.toml 文件为包管理工具,类似于 package.json golang作为服务器语言仍然是相当不错的选择,不...阅读全文

上链(SimpleChain)技术社区激励计划:Bug Bounty

如果在体验上链测试网络或对该网络进行技术测试的过程中,发现BUG或提供对于代码的修改建议,你将有机会获得SIPC作为激励奖金。激励总奖金高达10000 SIPC!!!此次活动持续到SimpleChain2.0(2019年年底)版本上线,激励奖金将会在每月的月底送出。如何参与?1) 下载相应操作系统的Go版本: https://golang.org/下载你所使用的操作系统下的客户端程序:https://golang.org/project/按照GitHub上的README文档进行测试体验:https://github.com/simplechain-org/go-simplechain2) 如果你发现BUG或提供对于代码的修改建议,欢迎到GitHub上提交。格式如下:My Operating ...阅读全文

博文 2019-03-11 17:34:42 SimpleChain社区

菜鸟求助:关于goroutine问题

现需要设计一款SNMP采集器,采集共约50台机器的数据,每台机器上有若干指标值需采集,且每个指标值需独立设置采集周期,我设想的是使用goroutine对50台机器进行并发采集,其中对每项指标采集也使用goroutine,请大牛们赐教,这样的goroutine嵌套能实现吗?P.S.新手上路,求...阅读全文

徒手写一个JSON解析器(Golang)

前一阵子看到了一个Golang的JSON库go-simplejson,用来封装与解析匿名的JSON,说白了就是用map或者slice等来解析JSON,觉得挺好玩,后来有个项目恰好要解析JSON,于是就试了试,不小心看了一眼源代码,发现竟然是用的Golang自带的encoding/json库去做的解析,而其本身只是把这个库封装了一层,看起来更好看罢了。于是心想能不能徒手写一个解析器,毕竟写了这么多年代码了,也JSON.parse,JSON.stringify了无数次。捣腾了两天,终于成了,测试了一下,性能比自带的库要高很多,速度基本上在1.6到7倍之间(视JSON串的大小和结构而定),所以决定写这篇文章分享一下思路。 先插一个段子,作为一个已经完完整整写了将近三年代码的老码农,前一段面试,不止...阅读全文

博文 2017-07-24 18:06:46 一路行歌

使用Envoy 作Sidecar Proxy的微服务模式-5.rate limiter

本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标收集(第四部分) rate limiter(第五部分) 第五部分 - rate limiter Envoy ratelimit filters Envoy通过两个过滤器与Ratelimit服务集成: Network Level Filter: envoy为安装过滤器的侦听器上的每个新连接调用Ratelimit服务。这样,您可以对通过侦听器的每秒连接进行速率限制。 HTTP Level Filter:Envoy为安装过滤器的侦听器上...阅读全文

博文 2019-03-01 21:34:40 iyacontrol

Go语言学习笔记(七)之方法

在面对对象编程(OOP),我们常把某个对象实现的具体行为的函数称作方法。例如 C++中A类的某个函数实现了某种行为,我们就叫做 A 的方法。在 golang 中如果要定义一个方法,只需要在函数声明时,在函数名前加上某个变量,即该变量实现了某个方法。 方法声明 type Point struct{ X, Y float64 } //按照传统方法,我们可能会按照下面的方式来写 func Distance(p, q Point) float64 { return math.Hypot(q.X - p.X, q.Y - p.Y) } //但在 go 语言中则是这样 func (p Point) Distance(q Point) float64 { return math.Hypot(q.X-p.X...阅读全文

博文 2019-04-13 16:34:40 程序员Morgan

CMDR-05: Tricks / Walks / Hooks

暂时来讲,这是最后一篇关于 cmdr 的系列介绍文章了。 所有这个系列包括: 另一个go命令行参数处理器 - cmdr cmdr 02 - 复刻一个 wget cmdr 03 - 用流式接口定义命令行参数处理选项 cmdr 04 - 简单微服务 cmdr 05 - 扫尾 - Tricks/Walks/Hooks 这一次的内容算是杂烩乱炖。 Tricks ~~debug 已经在前文讲述过了。这里不再凑字数了。 --tree cmdr 提供了一个内置的选项:--tree。 虽然这是一个选项,但它和 --version 一样是有着命令一样的效果:如果 cmdr 在命令行参数中检测到了 --tree,那么它会忽略已经处理的和将要处理的子命令、选项,直接执行 --tree 的 Action。 要想达到...阅读全文

聊聊在Go语言里使用继承的翻车经历

Go不是面向对象的语言,但是使用组合、嵌套和接口可以支持代码的复用和多态。关于结构体嵌套:外层结构体类型通过匿名嵌套一个已命名的结构体类型后就可以获得匿名成员类型的所有导出成员,而且也获得了该类型导出的全部的方法。比如下面这个例子: type ShapeInterface interface { GetName() string } type Shape struct { name string } func (s *Shape) GetName() string { return s.name } type Rectangle struct { Shape w, h float64 } Shape类型上定义了GetName()方法,而在矩形Rectangle的定义中匿名嵌套了Shape类型...阅读全文

博文 2020-04-20 13:32:43 Kevin

golang TCP

service.go package main import ( "net" "fmt" ) // TCP service func main() { // 1.监听本地端口 linser, err := net.Listen("tcp", "127.0.0.1:27666") if err != nil{ fmt.Println("Linsten 127.0.0.1:27666 faild, error of:", err) return } // 2.等待客户端连接 client_conn, err := linser.Accept() if err != nil { fmt.Println("conn error of:", err) return } // 3.接收客户端信息 var...阅读全文

博文 2020-05-12 01:32:52 小麦客

golang goroutine_并发

并发:一箭多发 并行:同一时刻一起执行(齐头并进) 例子: package main import ( "fmt" "sync" ) // goroutine 多任务操作 var wg sync.WaitGroup // 声明一个全局的 wg 计数器对象[上下文管理器] (WaitGroup 结构体类型) func fun1(i int) { defer wg.Done() // 延迟调用,当次函数将要执行完毕时调用 fmt.Println(i) } func main() { for i := 0; i < 100; i++{ // 每次循环开启一个新的线程执行一个匿名函数 wg.Add(1) //go func(i int){ // 匿名函数 // defer wg.Done() // ...阅读全文

博文 2020-04-17 23:32:47 小麦客

Golang项目部署2,代理部署

文章来源:https://goframe.org/deployment/proxy 代理部署 代理部署即前置一层第三方的WebServer服务器处理所有的请求,将部分请求(往往是动态处理请求)有选择性地转交给后端的Golang应用程序执行,后端部署的Golang应用程序可以配置有多个。这种模式常用在复杂的WebServer配置中,常见的场景例如:需要静态文件分离、需要配置多个域名及证书、需要自建负载均衡层,等等。 虽然Golang实现的WebServer也能够处理静态文件,但是相比较于专业性的WebServer如nginx/apache来说比较简单,性能也较弱。因此不推荐使用Golang WebServer作为前端服务直接处理静态文件请求。 Nginx 我们推荐使用Nginx作为反向代理的前...阅读全文

minikube mac 运行记

得到了错误信息 minikube start image.png 进入minikube github 官网 https://github.com/kubernetes/minikube 在 minikubhe docs 中 https://minikube.sigs.k8s.io/docs/start/macos/ image.png minikube start --vm-driver=virtualbox //估计跑很久很久吧 157517584167110414 我的界面卡在这一步,等一下排除原因 快速入门给你的几个命令行 kubectl get po -A minikube config set memory 4096 下一步就是 exmplate https://minikube....阅读全文

Rabbitmq 简单介绍,安装和go客户端使用

Rabbitmq 简单介绍,安装和go客户端使用 1,消息队列介绍 1.1 什么是消息队列? 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。消息队列,一般我们会简称他为MQ(Message Queue),消息队列可以简单的理解为:把要传输的数据放在队列中 说明: Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一...阅读全文

博文 2019-09-14 00:03:10 铁血军人

async.waterfall变为async/await

1. 我的工作主要是pomelo node.js后端主程,因为之前经常用async.waterfall 这个第三方async库,并且这个库也很好用,就是代码有些多,后来换工作了公司用了新框架。2. 开始大量使用async/await来开发, 或者用promise或者其他的东西,主要目的就是为了解决低于地狱回调的问题。3. 使用async/await的过程中发现一个问题,因为服务器端开发,所以对错误是很敏感的,并不允许有错误,而不去管它,当时能想到的方案有两个。其一:对用到 await的地方用try catch 方法一 其二是: 方法二 如果有多个await的话,每个都用try catch那样体验很不好,所以我经常在项目中用到的就是方法二,但是方法二也不是很好。然后我在网上找了找,还有一种方法...阅读全文

博文 2020-02-10 23:32:52 夏伊馨

Go语言的实时GC——理论与实践

Go语言能够支持实时的,高并发的消息系统,在高达百万级别的消息系统中能够将延迟降低到100ms以下,着一切很大一部分需要归功于Go的高效的垃圾回收系统。 对于实时系统而言,垃圾回收系统可能是一个极大的隐患,因为在垃圾回收的时候需要将整个程序暂停。所以在我们设计消息总线系统的时候,需要小心地选择我们的语言。Go一直在强调它的低延迟,但是它真的做到了吗?如果是的,它是怎么做到的呢? 在这篇文章当中,我们将会看到Go语言的GC是如何实现的(tricolor algorithm,三色算法),以及为什么这种方法能够达到如此之低的GC暂停,以及最重要的是,它是否真的有效(对这些GC暂停进行benchmar测试,以及同其它类型的语言进行比较)。 From Haskell to Go 我们用pub/sub消...阅读全文

博文 2017-08-22 01:05:14 terasum

Golang 在 Mac、Linux、Windows 下如何交叉编译

载自https://blog.csdn.net/panshiqu/article/details/53788067 Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO...阅读全文

博文 2018-06-28 13:34:39 你清澈又神秘

Go 译文之词法分析与解析

作者:Adam Presley | 地址:Writing a Lexer and Parser in Go - Part 1 译者前言 一直对词法分析与解析的话题比较感兴趣,最近发现了好几篇相关的优秀文章,准备好好翻译和研究下。我的理解,词法分析与解析的应用还是比较广泛的,无论简单的配置文件、各种模板语言、还是我们每天在写编程语言都离不开它。 本篇文章一个系列文章的第一篇,主要介绍的是词法分析与解析的一些基础概念,包括什么是词法分析,什么是解析,Token 如何表示等等。 正文如下: 从今天开始,我将会用三篇文章介绍在 Go 中如何构建一个简单的词法分析与解释器。文中介绍的内容主要是基于 Rob Pike 在 2011 年关于 Lexical Scanning In Go 的演讲。这个系列文...阅读全文

博文 2019-08-01 10:32:41 波罗学

<转载>借助 Docker 企业版大幅节省 IT 预算

摘要: 我们最近启动了一项针对系统管理员和 IT 专业人员的系列学习内容,称之为“IT 人员的 Docker 入门”。我们此前已经介绍了一些基础知识,包括容器技术以及面向企业的 Docker 解决方案。 今天,我们讨论一个重要的问题:您投入时间和公司的资金来进一步探索 Docker 企业版(EE),是否值得? 对这个问题的明确回答是:肯定。已经采用 Docker 的 IT 团队发现,部署和维护应用程序的速度更快、更轻松,而且可以更好地利用基础设施,而无需触及底层代码。开发团队也正在体验生产力的大幅提升,新的开发人员能够更快上手,从开发到生产的周期大幅缩短,以及消除了应用程序对机器的依赖性("它在我的机器上可以正常工作")所带来的困扰。 640_090404_jpeg 您可...阅读全文

基于Golang徒手写个转发代理服务

由于公司经常需要异地办公,在调试的时候需要用到内网环境,因此手动写了个代理转发服务器給兄弟们用,项目地址是:socks5proxy。 选型上,语言上就选择了Go,简单清晰,转发协议选择了socks5。 SOCKS5协议介绍 SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递,SOCKS是"SOCKetS"的缩写。 SOCKS5是SOCKS4的升级版,其主要多了鉴定、IPv6、UDP支持。 SOCKS5协议可以分为三个部分: (1) 协议版本及认证方式 (2) 根据认证方式执行对应的认证 (3) 请求信息 (1)协议版本及认证方式 创建与SOCKS5服务器的TCP连接后客户端需要先发送请求来协议版本及认证方式, VER NMETHODS METHODS 1 1 1-25...阅读全文

博文 2019-02-03 12:34:44 机械视角

Go语言的程序结构

# Go语言的程序结构 # *** ## 命名规则 **Go 语言的命名规则和C语言的命令没什么不同,都是由数字,下划线,字母组成,且必须以下划线或者字母开头。大小写敏感(var a int 和 var A int是不同变量)** GO语言的关键字主要包括25个:

...阅读全文

博文 2017-08-14 14:06:16 wenxuwan

面向 Go 开发人员的链代码深入研究,第 3 部分: 为基于 Hyperledger Fabric v0.6 的区块链网络开发客户端应用程序

面向 Go 开发人员的链代码深入研究,第 3 部分 为基于 Hyperledger Fabric v0.6 的区块链网络开发客户端应用程序深入剖析 Node.js 客户端应用程序的组成部分 Varun Ojha2017 年 8 月 30 日发布 系列内容:此内容是该系列 # 部分中的第 # 部分: 面向 Go 开发人员的链代码深入研究,第 3 部分http://www.ibm.com/developerworks/cn/library/?series_title_by=**auto**敬请期待该系列的后续内容。此内容是该系列的一部分:面向 Go 开发人员的链代码深入研究,第 3 部分敬请期待该系列的后续内容。 获取最佳免费工具、培训和社区资源的每月集萃,帮助您开始使用区块链。最新一期 | 订...阅读全文

博文 2017-11-29 06:28:32 www.ibm.com

Android OKHttp系列5-ConnectInterceptor

文章将会被同步至微信公众号:Android部落格 Android OKHttp系列皆为本人原创文章,未经允许严禁转载 概述 选定连接接口,并开始连接目标 流程图如下: okhttp-ConnectInterceptor.jpg 原图片地址:http://i66.tinypic.com/rjqglx.jpg 1、找RealConnection 选择合适的HttpCodec,为什么要选择呢?因为涉及到Http版本的问题,此处需要兼容,先看代码: boolean doExtensiveHealthChecks = !request.method().equals("GET"); HttpCodec httpCodec = streamAllocation.newStream(client, cha...阅读全文

Ruby程序员的Golang之旅01

golang的import @ ruby的require 我们正好趁这个机会回顾一下ruby的require先 require(name) → true or false require加载指定的文件,如果加载成功则返回true,如果已经加载过则返回 false。 require 'csv' => true require 'csv' => false 如果文件名解析出来不是一个绝对路径,它将会在 $MY_RUBY_HOME 列出的目录中被查找。 require 'foo' => cannot load such file -- foo from /Users/jiyarong/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/...阅读全文

博文 2017-08-04 15:05:09 peter_ji

如何设计一个微型分布式架构?

序言(初衷) 设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。缓存服务器存储模型架构(背景): 图1 存储模型腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。随着业务带宽自然增长,用户端带宽增长,假设业务回源率不变的情况下,磁盘缓存淘汰更新(淘汰)速率变快,表现为以下业务瓶颈(iowai...阅读全文

博文 2018-09-28 18:34:42 Java架构007

与go邂逅(二)——go当中的基本程序结构(数组 切片 map string)

前言 学习一门语言的时候,难免从最简单的程序结构学起,这些东西在掌握了一门别的开发语言的情况(如大名鼎鼎的java),就会显得如鱼得水了,下面会把我学习一些简单例子分享出来。 基本程序结构 快速为一些变量赋值 const ( NUM1 = 1 + iota NUM2 NUM3 NUM4 ) //输出结果:1,2,4,8 func TestPrint(t *testing.T) { t.Log(NUM1, NUM2, NUM3, NUM4) } 快速的实现一些数值交换 //数值交换 func TestExchange(t *testing.T) { //也可以这样定义变量:var aa int = 1 a := 1 b := 2 t.Log(a, b) //交换数值 b, a = a, b t...阅读全文

博文 2019-04-26 17:34:46 stone想静静

容器、Docker与Kubernetes——从基础设施的容器化谈起

【编者的话】作者是Collective Idea公司的运维,也是个对技术有深度理解的人,这篇文章是作者在实践immutable infrastructure理念过程中对容器的理解,这是第一篇,主要讲述传统运维工具如Chef与Docker等容器化运维工具的不同以及解决的问题。 作为一名长期从事运维的工程师来说,我会时常审视维护服务器工作的简单性与可重现性;而我的一个最重要的工作原则便是“永远不要手动操作服务器”。所有服务器都必须由工具进行启动(provisioned)与配置以运行,同时通过工具来监控、维护服务器的状态——而我的选择是Chef;当然你也可以有很多其他选择如:Ansible、Salt与Puppet。 在Collective Idea中,Chef确实运行得非常好,它管理着公司内部与外...阅读全文

基于hashicorp/raft的分布式一致性实战教学

本文由云+社区发表 作者:Super 导语:hashicorp/raft是raft算法的一种比较流行的golang实现,基于它能够比较方便的构建具有强一致性的分布式系统。本文通过实现一个简单的分布式缓存系统来介绍使用hashicorp/raft来构建分布式应用程序的方法。 1. 背景 ​ 对于后台开发来说,随着业务的发展,由于访问量增大的压力和数据容灾的需要,一定会需要使用分布式的系统,而分布式势必会引入一致性的问题。 ​ 一般把一致性分为三种类型:弱一致性、最终一致性、强一致性。这三种模型的一致性强度逐渐递增,实现代价也越来越大。通常弱一致性和最终一致性可以异步冗余,强一致性则是同步冗余,而同步也就意味着影响性能。 ​ 对常见的互联网业务来说,使用弱一致性或者最终一致性即可。而使用强一致性...阅读全文

博文 2019-03-01 17:34:44 腾讯云加社区

Go -- 中开启gctrace

godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。 godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了gopherjs ,你也可以在浏览器上进行调试: 点击此处尝试原文调试窗口。通过原文的“DEBUG IT”按钮,你可以编辑程序并重新调试它。 工作原理 下面这张是描述上面例子的矢量图: 从中可以看出原始代码转换了两次:第一次godebug插入调试instrumentation,然后gopherjs将结果编译成JavaScript。 让我们看一下instrumentation步骤,以下是go...阅读全文

博文 2019-04-19 16:31:04 weixin_34378969

Golang学习笔记5——数组array

1.array的定义 定义数组的格式: var a[4]int //元素自动初始化为零 a := [...]int{19:1} //编译器按照初始化值数量确定数组长度 a := [5]int{1,2} //未提供初始值的元素自动初始化为零 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 数组在go中为值类型 2.数组指针和指针数组 //数组指针是指获取数组变量的地址。 //此时变量p就是指向数组的指针。特别注意p定义的类型为长度为100的数组的指针。 长度必须相等才能赋值。 func main() { var a = [...]int{99:1} var p *[100]int = &a fmt.Println(p) } //指针数组是指元素为指针类型的数组 func main(...阅读全文

博文 2017-10-22 09:04:44 MarksGui

Golang学习笔记1--开发环境准备

系统:Mac编辑器:Sublime text 3+gosublime(1)go语言安装Golang中国下载:https://www.golangtc.com/download本文在编写的时候,使用的版本是:go1.9.darwin-amd64.pkg,下载后直接安装就行,安装完开一个终端,输入:go version可以查看是否安装成功安装完后需要配置环境变量export GOPATH=/Users/lihan/Develop/golang/workspaceexport GOBIN=$GOPATH/binexport PATH=$PATH:$GOBIN(2)安装sublime Text 3中的package install去网上搜索此类相关的教程(3)通过package install安装g...阅读全文

博文 2017-09-17 15:34:49 Harry_li

如何使用 Golang 日志监控你的应用程序?

你是否厌烦了那些使用复杂语言编写的、难以部署的、总是在不停构建的解决方案?Golang 是解决这些问题的好方法,它和 C 语言一样快,又和 Python 一样简单。但是你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性:它们过于被滥用以至于它们的作用都被忽视了。在进一步深入之前,我们首先会介绍 Golang 日志的基础,并讨论 Golang 日志标准、元数据意义、以及最小化 Golang 日志对性能的影响。通过日志,你可以追踪用户在你应用中的活动,快速识别你项目中失效的组件,并监控总体性能以及用户体验。I. Go...阅读全文

博文 2018-12-24 18:31:35 u014389734

Golang sync.Once使用

package main import ( "fmt" "sync" ) func main() { var count int increment := func() { count++ } var once sync.Once var increments sync.WaitGroup increments.Add(100) for i := 0; i < 100; i++ { go func() { defer increments.Done() once.Do(increment) }() } increments.Wait() fmt.Printf("Count is %d\n", count) } 程序输出如下, image.pn...阅读全文

博文 2019-06-08 17:32:39 FredricZhu

详解SLB、EIP、NAT网关之间区别, 合理选择云上公网入口

摘要: 概述 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? **点此查看原文:http://click.aliyun.com/m/41840/** **开始** 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? 概念 -- **负载均衡SLB** **对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。** 可见云计算中的负载均衡除了通过流量分发让后端的服务器负载均衡,还有两个重...阅读全文

Go语言从入门到精通-04| Socket客户端与服务端

请从github下载配套代码: https://github.com/shuningzhang/learn_golang 大家都知道Web服务是基于HTTP协议的,而HTTP协议又是TCP协议上的应用层协议。因此我们在开发一个Web服务之前,我们先介绍一下如何使用Go语言开发一个基于TCP的客户端与服务端程序(关于TCP协议的原理可以参考本号之前的文章《从socket到TCP协议,透彻理解网络编程》)。 Go语言从入门到精通-04| Socket客户端与服务端 程序比较简单,服务端用于等待客户端的连接,连接建立成功后,如果接到客户端的数据,则原封不动的返回相同的数据。客户端建立与服务端的连接,连接建立成功后向服务端发送字符串数据,并等待接收服务端的返回。 服务端 前面已经介绍,服务端用于等待...阅读全文

博文 2019-03-20 00:34:41 萨泥君

理解Kubernetes网络:services篇

在本系列的第一篇文章中,研究了kubernetes如何结合使用虚拟网络设备和路由规则,以允许在一个群集节点上运行的Pod与在另一个群集节点上运行的Pod通信,只要发送者知道接收者的Pod网络即可。 IP地址。如果您还不熟悉Pod的交流方式,那么在继续之前值得一读。集群中的Pod网络很简单,但仅凭其不足以创建持久性系统。那是因为kubernetes中的Pod是短暂的。您可以将Pod IP地址用作终结点,但不能保证该地址在下次重新创建Pod时不会更改,这可能由于多种原因而发生。 您可能已经意识到这是一个老问题,并且它有一个标准的解决方案:通过反向代理/负载均衡器运行流量。客户端连接到代理,代理负责维护将请求转发到的健康服务器列表。这对代理服务器提出了一些要求:代理服务器本身必须是耐用的并且能够抗...阅读全文

break default func interface select
case defer go map