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

Go 官方博文 Module 第四部分:v2 及更高版本

## 简介 本文是 Go modules 系统的第四部分 - Part 1: [使用 Go Modules](https://blog.golang.org/using-go-modules) [译文](https://studygolang.com/articles/19334) - Part 2: [迁移到 Go Modules](https://blog.golang.org/migrating-to-go-modules) [译文](https://studygolang.com/articles/23133) - Part 3: [发布 Go Modules](https://blog.golang.org/publishing-go-modules) [译文](https://s...阅读全文

博文 2019-12-04 20:10:53 befovy

Go语言DefaultClient没有设置请求超时

今天看到这篇文章:Don’t use Go’s default HTTP client。总结起来就是直接使用Go语言的http.Post,http.Get等方法时,底层连接使用的是DefaultClient。而DefaultClient没有设置请求超时: // DefaultClient is the default Client and is used by Get, Head, and Post. var DefaultClient = &Client{} 因此,如果服务器端如果一直无响应的话,就会把当前发出请求的goroutine挂死。因此如果要使用DefaultClient,一定要留心这个陷阱...阅读全文

go 垃圾回收:三色算法

三色算法 go垃圾回收器的操作都是基于三色算法,这篇文章主要来说明此算法。 注意:三色算法并不是go独有的,它也会在其它编程语言中使用到 严格来说,在Go中这个算法的官方名称是叫做三色标记清除算法(tricolor mark-and-sweep algorithm)。它可以和程序一起并发工作并且使用写屏障(write barrier)。这就意味着,当Go程序员运行起来,go调度器去负责应用程序的调度,而垃圾回收器会像调度器处理常规应用程序一样,去使用多个goroutines去进行工作。 这个算法背后的核心思想是由Edsger W. Dijkstra,Leslie Lamport,A.J.Martin,C.S.Scholten和E.F.M.Steffens这些大佬提出的。算法首先发表在论文On...阅读全文

博文 2019-07-25 19:04:24 lucifer_L

超级干货:1元购《GO语言从入门到实战》

超级干货:1元购《GO语言从入门到实战》 Go 语言越来越重要了,很多云计算公司都是逢 Go 必招。而且 Go 语言在排行榜上上升势头最猛。基于此极客时间又推出了《 Go 语言从入门到实战》相关课程。 课程的作者是蔡超,人长的不仅帅,内容讲的也非常的给力。这套课程一共 45 讲,最重要的是大家喜爱的视频教程。 蔡超是谁? 能在 QCon 上做演讲的嘉宾,绝对一肚子干货。蔡超有 15 年的软件开发经验,曾在亚马逊(中国)、惠普等世界级 IT 公司担任过首席软件架构师。目前在 Mobvista 担任技术副总裁兼首席架构师,带领团队用 Go 语言构建了国内最大同时也是全球排名前十的移动广告平台,这个平台每天处理着来自世界各地的超过 500 亿次请求,在 Go 语言实现项目上有着丰富的经验。 课程能...阅读全文

博文 2019-09-04 10:32:48 乖儿子

Golang并发模型:轻松入门流水线FAN模式

前一篇文章《Golang并发模型:轻松入门流水线模型》,介绍了流水线模型的概念,这篇文章是流水线模型进阶,介绍FAN-IN和FAN-OUT,FAN模式可以让我们的流水线模型更好的利用Golang并发,提高软件性能。但FAN模式不一定是万能,不见得能提高程序的性能,甚至还不如普通的流水线。我们先介绍下FAN模式,再看看它怎么提升性能的,它是不是万能的。 这篇文章内容略多,本来打算分几次写的,但不如一次读完爽,所以干脆还是放一篇文章了,要是时间不充足,利用好碎片时间,可以每次看1个标题的内容。 FAN-IN和FAN-OUT模式 Golang的并发模式灵感来自现实世界,这些模式是通用的,毫无例外,FAN模式也是对当前世界的模仿。以汽车组装为例,汽车生产线上有个阶段是给小汽车装4个轮子,可以把这个阶...阅读全文

博文 2018-11-28 22:34:43 大彬

【go】继续go go go,ubuntu环境搭建及golang的依赖关系分析

这次是在ubuntu14.04 amd64上搭建go的编译环境,使用的IDE换成了sublime text,具体步骤参照的是 http://blog.csdn.net/aqiang912/article/details/46775409 ,我就不赘述了。 关于依赖分析,应该算是比较头疼的地方了。花了点时间看了语法,发现除了一些很不一样的地方比如类型放在变量后面等,其他大多跟C和java类似,很容易上手。 下面以一个小例子来说明golang是怎么import一个包的: 首先我们在自己的主目录下创建一个文件夹test,里面创建一个go文件,test.go,内容如下: package test import "fmt" func Test() { fmt.Printf("This is test-...阅读全文

博文 2016-07-01 02:00:00 puyangsky

Golang并发模型:轻松入门协程池

goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理。但有时候,我们还是想控制一下。 比如,我们有A、B两类工作,不想把太多资源花费在B类务上,而是花在A类任务上。对于A,我们可以来1个开一个goroutine去处理,对于B,我们可以使用一个协程池,协程池里有5个线程去处理B类任务,这样B消耗的资源就不会太多。 控制使用资源并不是协程池目的,使用协程池是为了更好并发、程序鲁棒性、容错性等。废话少说,快速入门协程池才是这篇文章的目的。 协程池指的是预先分配固定数量的goroutine处理相同的任务,和线程池是类似的,不同点是协程池中处理任务的是协程,线程池中处理任务的是线程。 最简单的协程池模型 简单协程池模型 上面这个图展示了最简单的协程...阅读全文

博文 2018-12-20 13:34:44 shitaibin

【MMORPG开发日志01】技术选型及踩过的坑

写在前面 之前的序言发出来之后,很多热心小伙伴给我留言和私信,给我提供了各种各样的想法。让我产生了一些想法,所以重新思考开这个坑的目的。结合我自身的情况,理论结合实际。做一次更完善的技术选型。并且把这周来踩过的坑总结一下,希望能对后来的小伙伴有帮助。 这篇文章的视频版在这里: 【MMORPG开发日志】004复刻魔兽世界,KBEngine服务器框架选择,安装和启动! 交流QQ群:872537977 项目地址github:https://github.com/Liweimin0512/uRPG 不得不吐槽一下,视频形式的开发日志所要付出的时间真的比写文章多得多啊。 开发目的 我在上篇文章中说我做这个项目是为了蹭魔兽世界怀旧服的热度其实是开了个玩笑。 真实的原因是我想涉猎自己从未接触过的游戏服务器...阅读全文

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

Functional Go: Vector Trie 的实现

上一篇 文章介绍了多种实现函数式编程当中持久化数据结构的思路, 其中重点对 Vector Trie 这种数据结构的实现原理进行了解释。这一次我们就使用 Golang 来初步地实现这种数据结构。 这篇文章是系列文章的一部分,如果还没有浏览过文章的其它部分请参考: 持久化数据结构简介 Vector Trie 的实现 (本文) Transient 及持久化 首先我们来回顾一下 Vector Trie 的设计思路,为了代替 ArrayList 这种数据结构以及兼顾高性能的随机访问和内存使用, Vector Trie 主要采用了以下几种设计: 将 ArrayList 连续的地址空间切分成一段一段定长的数组 使用 Trie 树结构将这些分段组织起来 读取和写入的时候,利用 Trie 树检索的方法查找目标...阅读全文

博文 2017-09-26 22:35:58 meter

【北京】雍和宫地铁口 快乐迭代 招聘 Go工程师 待遇好

公司简介: 我们是一家北京的开发并运营互联网创新产品的公司。公司团队以技术为主导。在技术方面,倡导全面自动化、拥抱新技术。产品设计方面,倡导极简主义、注重细节。我们有海量用户的操盘经验,曾经把一款娱乐类 App 做到将近 1000 万用户,在苹果 App Store 香港区、台湾区下载量排行第一。公司得到了顶级 VC 的投资。 福利待遇: 满足你期待的薪资15K-30K左右,有年终奖,而且试用期薪资不打折,入职即缴纳五险一金,双休,带薪年假,团建聚餐,节日福利,生日福利,免费体检,免费工作餐,旅游等福利多多… Go 工程师--职位描述: 熟悉 Go 语言 有高负载 Server 实战经验 对计算机技术有发自内心的兴趣 必须有无障碍阅读英文技术文献的能力 联系方式: ...阅读全文

一招教你无阻塞读写Golang channel

无论是无缓冲通道,还是有缓冲通道,都存在阻塞的情况,教你一招再也不遇到channel阻塞的问题。 这篇文章会介绍,哪些情况会存在阻塞,以及如何使用select解决阻塞。 阻塞场景 阻塞场景共4个,有缓存和无缓冲各2个。 无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 // 场景1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh fmt.Println("read from no buffer channel success") // Output: // fatal error: all goroutines ...阅读全文

博文 2018-11-16 13:34:40 大彬

带你了解“比特币黄金”和SegWit2x分叉

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 10月25日,比特币黄金从比特币中分离出来创造出一个基于ASIC挖矿的数字货币。几周之后,比特币公司中一个重要的集团想要根据 “纽约协议” 定义的SegWit2x方案来进行硬分叉,也许将要导致另一个新币的诞生。 如果这些都实现,在这篇文章发表后大约一个月内,比特币就会有三个不同的区块链和三种不同类型的币。一个区块链会符合现有的比特币协议;为了方便文章叙述,这个币会被称为“BTC”。第二个区块链会符合“比特币黄金协议”,这篇文章中,这个币会被称为“BTG”。第三个区块链会符合SegWit2x协议;这个币种将被称为“B2X”。 好消息是每个BTC都会有效地复制在比特币黄金和SegWit2x的区块链上。如果在分叉的时候...阅读全文

