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

使用Go开发前端应用(四)- 操作canvas绘制一个表格

前言 这篇文章会讲下,如果通过Go来操作canvas,然后画一个类似腾讯文档表格一样的,在线的表格。当然,这肯定是个demo(你懂的)。然后,这篇文章主要会讲下面几个点: 使用Go来操作canvas绘制表格 使用js来操作canvas绘制表格 性能问题 使用Go操作canvas绘制表格 这里我们就直接上Go的代码了,如果有对Go如何编译成wasm或者其他的基础问题,可以查看这个系列的之前的几篇文章。 package main import ( "fmt" "syscall/js" "time" ) var drawCtx js.Value var window js.Value func init() { window = js.Global() doc := window.Get("doc...阅读全文

博文 2020-05-15 10:35:13 zhongzhong05

golang项目结构日记

最近再玩golang,在研究如何导入自己的模块的时候很是头疼。基本golang槽糕的设计——project既要设置$GOPATH又对项目结构有一定的要求(缺少一定的自由)(当然golang糟糕的设计远不止这方面,越是深入了解越是讨厌)。google好久才知道如何配置。网上blog里要么是同一篇文章各种转载(他喵的还不注明),要么不够清晰,各种尝试后终于成功,记录如下: 进入终端输入命令 mkdir -p goproject/src/goproject cd goproject touch install cd src/goproject touch main.go cd .. mkdir test cd test && touch test.go 此时cd 到goproject应该是如下: ...阅读全文

博文 2016-07-16 02:00:01 danny_amos

微服务系列笔记之Broker模式入门介绍

导语 API模式笔记告一段了,这篇文章总结了Micro中的消息订阅模式,在之前的系列文章中讲解了RabbitMQ消息队列,使用的是原生代码进行编写,在Micro中,其实为我们封装了RabbitMQ消息队列,不仅仅是RabbitMQ还有NATs作为消息中间件,称之为broker模式,在这篇文章中我们进行一个简单的发布与订阅模式的介绍。 入门案例介绍 首先建立如下目录 image 编写我们的main.go,首先,定义一个待发布的主题和一个broker,使用broker需要导入"github.com/micro/go-micro/broker"包。 var ( // 定义一个待发布的主题 topic = "mu.micro.book.topic.payment.done" b broker.Bro...阅读全文

博文 2019-08-13 01:32:49 陌无崖

go语言的设计的一点粗浅看法

Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,[1],稍后Ian Lance Taylor, Russ Cox加入专案中。 Go语言这个出自大公司Google的大牛的作品, 为什么没有象出自Microsoft的anders hejlsberg的C#这么吸引人并流行起来呢?其实Go语言的设计者也是有名的大牛,但为什么三个臭皮匠,竟然抵不过一个诸葛亮呢.本人以初学者第一次接触Go语言来说说粗浅的看法. package main import "fmt" func main() { fmt.Println("Hello, World") } ...阅读全文

博文 2014-10-04 19:26:38 DSharp

介绍 GDB 调试 Go

注:本文作者是 YANN,原文是 Introduction to Go Debugging with GDB 在过去的 4 年中,我花了我绝大部分的时间用来写,读以及调试 Python 或 JavaScript 代码。在学习 Go 的过程中,像穿着一双有小石子的鞋子在美丽的山中远行。很多事情给我留下了深刻的印象,但是使用 println 调试我的代码在过去走的太远了。在 Python 中,当代码在运行的时候,我们使用 pdb/ipdb 调试它,JavaScript 提供了类似的工具。在这些年中,这个模式已经变成了我工作流中非常重要的一部分了。 今天,我认识到 Go 已经内建支持 Gnu debugger (aka GDB)。 为了这篇文章,我们使用以下这个简单的程序: package mai...阅读全文

博文 2015-10-16 10:00:06 feihongdragon

如何泄漏一个协程然后修复它

很多 go 语言开发者都知道这句格言,[永远不要启动一个你不知道如何停止的协程](https://dave.cheney.net/2016/12/22/never-start-a-goroutine-without-knowing-how-it-will-stop),但是泄漏一个协程还是超级的简单。让我们看一种常碰到的泄漏协程的方式,然后修复它。 为了实现这个,我们先建立一个包含一个自定义 `map` 类型的库,这个 `map` 类型的 key 在经过了一段可配置的时间后过期。我们把这个库叫做 [ttl](https://en.wikipedia.org/wiki/Time_to_live) ,这个库有一个 `API` 类似如下: ```go // 创建一个生存周期为5分钟的map m :=...阅读全文

用 Go 创建一个新的智能合约语言 - 新项目动机,概念

这篇文章讲述了 **为什么** 我们开始为智能合约创建新的编程语言(使用 Go)。 ## 动机 目前有两个众所周知的区块链,比特币和以太坊。比特币有 **bitcoin script** 和以太坊有 **solidity** 为它们自己的智能合约编程。两者都有利有弊。 对于 **比特币** 而言,它没有状态概念,并且 bitcoin script 是基于低级语言和很少的操作,因此它所能做的是有限的。另一方面,因为它的工作方式简单并且比特币是没有状态的,这样我们能轻松地进行静态分析,如这个脚本运行速度有多快。 对于 **以太坊** 而言,它有状态的概念,并且 solidity 被设计为高级语言,solidity 开发者能够更直观的编程,并且以太坊智能合约可以做很多事情(是的,这是因为以太坊是有...阅读全文

博文 2019-01-27 13:16:02 PotoYang

彬哥笔记 --2 掌握Go语言可以给你带来什么

文章标题可以稍微通俗一点解释就是:学了Go语言,对我有什么用? 目前大多数从事IT开发的人,很大一部分是因为IT行业薪资高而选择的,其实彬哥我也是一样,我大学专业是核物理,毕业时候班上大多数同学都去了国家的核工程系统或者去读研了;我毕业就开始找工作,发现没有企业需要核物理的,当时我就意识到了必须”转行“。于是我就开始找高薪都有那些行业,大概分析了很多数据后,得出结论:金融,律师,服务器开发;再结合自身,短期内可以达到的可能是服务器开发,就这样阴差阳错的做到现在。清晰的记得第一份工作IT工作是在成都孵化园5栋,TV游戏开发;老大是展姐,工资600元; 有件事我还记得,展姐问我后面的理想是什么,我说我要做一款属于自己的游戏引擎,她说你先学会开发中不用鼠标开始计算,时间过10年在中国你才可能开发一...阅读全文

博文 2018-11-17 00:34:40 Golang语言社区

protobuf可变长度原理

这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章【golang-protobuf使用】 可变长度类型 官网说明地址:https://developers.google.com/protocol-buffers/docs/proto3 proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64 连续位标识 Protobuf用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后读。每个字节低7位用于实际的编码。 举例: 本次举例使用uin32类型 十进制:300 二进制(4个字节):00000000 00000000 00000001 1000000 protobuf编码过...阅读全文

博文 2018-12-03 14:34:49 __simple

Go 面试每日一题(2)

每天 15 分钟,学好 Go 语言从上篇文章留言区的回答来看,大家对 defer 先进后出的特性都是了解的,没问题,但如果结合 panic 语句就可能会搞不清到底是 defer 先执行还是 panic 执行。看下答案,输出:1打印后2打印中3打印前4panic: 触发异常参考解析:defer 的执行顺序是后进先出。当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic。欢迎在留言区补充!来看下今天的题目:下面这段代码输出什么,说明原因。 1func main() { 2 3 slice := []int{0,1,2,3} 4 m := make(map[int]*int) 5 6 for key,val := range slice { 7 m[k...阅读全文

博文 2019-08-31 21:09:33 Golang来啦

A Tour of Go---Go语言之旅

序言 开始翻译一下GO的官方网站的:A Tour of Go(Go语言的不归之旅) 学习A Tour of Go的前置步骤 安装最新版本的Go语言环境(现在最新版本是:1.12.9) 查看自己的GOPATH和MODULES环境变量是否设置好 随便在自己的硬盘的任何位置创建一个文件夹,文件夹的名字就是你项目的名字 进入文件夹,新建main.go(也可以其他命名文件,推荐使用main.go文件命名一个项目的启动文件) package main import "fmt" func main() { fmt.Println("Hello, 世界") } 复制代码 在项目的文件夹下打开dos或者terminal,输入go mod init xxxx(xxxx是你项目的名字),这是使用go提供的modu...阅读全文

Go语言用堆排序的方法进行一千万个int随机数排序.

上篇文章用的是quicksort方法排序,但是如果用快速排序法对重复率很高的slice排序的时候,时间复杂度会激增,速度相当慢 所以尝试了一下堆排序,实验结果,感觉挺好的.下面是代码,大家可以参考一下,这个是建立的大顶堆. 二叉树的特性: 最后一个非叶子节点 : root = length/2(当length为奇数的时候root向下取整) 在GO语言中的索引位置:root - 1, 左右孩子节点:child_l = 2*root,索引位置:child_l-1,右孩子的节点: 2*root+1 索引位置. package main import ( "fmt" "math/rand" ) func main() { Num := 10000000 var list []int for i :=...阅读全文

博文 2016-03-12 09:00:00 fyxichen

golang time操作整理

这里的内容大部分是从他人处整理得到 http://my.oschina.net/1123581321/blog/190942 时间戳 当前时间戳 fmt.Println(time.Now().Unix()) # 1389058332str格式化时间 当前格式化时间 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) # 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5 # 2014-01-07 09:42:20时间戳转str格式化时间 str_time := time.Unix(1389058332, 0).Format("2006-01-02 15:04:05") fmt.Println(str_...阅读全文

博文 2015-11-06 17:00:13 u012210379

k8s与aws--如何在cloud-provider=aws的k8s中设置externalTrafficPolicy为local

如何在启用cloud-provider=aws的k8s集群中设置service 的externalTrafficPolicy为local 关于externalTrafficPolicy的local和cluster两个值,在之前的文章中,我们已经讲过。大家可以参考从service的externalTrafficPolicy到podAntiAffinity这篇文章。 而在aws中,假如你自己部署k8s集群,并且启用了cloud-provider=aws,那么需要做一些其他的工作,否则service 的externalTrafficPolicy为local后,无法访问。 首先保证kube-proxy启动参数里加入hostname-override设置 - --hostname-override=$...阅读全文

博文 2019-01-07 11:34:48 iyacontrol

open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境

收到新的任务研究一下 open-falcon 监控公司的服务器指标玩玩。说实话现在连要重视哪些监控指标都不知道,但在open-falcon 中文介绍 中,就安装这一块,踩的坑实在好多,所以有必要写篇文章记一下。 这篇文章主要包括: 如何搭一个虚拟的 linux 服务器和相关配置 按照官方的中文介绍安装,会踩到哪些坑。 目标只有一个:尽快跑起来。 服务器选择 笔者最终选择的是 ubuntu-server 16.04 LTS 64bit。基于这款服务器,许多安装指令和介绍中不一样。具体包括 yum 替换为 apt-get mysql-devel 替换为 libmysqld-dev,libmysqlclient-dev 等。并且 ubuntu 的源需要配置。笔者配置的是阿里云的ubuntu 16....阅读全文

博文 2017-02-10 10:31:57 genefy

RSA到底是谁加密?

RSA到底是谁加密? RRSA加密是最常用的非对称加密方式,原理是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。 但你一定会碰到过,两个开发者争执:到底是由谁加密,谁解密? 看完这篇文章,你就会明白这一切。 规范怎么说 我们先来看看权威库open_ssl的文档描述,它定义了四个方法 RSA_private_decrypt RSA_private_encrypt RSA_public_decrypt RSA_public_encrypt 看起来似乎私钥和公钥都可以用来进行加密解密? 但是仔细查看 RSA_public_decrypt 和RSA_private_encrypt的描述都是:low level signature operations...阅读全文

博文 2020-05-06 21:32:46 boywus

Golang 要点汇总

Golang有很多非常强大的用法,本文对网上的一些文章做一个简单的汇总,供以后翻阅。 1,Constant的用法 https://splice.com/blog/iota-elegant-constants-golang/ 这篇文章详细介绍了如何优雅地定义constant 2,Channel 非阻塞Channel操作:https://gobyexample.com/non-blocking-channel-operations 超时Channel:http://blog.golang.org/go-concurrency-patterns-timing-out-an...阅读全文

博文 2015-03-18 03:00:01 cobbliu

我是这么使用黑苹果的

最近使用黑苹果,为啥要用黑苹果以及怎么黑的跳过不说,说说我是怎么使用的。 首先说明,我没有使用白苹果的经验,OS X里的24K纯小白。写这篇文章的起因是前天晚上无缘无故用户密码不对了,重启之后进不了系统,再加上看网上各种的密码回复教程搞得电脑无限重启,无奈最后重装系统(好在我有专门的U盘做安装盘)。 还要说明的是这篇文章是给开发人员准备的,那些开机装两个软件看看视频聊个天的可以返回或者右上角了。开发人员都知道,配环境什么的最麻烦了,要下载软件,解压,配置环境变量,各种麻烦,尤其是需要多种开发语言的。我是配置的golang作为业余学习使用的,而且不想分盘,所以才有了今天的下场。废话有点多,开始正题。 首先,环境变量需要的SDK都放在家目录(~)下新建文件夹统一安放,环境变量也配置在这个目录的....阅读全文

博文 2017-06-12 01:07:07 remainer

Golang中的数据驱动和参数化测试

此篇文章转自Elliot Chance的[Go: Data-Driven or Parameterized Tests](http://elliot.land/go-data-driven-parameterized-tests)。欢迎大家访问[我的博客](http://zuozuohao.github.io/)。 Glang的核心原则是保持简单和问题解决方法的唯一性,Python也遵循了这一原则。 在Go中可以轻松的完成单元测试,然而依旧会遇到一些测试功能上的问题。至少对于我来说, 与其写令人厌烦的测试样板文件,我宁愿去找一个功能完善的第三方测试包。 这篇文章详细介绍了在书写数据驱动或者说参数化测试框架过程中,数据驱动测试是指基于相同的测试逻辑使用表格作为输入和期望输出源...阅读全文

computer go

这学期做了一个计算机围棋的项目,也因此自学了围棋,就程序而言虽然最后比赛结果不是很好,但仍然有了一个初步的轮廓。 先上一个程序自己跟自己下的截图 接下来我来逐步介绍一些细节,里面会涉及到很多围棋方面的知识,但大部分是简单的,因为复杂的围棋概念,例如薄厚,眼形,模样,目前还是很难用计算机程序来描述的。另外这个程序还存在一些其他更重要的问题尚未解决,下面我会一一道来。如果你有任何问题,也可以在留言中回复,我尽力回答。由于这篇文章规模巨大,再加上我一边还在重写代码,更新的进度估计很慢,我估计寒假能把这篇文章写完。 首先,读者需要建立一个这样的概念,计算机围棋的搜索空间是10^700次方,目前为止没有任何一台机器能够解决如此复杂的问题。第二,计算机围棋作为人工智能领域的著名难题,至今仍然没有超过人类...阅读全文

博文 2015-12-23 20:00:00 u012520030

InkPaper 最佳实践——使用 Travis CI 自动部署 Ink 博客到 GitHub pages

简介 纸小墨(InkPaper)是一个GO语言编写的开源静态博客构建工具,可以快速搭建博客网站。它无依赖跨平台,配置简单构建快速,注重简洁易用与更优雅的排版。使用 Travis CI 可以解决 自动构建和自动部署的问题, 这样能让我们更加专注书写。 什么是 Travis CI? Travis CI 是为 GitHub 上的项目提供构建和测试的分布式持续构建服务。这意味着你的静态博客最好是托管在GitHub Pages 上的。当 GitHub Pages 仓库激活 Travis CI 服务,当你的博客有新的修改提交到 GitHub 的时候,GitHub 会通知 Travis CI。它也可以被配置为只对特定的分支生效,或分支的名称匹配特定的模式。Travis CI 将会检查相关分支并执行之前在 ...阅读全文

GoLang回调实现,非传func参数方式

写这篇文章的初衷是因为最近被GoLang的一个低级问题搞蒙了,加上本蠢货用的还是IntelliJ的2017版本,对GoLang的错误提示非常有限,导致为了解决一个回调问题花了一个多小时。 问题呢,就是GoLang的回调了,在我的印象中GoLang实现回调和Java有那么一点区别,但是大同小异。首先如果是个简单的回调那么肯定没啥难度,传入一个struct对象就可以了,但是我想的是可以随时创建这个回调对象,在各种场合,那么就决定了这个回调对象可能是多个,所以必须是接口。 so,思路其实很清晰,回调参数使用接口就可以了,但是今天我被自己蠢到了,忘了GoLang的特性,首字母非大写是不能给外部包调用的,所以,一言难尽。 在解决问题的期间我不服气的搜了百度与google,发现搜出来的内容居然都是传入f...阅读全文

博文 2019-07-14 21:32:39 zerochl

送别2019,期待2020!

概述 2019 年时间过得很快。 有欢笑、 有离别、 有压力、 有收获。 关于工作 项目发生了变动,团队也发生了变动,不过总体是成长的,在这感谢领导的关照、信任! 下半年开始学习 Go 语言,并用 Go 进行搭建项目,也算是刚刚入门了吧。 自己在团队内也进行了几次分享,锻炼了自己的上台说的能力。 期间听过一些大牛的分享,将自己的笔记分享给大家: 用抽象来解决需求的快速变化; 用解耦来解决技术实现的不确定性; 要在当前资源条件下求最优解,然后再进行灰度过渡; 组织的沟通方式决定你使用什么样的结构设计,架构的核心目标之一就是降低团队的沟通成本; 关于生活 感谢老婆,有你相伴的日子,即使平凡也很浪漫!(求生欲) 感谢父母,在这边帮忙带孩子,发现我自己都变成猪了,好吃懒做。 孩子正在开始学说话,咿咿...阅读全文

博文 2020-01-04 14:32:38 新亮

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

一招教你无阻塞读写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/ (其实点击标题也会跳转到原文...阅读全文

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