博文 2019-09-19 15:02:58 链客

Goland使用初探以及运行流程浅析

这篇文章虽然面向初学者,但愿意介绍下Go语言的运行机制和Goland的运行流程。Goland作为```Jetbranis ```家的```IDE ```,也被许多互联网公司所使用。下面以goland视角,从安装到运行介绍入门应该注意的问题 个人选择的是```Go1.8 ```,为普遍企业选择的```Go version ``` Go1.8 : ```https://dl.google.com/go/go1.8.windows-amd64.msi``` Go1.8 doc : ```https://golang.org/doc/go1.8``` 让我们先来看看``` Goland```中的编译参数 ```GOPATH``` 是指自己希望的工作目录 ```GOROOT ``` 是指自己安装Go语...阅读全文

博文 2019-02-02 09:46:35 complone

聊聊初创公司的后端语言选型(小众语言)

在创业公司初创伊始,如何选择合适的语言决定了产品后续的技术栈和如何进行合理的业务支撑方向。如果你在读这篇文章之前,更倾向于选择Java/C#/PHP常见语言技术栈,我觉得对于你而言,这篇文章帮助不大。因为对你而言,这些技术栈意味着更加方便招人,更方便的故障处理资料等等。但是如果一个初创公司想要选择合理的小众语言技术栈,我想这篇文章对你也许有一些帮助。 在文章开始之前,我觉得有必要描述一下所谓的小众语言,这里我在最初进行技术选型时,考察了包括: Python: 你可能在接触爬虫、大数据分析等等方面听过Python的大名,大家都知道Pythonista都习惯说的一句话就是:人生苦短,我用Python。 Ruby: 你如果做过Web框架,你遇到最多的是很多人都会提到RoR框架。用过之后只有一个惊叹...阅读全文

博文 2017-02-10 15:45:16 kevin

Golang高效编写(整理)

这是一篇如何编写高效Golang语言程序的文章。这是从一些开发者的经验总结中整理出来的。根据这篇文章,你可以编写出一篇更高效的Golang程序。 尽量使用直接的类型 interface{}提供了golang中的interface类似于java的interface、PHP的interface或C++的纯虚基类。通过这种方式可以提供更快捷的编码。但是这种方式也带来了一些问题,最大的问题还是性能问题。 // method 1 a.AA() // method 2 v.(InterfaceA).AA() // method 3 switch v.(type) { case InterfaceA: v.(InterfaceA).AA() } 这三组方法性能逐个下降,最好的方式是直接进行类型引用。 指针...阅读全文

Go与WebAssembly

在之前的一篇文章《WebAssembly的过去,现在和未来》,简单的介绍了WASM的历史,现状以及即将带来的特性。这篇文章,将会简单的使用Go的API来生成WASM,通过与JS的交互来实现WASM的加载和执行。使用Go的原因也是个人的爱好,其非常简洁,拥有静态语言的可维护性及性能,同时还拥有动态语言的开发效率,灵活性(这篇文章要求你对Go有一定的了解,以后有机会也会写一些Go的入门文章)。Hello world1、首先需要安装Go1.11+的版本,WebAssembly在Go1.11得到支持2、在Go编译时需要指定OS参数为js,ARCH参数为wasm,就像这样:GOARCH=wasm GOOS=js go build -o lib.wasm main.go 编译完成会在当前目录下生成lib...阅读全文

博文 2018-12-12 15:45:10 Richard

最近看了篇文章,有一部分内容是关于端口号数量限制的,感觉是作者理解错误了,有懂的帮忙解答一下

16位的端口号数量有限,如果每次后端交互都需要新建连接,理论上来说,同时请求后端Service的Goroutine数量无法超过65535这个硬性限制,在如今这个动辄“十万”“百万”高并发时代,最高6w并发貌似不太拿得出...阅读全文

Golang for Android or iOS 使用记录

[TOC] 环境 OSX 10.10.5 jdk1.8.0_92 golang 1.7 Android SDK 25.1.7 Andorid-NDK-r12b Andorid Studio 1.5.1 xcode 7.2.1 swift 2.1.1 目前golang bind 支持的类型说明 https://godoc.org/golang.org/x/mobile/cmd/gobind 安装 gomobile go get -u -v golang.org/x/mobile 会报告一个错误 package golang.org/x/mobile: no buildable Go source files in /Users/sinlov/go/src/golang.org/x/mobile...阅读全文

博文 2017-03-05 19:34:56 泛原罪

游戏服务器中的数据库异步操作技术和游戏数据的保存机制

在游戏服务器中,处理玩家登陆需要向数据库查询玩家的账号和密码,玩家上线和下线需要对玩家的角色数据从数据库中读取和保存。可以说,相对于游戏逻辑处理来说,数据库操作是一种相对很慢的操作,即便你通过使用多个线程多个数据库连接来提高数据库操作的处理能力,但是,在高并发高负载的服务器应用中,这样仍然会是相当的负载瓶颈。设想这样一种设计方案,见下图: image 在大量玩家登陆游戏服务器时,由于有大量的数据库访问请求,即便是有自己实现的CACHE机制,还是会导致服务器耗尽所有的逻辑线程资源,服务器的处理能力将降低成DBMS的处理能力。 为了不阻塞逻辑线程,可以采用异步数据库访问的方式,即数据库操作请求提交给专门的数据库处理线程池,然后逻辑线程不再等待数据库处理结果,继续处理其他,不再阻塞在这里。 抽象的...阅读全文

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

Go网络开发中的两个技术点

最近碰到群里网友问如果检查网络连接的Timeout,联想最近看到的另一个问题, 在这篇文章统一记录一下。 如果检查一个网络错误是Timeout导致的? 自 Go 1.6开始, 所有的超时导致的网络错误都可以通过net.Error的Timeout()方法检查。 123if err, ok := err.(net.Error); ok && err.Timeout() { ……} 更早版本的Go并没有专门的检查Timeout方法。 可以参考: https://stackoverflow.com/questions/23494950/specifically-check-for-timeout-error 产品中一定不要使用默认的http.Get 如果你觉得方便,直接使用http.Get或者类似的...阅读全文

博文 2018-08-31 08:59:05 smallnest

【MMORPG开发日志01】技术选型及踩过的坑 - 草稿

写在前面 之前的序言发出来之后,很多热心小伙伴给我留言和私信,给我提供了各种各样的想法。让我产生了一些想法,所以重新思考开这个坑的目的。结合我自身的情况,理论结合实际。做一次更完善的技术选型。并且把这周来踩过的坑总结一下,希望能对后来的小伙伴有帮助。 这篇文章的视频版在这里: 【MMORPG开发日志】004复刻魔兽世界,KBEngine服务器框架选择,安装和启动! 交流QQ群:872537977 项目地址github:https://github.com/Liweimin0512/uRPG 不得不吐槽一下,视频形式的开发日志所要付出的时间真的比写文章多得多啊。 开发目的 我在上篇文章中说我做这个项目是为了蹭魔兽世界怀旧服的热度其实是开了个玩笑。 真实的原因是我想涉猎自己从未接触过的游戏服务器...阅读全文

博文 2019-10-10 01:32:45 aside section ._1OhGeD

Go语言 Go1.1新调度器详解

创翻译文章,转载请注明出处:服务器非业余研究-sunface 简介 Go1.1更新中最重要的特性之一就是由Dmitry Vyukov开发的全新的调度器。新的调度器能极大的提高Go并行程序的性能并且不需要对程序进行修改,因此我认为应该写一篇文章为大家介绍下新版的调度器特性。 这篇文章所写的绝大部分内容都可以在original design doc找到 ——这是篇很有技术含量而且很通俗易懂的文章,你所需要的知识都可以从这篇文章中获取,而且由于插入了配图,因此相对来说更清晰易读。 Go运行时系统需要用调度器来做什么? 首先我们需要了解下为什么需要新的调度器?为什么在操作系统能对线程进行调度的情况下还要创建一个用户空间的调度器? 对现存的Unix进程模型来说,POSIX线程API是一种逻辑上扩展,线...阅读全文

博文 2015-06-17 23:07:47 abv123456789

C Bindings in Go: A Practical Example Part 1

这篇文章对于想在go中使用c语言的朋友应该很有帮助,一步步讲解了怎么做。 另外,按照文章一步步做,需要安装 libspotify 库,可以到这里下载,各大平台都支持:http://developer.spotify.com/technologies/libspotify/ 文章链接:http://codegangsta.io/blog/2013/07/08/c-bindings-in-go-a-practical-example/ (其实点击标题也会跳转到原文...阅读全文

5大场景护航企业成长,实例解析阿里云适应性网络架构

企业成长的每个阶段,网络管理员都面临着不同的问题和挑战。公司初创时,等待设备送达度日如年。公司快速成长时,网络性能似乎永远跟不上业务需求,常常碰到“此网页无法打开,请稍后再试”的尴尬。当企业扩张跨越地域和国界时,各地客户体验参差不齐让人备受困扰。今天,我拿一个典型公司作为例子,根据这家公司不同阶段遇到的网络难题,给大家展示一下阿里云如何解决这些问题。X是一家互联网公司,公司的长期愿景是为全球网络游戏玩家提供身临其境的游戏体验。 视频地址:http://cloud.video.taobao.com/play/u/2776704142/p/1/e/6/t/1/50024830079.mp4 场景1:公司初创,产品研发测试 客户故事:X公司成立伊始,10人的核心开发团队小而灵活。公司意识...阅读全文

Go grpc配置

最近在研究Docker的源码时,读到libContainerd部分时,发现它用到了grpc.而此前只知道只是一个用于分布式系统中RPC的库.就借着这个机会,学习一下这个工具. 写过Java中的WSDL的朋友,会觉得其实它们的使用非常相似. 安装ProtoBuf 3 因为grpc依赖ProtoBuf,将我们写的服务定义转换成Go文件.所以我们需要安装ProtoBuf. 那为什么要安装ProtoBuf 3这个新出的,各个方面都还不是很完善的版本呢?官网上建议采用这个版本,就安装这个版本喽.如果我们安装ProtoBuf2,以后很可能会有兼容问题. 那如何安装呢? 首先,去ProtoBuf的Github主页下载最新版的ProtoBuf的包.在我写这篇文章时,最新版的是3.0.2.这里因为我们是为Go...阅读全文

博文 2017-05-08 02:32:29 AlstonWilliams

Goroutine 的同步(第三部分)

- 第一部分:https://studygolang.com/articles/14118 - 第二部分:https://studygolang.com/articles/14478 ## mutex 和 sync.Once 介绍 ![image](https://raw.githubusercontent.com/studygolang/gctt-images/master/sync-goroutine/part3-1.jpeg) 假设你的程序中有一个需要某种初始化的功能。该 Bootstrap 程序成本很高,因此将其推迟到实际使用功能的那一刻是有意义的。这样,当功能未激活时,就不会浪费 CPU 周期。 这在 Go 中如何完成? ```go package main import "fmt...阅读全文

博文 2018-11-10 09:58:22 krystollia

也许 Go 开发可以更简单!Go += Package Versioning

简评:对于Go来说一直以来依赖包的版本控制上没有一个好的方案,尽管社区诞生了不下十余个解决该问题的工具,但一直以来没有一个官方的支持。这个提案有望在Go的下个版本中看到官方的包版本控制了,去除了GOPATH依赖,同时还引入了module 的概念,真正意义上实现了重编译,可谓一次大的变更编译:缪斯的情人 是时候为 Go 添加包版本控制了! 更确切地说,我们需要把包版本的概念普及到Go 开发者和工具常用词汇中,以便在后续的相互沟通时能准确一致的表达哪些程序代码需要编译、运行和解析。同样,go 命令也需要准确的告诉开发者在编译中使用了哪个包的哪个版本。 版本控制可以让我们能够实现重编译。当我让你试用我程序最新版本时,我清楚的知道你不仅仅获取到的是我最新程序的代码,还包括我代码所依赖的相同版本的包,...阅读全文

博文 2018-02-23 11:34:39 缪斯的情人

在golang中如何使用rating-input来进行打分及评价

在我们之前的C++文章“利用rating-input PreviewWidget来对事物进行评价及打分”,我们已经展示了如何使用C++来在Scope中的Preview中对事物进行评价或打分。在今天的这篇文章中,我们将介绍如何在Go Scope中来做同样的事。我们可以通过这个例子来展示如何捕获在Go Preview中的按钮并得到它们的action id以进行分别的处理。 在Go文件中的Preview方法中: unc (s *MyScope) Preview(result *scopes.Result, metadata *scopes.ActionMetadata, reply *scopes.PreviewReply, cancelled <-chan bool) error { layou...阅读全文

博文 2016-02-14 03:00:01 UbuntuTouch

Go调度器系列(3)图解调度原理

如果你已经阅读了前2篇文章:《调度起源》和《宏观看调度器》,你对G、P、M肯定已经不再陌生,我们这篇文章就介绍Go调度器的基本原理,本文总结了12个主要的场景,覆盖了以下内容: G的创建和分配。 P的本地队列和全局队列的负载均衡。 M如何寻找G。 M如何从G1切换到G2。 work stealing,M如何去偷G。 为何需要自旋线程。 G进行系统调用,如何保证P的其他G'可以被执行,而不是饿死。 Go调度器的抢占。 12场景 提示:图在前,场景描述在后。 上图中三角形、正方形、圆形分别代表了M、P、G,正方形连接的绿色长方形代表了P的本地队列。 场景1:p1拥有g1,m1获取p1后开始运行g1,g1使用go func()创建了g2,为了局部性g2优先加入到p1的本地队列。 场景2:g1运行完...阅读全文

博文 2019-04-06 13:34:38 大彬

golang中的 struct & interface 嵌入(Embedding)

参考这篇文章 https://studygolang.com/articles/6934 package main import "fmt" type Printer interface{ Print() } type CanonPrinter struct{ Printname string } // 若不实现此方法则下面的赋值会报错 func (printer CanonPrinter) Print(){ fmt.Println("AAA") } type PrintWorker struct{ Printer // 内嵌了一个接口 name string age int } // 实现 xxx func (printworker PrintWorker) Print(){ fmt.Pr...阅读全文

博文 2018-12-21 15:34:42 个00个

Golang模仿七牛图片处理API

之前一直在用qiniu的存储服务,生成图片的缩略图,模糊图,视频的webp,现在需要把存储移到s3上,那么这些图片,视频处理就要自己动手写了,本文梳理一下大致的思路。 分析需求 先看一下qiniu的接口是如何处理图片的,例如先截取视频第一秒的图片,再把图片缩略,最后存储到一个新的key,命令可以这么写 vframe/jpg/offset/1|imageMogr2/thumbnail/400x|saveas/xxx, 可以看到三个操作之间用 | 符号分割,类似unix 的 pipe 操作。 上面的操作算作一个cmd, 一次API请求可以同时处理多个cmd,cmd之间用分号分割, 处理完毕后,在回调中把处理结果返回,例如 { "id": "xxxxx", "pipeline": "xxx", "...阅读全文

博文 2017-02-09 08:29:46 一堆好人卡

【MMORPG开发日志010】漫谈一些有的没的

【MMORPG开发日志010】漫谈一些有的没的 写在前面 首先是祝愿所有看到这篇文章的小伙伴新年快乐健康! 目前关于这个项目的文字版开发日志已经很久没更新了,这段时间我更新了很多视频形式的开发日志,感兴趣的可以访问我的B站主页:玩物不丧志的老李 游戏研发过程中,总是产生各种想法,这些想法纠结着我。 这篇文章可能很乱,因为我在打算写这篇文章的时候依然没有清晰的中心思想 换句话说,这篇文章只是我自言自语的对于这段时间独立开发的一个复盘 如果能对你有帮助,自然是最好的了。 这个项目的意义 事到如今,我不得不重新思考这个项目存在的意义。 诚然,在最开始,这个项目的存在仅仅是为了“学习”,学习什么?学习网络游戏的开发,特别是MMORPG游戏的开发。 所以我们的目标自然不是“创新”,而应该是“复刻”。 ...阅读全文

博文 2020-02-01 03:32:52 李维民0512

一步一步教你写BT种子嗅探器之二---DHT篇

之前写了原理篇,在原理篇里简单的介绍了一下DHT,但是还不够详细。今天我们就专门详细的讲一下嗅探器的核心-DHT,这里默认原理篇你已经读了。 背景知识 DHT全称 Distributed Hash Table,中文翻译过来就是分布式哈希表。它是一种去中心化的分布式系统,特点主要有自动去中心化,强大的容错能力,支持扩展。另外它规定了自己的架构,包括keyspace和overlay network(覆盖网络)两部分。但是他没有规定具体的算法细节,所以出现了很多不同的实现方式,比如Chord,Pastry,Kademlia等。BitTorrent中的DHT是基于Kademlia的一种变形,它的官方名称叫做 Mainline DHT。 DHT人如其名,把它看成一个整体,从远处看它,它就是一张哈希表,...阅读全文

博文 2017-02-09 08:32:47 shiyanhui

阿里云专家风移“出诊”记录:SQL Server 疑难杂症解决之道(上篇)

授人予鱼而不如授人予渔,本系列专题(上篇)为大家推荐了31篇好文,希望可以帮到大家! “出诊”:RDS SQL Server死锁(Deadlock) 1. RDS SQL Server死锁(Deadlock)系列之一使用DBCC捕获死锁 经常会被客户问道:“应用程序被死锁报错啦?影响很大,到底是哪个进程导致了死锁发生的啊?怎么解决啊?怎么办呀?”。如何解决呢? 点击阅读详情 https://yq.aliyun.com/articles/73856?utm_content=m_28061 2. RDS SQL Server死锁(Deadlock)系列之二使用Profiler捕获死锁 不管是RDS SQL Server还是自建,死锁的确是一个非常头疼的问题。这...阅读全文

Go基础学习记录之Session存储

Session存储 我们在上篇文章中介绍了一个简单的Session管理器的工作原理,除此之外,我们还定义了一个Session存储接口。在本次分享中,我将展示一个实现此接口的基于内存的会话存储引擎的示例。您也可以将其定制为其他形式的Session存储。 package memory import ( "container/list" "sync" "time" "github.com/durban89/wiki/session" ) // Store 存储 type Store struct { sid string // unique session is lastTime time.Time // last save time value map[interface{}]interface...阅读全文

博文 2018-10-31 10:34:44 DurbanZhang

go-callvis 代码分析工具

go-callvis 发现这个不错的工具,然后尝试用了一下,还有很多的问题,这篇文章,主要是讲解怎么使用。 go-callvis 是一个开发工具,其目的是通过使用来自函数调用关系图的数据及其与包和类型的关系来对程序进行可视概览。 这在你只是试图理解别人的代码结构,或在代码复杂性增加的大型项目中特别有用。 [TOC] 缺点 github项目上的文档写的不是很清晰,我尝试了一下,没用 图画的很乱,有时候完全摸不到头绪 官方示例 用法 github上的图例 三个例子 docker 使用 go-callvis github.com/项目具体路径 | dot -Tpng -o syncthing.png 解析的是main包 go-callvis -group pkg,type -focus [想要分析...阅读全文

博文 2019-01-26 20:34:41 sixgo

[系列] - go-gin-api 路由中间件 - 日志记录(三)

概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可。 这篇文章咱们分享:路由中间件 - 日志记录。 日志是特别重要的一个东西,方便我们对问题进行排查,这篇文章我们实现将日志记录到文本文件中。 这是我规划的,需要记录的参数: - request 请求数据 - request_time - request_method - request_uri - request_proto - request_ua - request_referer - request_post_data - request_client_ip - response 返回数据 ...阅读全文

博文 2019-09-05 22:34:22 訢亮

Golang recover return defer

最近在学习golang 发现程序panic使用recover捕获,返回值被坑了。 在网上看到篇文章:https://studygolang.com/articles/4809 两个结论: 多个defer的执行顺序为“后进先出”; defer、return、返回值三者的执行逻辑应该是:return最先执行,return负责将结果写入返回值中;接着defer开始执行一些收尾工作;最后函数携带当前返回值退出...阅读全文

博文 2017-11-15 04:03:25 我爱吃葱花

[系列] - go-gin-api 路由中间件 - Jaeger 链路追踪(五)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 捕获异常,这篇文章咱们分享:路由中间件 - Jaeger 链路追踪。 啥是链路追踪? 我理解链路追踪其实是为微服务架构提供服务的,当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。 咱们先看一张图: 这张图的调用链还比较清晰,咱们想象一下,随着服务的越来越多,服务与服务之间调用关系也越来越多,可能就会发展成下图的情况。 这调用关系真的是... 看到这,我的内心是崩溃的。 那么问题来了,这种情况下怎么快速定位问题? 如何设计日志记录? 我们自己也可以设计一个链路追踪,比如当发生一个请求,咱们记录它的: 请求的唯一标识 请求了哪些服务? 请求的服务依次顺序? 请求的 Reque...阅读全文

博文 2019-09-17 00:04:19 訢亮

golang使用redis对文章进行投票

最近在学redis,本人菜鸟.代码是过程式的,没考虑优化.就是发篇文章记录一下.感觉redis还是很强大的. 规则 评分 = 支持票数*(86400/200)+时间戳, 文章获得为200票就可以在首页展示一天,随着时间的流逝,当分数小于当前时间戳的时候,就从首页撤下. 使用hash记录文章的标题,链接,作者,文章发布时间,文章得到的投票数量. 使用两个有序集合来有序的存储文章:第一个有序集合的成员为文章ID,分值为文章的发布时间;第二个有序集合的成员同样为文章ID,分值为文章的评分.通过这两个有序集合,网站既可以根据文章发布的时间来展示文章,也可以根据文章评分的高低来展示文章. 为了防止用户对同一篇文章进行多次投票,网站需要为每篇文章记录一个已投票用户名单,为此,程序将为每篇文章创建一个集合...阅读全文

博文 2018-08-07 11:35:01 键盘侠

为什么我不会舍弃 Python 投奔 Go 语言

本文的作者:Russ Cox Russ Cox毕业于麻省理工和哈佛大学,曾在贝尔实验室参与过Plan 9 和 Unix操作系统的开发,最近在google,主要开发Go语言。 最近关于Go语言的话题很多,本月刚好是Go语言诞生3周年。这个语言在谷歌巨人的推动下最终很可能成为今后的主流语言。如果你想简单了解一下Go语言,这里有Go语言官方网站提供的一个很简单的中文版的“Go语言半小时速成教程”,不妨一看。 下面是译文内容: 最近,由于一篇“为什么我不会舍弃Python投奔Go语言(英文)”的博客,我收到了大量的邮件,这篇文章中,作者说Go语言除了“用返回值来处理异常错误”这点外,其它的都非常好。我想写出一点东西,解释一下Go语言为什么这样做,这会对大家都有用。 在Go语言中,规定的方式是,函数返...阅读全文

博文 2015-06-17 23:00:23 cometwo

ETCD探索

ETCD探索 梗概 这篇文章旨在从源码角度分析ETCD MVCC、Lease、Watch的实现,帮助我们更好的使用ETCD。 ETCD是什么? 这是ETCD官网给出的解释,ETCD是一个KV存储。现在有太多的KV存储中间件,我们为什么要选择ETCD呢?原因就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每一个中间件都有自己的特点,我选择ETCD有两个原因: ETCD是GO写的,所以GO用起来很方便。(不用ZK的原因) 扩容方便。 在讨论之前,我们先看下ETCD的目录结构 auth 访问权限 client/clientv3 GO客户端SDK contrib 里面放着raftexample...阅读全文

博文 2020-02-19 17:32:49 HammerMax

理解 Docker 中的 Volumes

理解 Docker 中的 Volumes Why 本文翻译自 Understanding Volumes in Docker,和原文作者一样,我在刚接触 Docker 的时候,对 Docker 中 Volumes 的概念也有些困惑,docker run -it -v /some/dir:/another/dir someImage:someTag 中的 -v 选项和 Dockerfile 中定义的 VOLUME 能达到相同的效果吗?看完这篇文章后才豁然开朗,所以翻译过来一方面巩固理解,另一方面分享一下。 译文 从 Docker IRC Channel (Ross:用了一下这里提到的 Docker IRC Channel,顺便看了关于 Python 和 C++ 的聊天室,原来网络上还有一群人在...阅读全文

博文 2017-02-10 13:44:09 Xiaohui Wang

Go:指针能优化性能吗?【译】

趁着元旦休假+春节,尝试把2018年期间让我受益的一些文章、问答,翻译一下。欢迎指正、讨论,希望对你也有所帮助。原文链接:Go: Are pointers a performance optimization? 以下,开始正文 过去几周时间,我回答了许多关于使用指针优化性能的问题。似乎很多人在这方面都感到困惑。这也可以理解,指针确实是个复杂的话题。 希望这篇文章对你有所帮助。 简而言之:不是使用指针就一定代表着性能优化。 如果要彻底解释这篇文章涉及的所有细节,那篇幅可能会长到没人愿意看。所以,我精简了一下,试图用中等篇幅也能涵盖想说明的高级概念。 阅读时需要说明一点:本文讨论的是微优化,性能优化都是极其细微的。在进行微优化之前,需先进行基准测试,否则很可能看不到明显的效果。代码易读性才是第一...阅读全文

博文 2019-01-21 19:34:44 alphali

[译] Go:方法接收者应该使用 T 还是 *T

文地址:dave.cheney.net/2016/03/19/… 原文作者:Dave Cheney 译文地址:github.com/watermelo/d… 译者:咔叽咔叽 译者水平有限,如有翻译或理解谬误,烦请帮忙指出 这篇文章是我几天前在 Twitter 上提出的建议的延续。 在 Go 中,对于任何类型 T 都存在类型 *T,表示获取 T 类型(T 表示你声明的类型)变量的地址。例如: type T struct { a int; b bool } var t T // t's type is T var p = &t // p's type is *T 复制代码这两种类型,T 和 *T 是不同的,*T 不能替代 T(此规则是递归的,**T 会返回 *T 地址指向的值)。 你可以在任何类...阅读全文

博文 2019-08-21 13:04:16 咔叽咔叽

Golang并发模型:select进阶

最近公司工作有点多,Golang的select进阶就这样被拖沓啦,今天坚持把时间挤一挤,把吹的牛皮补上。 前一篇文章《Golang并发模型:轻松入门select》介绍了select的作用和它的基本用法,这次介绍它的3个进阶特性。 nil的通道永远阻塞 如何跳出for-select select{}阻塞 nil的通道永远阻塞 当case上读一个通道时,如果这个通道是nil,则该case永远阻塞。这个功能有1个妙用,select通常处理的是多个通道,当某个读通道关闭了,但不想select再继续关注此case,继续处理其他case,把该通道设置为nil即可。下面是一个合并程序等待两个输入通道都关闭后才退出的例子,就使用了这个特性。 func combine(inCh1, inCh2 <-chan ...阅读全文

博文 2018-12-18 09:34:44 大彬

用golang写一个简单的游戏(三)

上篇文章中,留下了一些问题。尽管我已经添加了一个设定“炸弹”,在炸弹周围的位置是不能经过的,但是炸弹的数量还是太少,所以有些单调。我想要让游戏变得丰富些,就要增加炸弹的数量。这里就有个问题,炸弹的位置是随机的话,那就可能出现炸弹堵住了去路,造成死局,上篇文章中提到的m×n的画布上最多能有多少个炸弹这个问题不是很有意义,比如下图: max-booms.png 这种排列是最多个炸弹的情况,但它没啥用处。我们的问题应该是最少有多少个炸弹就能造成死局。最少是2颗炸弹就可以造成死局,但这种特殊情况,我们已经做了处理--不能在起点和终点的周围有炸弹。除去这种特殊情况外的其他情况,最少有几个炸弹就能造成死局,不难想到是以下的情况: min-booms.png min-booms2.png 把规律描述一下就...阅读全文

博文 2020-05-25 03:32:58 onepunchgo

Go 方法(第二部分)

这篇文章介绍了关于 Go 语言中方法的剩余部分。强烈建议先阅读[第一部分](https://studygolang.com/articles/14061) 的介绍部分。 ## 方法表达式 如果有这样一个类型 T,它的方法集中包含方法 M,则 T.M 会生成一个与方法 M 几乎相同且带有签名的方法,这称为 *方法表达式*。不同之处在于,它额外附带的第一个参数与 M 的接收者类型相等。 ```go package main import ( "fmt" "reflect" ) func PrintFunction(val interface{}) { t := reflect.TypeOf(val) fmt.Printf("Is variadic: %v\n", t.IsVariadic()) ...阅读全文