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

Go 1.5 发布,完全移除 C,使用 Go 编译 Go

Go 1.5 正式发布,这是 Go 的第六个重要版本。 此版本包括大量重大改进,编译工具链从[ C 转换到 Go](https://golang.org/doc/go1.5#c),从 Go 代码库中完全移除 C 代码。[完完全全重新设计了](https://golang.org/doc/go1.5#gc)垃圾收集器,减少垃圾收集器的停顿时间。改进 scheduler,允许修改默认 [GOMAXPROCS](https://golang.org/pkg/runtime/#GOMAXPROCS) 值(并发执行 goroutines 数量),可以从 1 修改到逻辑 CPUs 的数量。改进 linker,允许分布式 Go 包作为分享库链接到 Go 程序,可以构建 Go 包到归档或者分享库,可以...阅读全文

优化 Go 中的 map 并发存取

Catena (时序存储引擎)中有一个函数的实现备受争议,它从 map 中根据指定的 name 获取一个 metricSource。每一次插入操作都会至少调用一次这个函数,现实场景中该函数调用更是频繁,并且是跨多个协程的,因此我们必须要考虑同步。 该函数从 map[string]*metricSource 中根据指定的 name 获取一个指向 metricSource 的指针,如果获取不到则创建一个并返回。其中要注意的关键点是我们只会对这个 map 进行插入操作。 简单实现如下:(为节省篇幅,省略了函数头和返回,只贴重要部分) var source *memorySource var present bool p.lock.Lock() // lock the mutex defer p.l...阅读全文

博文 2015-04-05 11:29:41 88250

golang实践-如何实现高性能的定时任务管理器

前段时间,因为业务需要,实现了单协程、单timer的多定时任务管理器,其特点在于: 1、能够添加一次性、重复性任务,并能在其执行前撤销或频繁更改。 2、支持同一时间点,多个任务提醒。 3、适用于中等密度,大跨度的单次、多次定时任务。 4、支持10万次/秒的定时任务执行、提醒、撤销或添加操作,平均延迟10微秒内 5、支持注册任务的函数调用,及事件通知。 代码比较简单,也分享到github,有兴趣的可以看看:定时器源代码。目前版本还处于维护阶段,接口可能会有点变化,或许还会根据我们的业务调整增加第三方数据的支持,还请理解。 问题背景 在业务中,我们经常需要基于定时任务来触发来实现各种功能。比如TTL会话管理、锁、定时任务(闹钟)或更复杂的状态切换等等。 由于go语言协程非常轻,很容易开启多个并发...阅读全文

博文 2017-03-03 06:00:20 qq_26981997

golang sync.WaitGroup解决goroutine同步

go提供了sync包和channel来解决协程同步和通讯。新手对channel通道操作起来更容易产生死锁,如果时缓冲的channel还要考虑channel放入和取出数据的速率问题。 从字面就可以理解,sync.WaitGroup是等待一组协程结束。它实现了一个类似任务队列的结构,你可以向队列中加入任务,任务完成后就把任务从队列中移除,如果队列中的任务没有全部完成,队列就会触发阻塞以阻止程序继续运行。 sync.WaitGroup只有3个方法,Add(),Done(),Wait()。 其中Done()是Add(-1)的别名。简单的来说,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。 简单示例如下: package main import ( "fmt"...阅读全文

博文 2016-12-10 11:00:06 黑神领主

Go语言标准库堆(heap)封装及堆排序实现

Go语言的OOP,接口,接口的组合,基础库的函数及接口如何抽象设计, 这些东西在Go的Heap源码及演示例子处理中,都有很好的展示. 在"container/heap"中,它的接口是如下定义的: type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } 我不太明白为啥是这样的设计,只好通过下面的方法来尝试了解. 1. 通过测试例子,了解使用方式. 2. 试图还原原始场景,即利用源码整合实现了一个原始的堆排序 然后通过这两者的对比,来慢慢体会. contain...阅读全文

博文 2015-06-17 23:00:36 xcltapestry

Golang实现基于Websocket协议的H5聊天室

http://www.cnblogs.com/wangrudong003/p/5535689.html go代码部分: // WebChat project main.go package main import ( "fmt" "net/http" "time" "encoding/json" "strings" "golang.org/x/net/websocket" ) //全局信息 var datas Datas var users map[*websocket.Conn]string func main() { fmt.Println("启动时间") fmt.Println(time.Now()) //初始化 datas = Datas{} users = make(map[*we...阅读全文

博文 2016-11-09 06:00:04 kenkao

Go 1.5 计划启动,使用 Go 来编译 Go

Go 项目组发布了 Go 1.5 的计划,Go 1.5 将使用 Go 1.4 进行构建,Go 源码树将完全消除所有 C 的代码。移除 C 编译器 (5c,6c,8c,9c)。剩下的 C 程序将转成 Go 语言,包括 [Go compilers](http://golang.org/s/go13compiler), [汇编器和连接器](http://golang.org/s/go13linker) 以及 cmd/dist. 如果这些程序都采用 Go 编写,这会引发一个在完整构建源码的启动问题 —— 你需要一个可用的 Go 工具链来构建 Go 工具链。 为了构建 Go 1.x (x ≥ 5),需要先安装 Go 1.4 到 $GOROOT_BOOTSTRAP. 默认的 $GOROOT_BOO...阅读全文

Sprite Kit游戏框架(go语言也该雄起了)

在iOS 7中内置了一个新的Sprite Kit框架,该框架主要用来开发2D游戏。目前已经支持的内容包括:精灵、很酷的特效(例如视频、滤镜和遮罩),并且还集成了物理库等许多东西。iOS 7中附带了一个非常棒的Sprite Kit示例工程,名字叫做Adventure。不过这个示例工程稍微有点复杂,不太适合初学者。本文的目的就是做一个关于Sprite Kit使用的初级教程。 通过本文,你可以从头到尾的学习到如何为你的iPhone创建一个简单又有趣的2D游戏。如果你看过我们之前的教程:Simple Cocos2D game教程,你会发现非常的相似。在开始之前,请确保已经安装了最新版本的Xcode(5.X),里面支持Sprite Kit以及iOS 7。 Sprite Kit的优点和缺...阅读全文

golang官方的websocket怎么知道客户端关闭连接

目前我使用code.google.com/p/go.net/websocket包来做websocket通讯,目前有一个主动推送通知的功能需要保存所有的连接conn,然后有新消息的时候主动推送给对应的conn,但是如果一个客户的conn关闭之后,我需要移除这个conn,但是看到websocket没有对应的isClose的判断。有什么好的办法解决吗...阅读全文

Golang 数据结构:栈与队列

Golang 中栈、队列的实现及常用操作,数据结构系列原文:flaviocopes.com,翻译已获作者授权。 栈概述栈是数据按照后进先出 LIFO(Last-In-First-Out) 原则组成的集合。添加和移除元素都是在栈顶进行,类比书堆,不能在栈底增删元素。 栈的应用很广泛,比如网页跳转后一层层返回,ctrl+z 撤销操作等。 使用 slice 动态类型来实现栈,栈元素的类型是使用 genny 创建的通用类型 ItemStack,实现以下常用操作: 123New() // 生成栈的构造器Push() Pull() 代码实现1234567891011121314151617181920212223242526272829303132333435package stackimport ( ...阅读全文

博文 2018-03-15 10:59:03 wuYinBlog

Go 1.5 计划启动,使用 Go 来编译 Go

Go 项目组发布了 Go 1.5 的计划,Go 1.5 将使用 Go 1.4 进行构建,Go 源码树将完全消除所有 C 的代码。移除 C 编译器 (5c,6c,8c,9c)。剩下的 C 程序将转成 Go 语言,包括 Go compilers (golang.org/s/go13compiler), 汇编器和连接器(golang.org/s/go13linker) 以及 cmd/dist. 如果这些程序都采用 Go 编写,这会引发一个在完整构建源码的启动问题 —— 你需要一个可用的 Go 工具链来构建 Go 工具链。 为了构建 Go 1.x (x ≥ 5),需要先安装 Go 1.4 到 $GOROOT_BOOTSTRAP. 默认的 $GOROOT_BOOTSTRAP 是 $HOME/go1.4...阅读全文

博文 2015-01-10 01:00:01 cao345657340

golang中container/ring包用法

ring包实现了环形链表的操作。 type Ring //Ring类型代表环形链表的一个元素,同时也代表链表本身。环形链表没有头尾;指向环形链表任一元素的指针都可以作为整个环形链表看待。Ring零值是具有一个(Value字段为nil的)元素的链表。 type Ring struct { Value interface{} // 供调用者使用,本包不会对该值进行操作 // 包含未导出字段 } func New(n int) *Ring //创建一个长度为n的环形链表 func (r *Ring) Do(f func(interface{})) //对链表中任意元素执行f操作,如果f改变了r,则该操作造成的后果是不可预期的。 func (r *Ring) Len() int //求环长度,返回环...阅读全文

博文 2016-01-21 12:00:01 chenbaoke

html5+go+websocket简单实例代码

这次的就直接发放代码截图吧,应该是用go语言做后台一个简易的聊天,这里没用到什么特别的知识,最朴实的来实现效果,主要目的是分享下h5怎么用websocket,go搭建websocket服务的主要部分。 go代码部分: 1 // WebChat project main.go 2 package main 3 4 import ( 5 "fmt" 6 "net/http" 7 "time" 8 9 "encoding/json" 10 11 "strings" 12 13 "golang.org/x/net/websocket" 14 ) 15 16 //全局信息 17 var datas Datas 18 var users map[*websocket.Conn]string 19 20 ...阅读全文

博文 2016-05-28 10:00:04 wangrudong003

Go 1.3+ 编译器变革

概述 目前Go编译器是C写的,是时候换成Go啦。 背景 “gc"Go工具链来自Plan 9编译器的工具链。组装器、C编译器和链接器基本没变。Go的编译器(cmd/gc,cmd/5g,cmd/6g,cmd/8g)是配合工具链写的新的C程序。 项目起始时,用C而不是Go写编译器有很多好处。突出的比如,首先,那时候Go还不存在,没法儿写编译器。而且实际上,就算存在,也会经常有明显的不兼容的变化。用C不用Go可以避免初始和持续开发导致的问题。然而如今Go 1已经稳定,所以这些持续的问题减少了很多。 傅小黑翻译于 10 个月 前 0人顶 顶 翻译的不错哦! 持续开发的问题已经消除,为了让Go实现的编译器比C更有吸引力,另一些工程问题出现: 写正确的Go代码比写正确的C代码更容易。 调试错误的Go代码比...阅读全文

博文 2014-10-10 08:00:02 傅小黑, 偃鼠饮河

Go语言链接器大修

之前有帖子说到 [《Google抛弃C语言,采用Go语言重写Go编译器》](http://studygolang.com/topics/471),这里说到的是链接器。同样,有部分功能会使用 Go 语言编写。 ### 摘要 ### 在构建和运行一个标准的 Go 程序时,链接器是最慢的一部分。为了解决这个问题,我们计划将链接器拆分到两部分。其中的一部分可能会用 Go 来编写。 ### 背景 ### 链接器总是 Plan 9 工具链中最慢的部分之一,而现在它是 Go 工具链中最慢的部分了。Ken Thompson 在关于工具链的概述中进行了总结: 新的编译器编译迅速、加载缓慢,生成中等质量的目标代码。编译器与移植性相关,对于不同的计算机需要若干星期的工作来构建对应的...阅读全文

用 Go 实现图片尺寸的自动调节

我刚上大学那会儿,课上到最后几分钟的时候,我会翘课奔到另外一个我几乎不怎么了解的班上去蹭课。碰巧,那个班上的课是我觉得最棒的课之一 ——计算机视觉。此外,那个课上介绍了一种很赞的算法:Seam Carving,精雕细琢。 这个算法大概是酱紫的:一般我们想改变图片大小的时候,会采用裁剪和缩放的方式,这样一来,图片会损失很多重要信息,在处理过程中,图片甚至被歪曲。那么,我们怎么才能找到图片中视觉信息最少的部分,要调整图片大小的时候,只把这部分移除掉是不是可以呢? 上图展示给我们一副很美的画面:开阔的蓝天,俊逸的城堡。但是,对我们来说,图有点大,我们得往小调一下。怎么弄呢? coraaller翻译于 3周前 2人顶 顶 翻译的不错哦! 第一个进入我们大脑的想法是改变原始图像的尺寸。改变之后的图像(...阅读全文

博文 2016-08-04 19:00:00 hxapp2, coraaller, 无若, HAILINCAI, 昌伟兄

Redis的数据类型及具体应用

Redis是一个key-value存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等等。下面小编就和大家详细聊聊Redis的数据类型及其操作。 String 这是最简单的数据类型,一个Key对应一个Value,string类型是二进制安全的。Redis的string可以包含任何数据,如图片或序列化的对象。 String的操作: Set:设置key对应的值为string类型的value,如 set name Fahy Setnx:设置key对应的值为string类型的value,如果key已经存在,返...阅读全文

Go 中 Queue 的实现方式

需求队列的特性较为单一,基本操作即初始化、获取大小、添加元素、移除元素等。最重要的特性就是满足先进先出。实现接下来还是按照以前的套路,一步一步来分析如何利用Go的语法特性实现Queue这种数据结构。定义首先定义每个节点Node结构体,照例Value的值类型可以是任意类型,节点的前后指针域指针类型为nodetype node struct { value interface{} prev *node next *node } 继续定义链表结构,定义出头结点和尾节点的指针,同时定义队列大小size:type LinkedQueue struct { head *node tail *node size int } 大小获取队列大小,只需要获取LinkedQueue中的size大小即可:func ...阅读全文

博文 2017-09-27 03:29:26 allenwu.itscoder.com

学习Golang语言(5):类型--数组

学习Golang语言(5):类型--数组 --- 之前的章节我们学习了Golang的基本数据类型。接下来我们要学习Golang内置的高级类型:数组、切片和字典。 **数组(array)** Go语言的数组是一个定长的序列,数组包含的元素的类型相同。多维数组可以简单的使用自身为数组的元素来创建。 数组的元素使用操作符[]来索引,索引号从0开始。因此数组第一个元素为:array[0],最后一个元素为array[len(array)-1]。数组是可以更改的,可以使用array[index]放在赋值操作符左侧完成设置index位置的元素内容。 数组使用以下语法创建: ``` [length]type; [N]type(value1,value...阅读全文

使用Go代替Ruby,将服务器数量从30降到2

使用另一种语言去重写一个服务,听起来是不是很折腾?然而云服务供应商Iron.io就这么做了,并成功的将服务器从30台降至了2台。Iron.io在其官方博客上公布了整个事件的始末,下面来了解一下: Iron.io与IronWorker Iron.io起初为帮助其它公司建立应用程序的咨询公司,现为云服务供应商。Iron.io开发IronWorker的理由同样很老套: 之前说过Iron.io曾是家咨询公司,而在IronWorker开发的那段时间,AWS和Ruby on Rails是两个非常火的领域。而Iron.io有几个客户建立的硬件设施会不断的(7X24小时)给其发送数据,为了收集和处理这些数据,Inro.io建立了他们自己的内部服务“worker as a service”。至于发行的原因就很...阅读全文

博文 2014-12-04 11:00:01 cometwo

学习Golang语言(5):类型--数组

学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Golang语言(5):类型--数组 学习Golang语言(6):类型--切片 今天继续跟着“码术”一起学习Golang语言。之前的章节我们学习了Golang的基本数据类型。接下来我们要学习Golang内置的高级类型:数组、切片和字典。首先先讲解数组。 数组(array) Go语言的数组是一个定长的序列,数组包含的元素的类型相同。多维数组可以简单的使用自身为数组的元素来创建。 数组的元素使用操作符[]来索引,索引号从0开始。因此数组第一个元素为:array[0],最后一个元素为array[len(arr...阅读全文

博文 2014-10-09 16:00:02 codemanship

Golang学习笔记之包管理工具(govendor)

govendor是Golang的依赖包管理工具,它的出现可以避免不同用户在clone同一个项目后从外部获取不同依赖库版本的问题。govendor会将项目需要的依赖包添加到项目的vendor目录下,并且该目录中vendor.json文件会保存添加的依赖包的路径等信息。 Golang项目中的go文件在查找依赖的顺序是,先在vendor中查找,vendor没找到然后在GOPATH中查找,都没找到最后在GOROOT中查找。 GitHub地址:https://github.com/kardianos/govendor 一、安装 go get -u github.com/kardianos/govendor 二、初始化 进入你的项目目录下 govendor init 会出现一个vendor文件夹,里面的...阅读全文

博文 2018-12-17 20:34:43 学生黄哲

我们是如何让服务器从30台缩减到2台的:从Ruby迁移到Go语言 (转)

我们开发第一版的IronWorker已经是3年前的事了,是用Ruby写的,API基于Rails开发。我们没用多久就发展成了相当大的规模,很快我们就触及到了Ruby程序的承载上限。长话短说,我们切换到了Go语言,请接着读下去,下面是事情如何一步步发展的。 最初的设计 首先,做一点背景介绍:我们开发的第一版IronWorker,起初叫做SimpleWorker(很不错的名称,不是吗?),用的是Ruby。我们过去是一个顾问公司,为其它公司开发应用,在当时有两个东西被炒得非常火:亚马逊的Web Services和Ruby on Rails。所以我们开发的应用都基于AWS的Ruby on Rails架构,并因此吸引了不少大客户。我们开发IronWorker的初衷是来源我们自身的需求。我们有不少做硬件设...阅读全文

博文 2014-10-13 00:00:03 mummywho

优化 Go 中的 map 并发存取

Catena (时序存储引擎)中有一个函数的实现备受争议,它从 map 中根据指定的 name 获取一个 metricSource。每一次插入操作都会至少调用一次这个函数,现实场景中该函数调用更是频繁,并且是跨多个协程的,因此我们必须要考虑同步。 该函数从 map[string]*metricSource 中根据指定的 name 获取一个指向 metricSource 的指针,如果获取不到则创建一个并返回。其中要注意的关键点是我们只会对这个 map 进行插入操作。 简单实现如下:(为节省篇幅,省略了函数头和返回,只贴重要部分) var source *memorySource var present bool p.lock.Lock() // lock the mutex defer p.l...阅读全文

博文 2015-08-18 17:06:34 88250

分析和浏览 Docker 容器镜像内部的工具Dive

Docker 容器镜像是一个轻量、独立、含有运行某个应用所需全部软件的可执行包,那么一个 Docker 镜像里面会包含什么东西?这个名为 Dive 的工具正是用来分析和浏览 Docker 镜像每层的内容。 通过分析 Docker 镜像,我们可以发现在各个层之间可能重复的文件,并通过移除它们来减小 Docker 镜像的大小。 Dive 是一个用 Go 语言编写的自由开源工具。Dive 工具不仅仅是一个 Docker 镜像分析工具,它还可以帮助使用者用于构建镜像。 **运行截图** ![image](https://static.oschina.net/uploads/space/2018/1126/145112_ehy1_2720166.gif...阅读全文

开源项目 2018-12-05 09:30:01 网友

golang官方工具dep的使用

一、安装篇 1.下载release版本。打开页面https://github.com/golang/dep/releases,下载最新的dep-windows-amd64.exe 2.将dep-windows-amd64.exe放入GOPATH/bin下,修改名称为dep 二、使用篇 初始化 1.切换到工程目录下cd %GOPATH%/src/github.com/xxx/dep-demo 2.初始化dep init 添加 预先添加到vendor中 dep ensure -add github.com/foo/bar github.com/baz/quux 更新 dep ensure -update 同步 四种情况:工程中引入包、移除包、Gopkg.toml规则修改、不确定情况 dep en...阅读全文

博文 2018-04-28 16:33:04 mickelfeng

一个简单的container

写项目的时候,想有一个统一的地方用来管理数据库、redis、缓存等服务的初始化配置,并且全局可获取服务对象。 支持注册、获取、移除、判断存在、单例、清空实例、统一释放资源…… 就自己简单写了一个,轻拍勿喷,欢迎指导 简单的例子(伪代码,并不能直接运行) ``` import ( "github.com/keepeye/go-container/container" "time" ) func main() { // 我们有一个默认的容器实例,直接通过 container调用所有方法 // 或者你可以创建一个新的container对象 通过container.NewContainer() container.Bi...阅读全文

[翻译] Go 1.3 链接器大修

Go team 总是能带来一些惊喜的,关于 Go 的链接器,看来在 1.3 版本中要大修了。 ————翻译分隔线———— Go 1.3 链接器大修 Russ Cox 2013 年 11 月 摘要 在构建和运行一个标准的 Go 程序时,链接器是最慢的一部分。为了解决这个问题,我们计划将链接器拆分到两部分。其中的一部分可能会用 Go 来编写。 背景 链接器总是 Plan 9 工具链中最慢的部分之一,而现在它是 Go 工具链中最慢的部分了。Ken Thompson 在关于工具链的概述中进行了总结: 新的编译器编译迅速、加载缓慢,生成中等质量的目标代码。编译器与移植性相关,对于不同的计算机需要若干星期的工作来构建对应的编译器。对于 Plan 9 来说,需要若干有特定功能、且使用自己的目标格式的编译器...阅读全文

博文 2014-10-09 16:19:59 mikespook

把别人的Tcl/Tk代码加入到Go语言里14 游戏7 行星游戏

a 首先打开网页 http://wiki.tcl.tk/13601 b 把网页里提到的第一段tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如下 小飞机的控制: Left Arrow - rotate CCW Right Arrow - rotate CW Up Arrow - Thrust S...阅读全文

博文 2015-05-13 15:00:07 名字不能长

5.蛤蟆笔记go语言——基本类型

5.蛤蟆笔记go语言——基本类型 基本类型 Go 的基本类型有Basic types bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 rune // int32 的别名 // 代表一个Unicode码 float32 float64 complex64 complex128 同时与导入语句一样,变量的定义“打包”在一个语法块中。 package main import ( "fmt" "math/cmplx" ) var ( ToBe bool = false MaxIntuint64 = 1<<64 - 1 z complex128 = cmpl...阅读全文

博文 2016-07-14 23:00:07 notbaron

GO语言学习-复杂类型(2)

map map是一种键和值的对的集合。 可以只用内建函数make来创建map 例: book := make(map[string]int) 亦可以通过字面值来创建 例: book := map[string]int{ "red": 1, "green":36} 使用内建函数delete来移除键值 map亦可以使用range来迭代,在迭代map时使用 key/value结构 检查元素是否存在,可以使用下面的方式: v, ok := map["red"] 结果为 v==1 ok==tur...阅读全文

博文 2016-02-25 13:00:01 phlong999

把别人的Tcl/Tk代码加入到Go语言里14 游戏7 行星游戏

a 首先打开网页 http://wiki.tcl.tk/13601 b 把网页里提到的第一段tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如下 小飞机的控制: Left Arrow - rotate CCW Right Arrow - rotate CW Up Arrow - Thrust S...阅读全文

博文 2015-05-13 16:00:05 名字不能长

Kubernetes的Device Plugin设计解读

摘要: Kubernetes的生态地位已经确立,可扩展性将是其发力的主战场。异构计算作为非常重要的新战场,Kubernetes非常重视。而异构计算需要强大的计算力和高性能网络,需要提供一种统一的方式与GPU、FPGA、NIC、InfiniBand等高性能硬件集成。 Kubernetes的Device Plugin设计解读 最近在调研Kubernetes的GPU调度和运行机制,发现传统的alpha.kubernetes.io/nvidia-gpu即将在1.11版本中下线,和GPU相关的调度和部署的代码将彻底从主干代码中移除。 取而代之的是通过Extended Resource+Device Plugin两个Kubernetes的内置模块,外加由设备提供商实现的相应Device P...阅读全文

go - 使用 gomod 管理项目依赖

go 1.11.1开始可以使用更优雅灵活的module机制做包依赖管理,能直接感受到的优点如下: 项目路径可以脱离$GOPATH了,不需要必须放在$GOPATH/src下。 项目内部模块的引入是基于moduleName而不再死板的基于projectName了。 半自动维护依赖,如果你很懒,你甚至可以不需要使用get预先安装依赖,module在run test build时会检测未下载的依赖,并自动下载它们。 回想以前吧!$GOPATH/src/projectName后,项目中各模块互相引用的话都是基于projectName(go 的包加载机制导致的,去 $GOROOT/src 和 $GOPATH/src 去寻址,所以projectName也需要作为包引入路径的一部分),别人使用你的项目时也必...阅读全文

博文 2019-07-10 20:32:38 big_cat

跨集群服务——如何利用Kubernetes 1.3实现跨区高可用

编者按:这篇文章是关于Kubernetes 1.3新功能的一系列深入文章的一部分。本文是第七篇。 用户使用Kubernetes 对生产环境上的部署进行弹性伸缩,同时我们听到一个明确的声音:希望跨区域、跨数据中心、跨集群和跨云服务商来部署服务。 跨集群服务能够分布在不同的地理位置,使得混合和多云成为可能,相对于单一集群多可用区部署,更好地保证高可用。 客户希望他们的服务能跨越一个或多个(可能是远程)集群,不管从集群的内部和外部访问这些服务,都有一致的体验。 在Kubernetes 1.3中,我们的目标是在管理地理位置上分散的多集群服务时,尽量减少管理开销。这篇文章解释了如何做到这一点。 注:例子中,我们利用谷歌容器引擎(GKE)提供的Kubernetes集群,在该...阅读全文

先睹为快 ▏Kubernetes 1.5有哪些你不得不知的新功能?

今年9月份我们迎来了Kubernetes 1.4的惊喜发布,一大波新功能让人眼花缭乱。经过将近三个月时间的打磨,如今Kubernetes再推出新版本,翘首以盼的Kubernetes 1.5重磅发布,本次版本更新涵盖了**4个主题、12个新特性以及4个原有基础上的重大变更**。期待不如眼疾手快,翻阅文章内容,享受一场Kubernetes 1.5的饕餮大餐吧~ ## 主题简介: **1、StatefulSets (原名PetSets)** - StatefulSets 现在是 beta 版 (主要是修复和稳定性) **2、改善联邦支持** - 新命令:kubefed - DaemonSets - 部署 - Configmaps **3、简化集群部署*...阅读全文

Golang实现简单好用的EventDispatcher

events源代码 package ax_events import "fmt" // 事件类型基类 type Event struct { //事件触发实例 Target IEventDispatcher //事件类型 Type string //事件携带数据源 Object interface{} } // 事件调度器基类 type EventDispatcher struct { savers []*EventSaver } // 事件调度器中存放的单元 type EventSaver struct { Type string Listeners []*EventListener } // 监听器 type EventListener struct { Handler EventHan...阅读全文

博文 2017-09-28 13:34:48 gofounder

go聊天代码

main.go(server) package main import ( "git.letv.cn/uts/qpid-go_0_10/libqpid" "./tbs" // "fmt" "time" ) func main() { var cb tbs.EventCallback = onTest //获取分派器单例 tbs.SetCallBack(&cb) service := ":1200" tbs.ServerStarted(service) //因为主线程不会等子线程而直接关闭进程,这样会看不到效果,所以我在这里加了阻塞式延时 time.Sleep(time.Second * 1) } //回调出得到的就是一个event对象了 func onTest(event *tbs.Even...阅读全文

博文 2016-10-11 05:00:01 zrs19800702

笔记(一)

***只是想做个笔记,以便以后回顾并且大家分享,由于水平有限(很菜),可能会出现一些错误,请大家及时纠正 谢谢。*** * 语言设计中空引用(null reference)的存在有什么问题?假设你想要将空引用的概念从你的首选语言中移除,可能导致什么结果? 对golang来说,在解引用的时候会存在panic问题。 移除会导致与其他语言通信的时候语义缺失问题 >回顾:Go推荐通过调用panic函数报告错误,为了报告运行期间致命错误,panic函数用于停止当前控制流程并引发一个运行时恐慌,panic函数可以接受任意类型参数,但通常时string类型或者error,因为这样更容易描述运行时恐慌的详细信息。 还有,运行时恐慌并不都是通过调用panic函数的方式引发的,也可以由Go运行时系统引发。 * ...阅读全文

博文 2018-03-25 12:36:30 liumenggc

leetcode刷题记录Array篇(16~3 Sum closest)

题目:Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution. 翻译:给定n个整数的数组S,在S中找到三个整数,使得和最接近一个给定的数目target。 返回三个整数的总和。 你可以假设每个输入都只有一个解决方案。 思路:这题的思路和15题3sum差不多,只是结果变成最接近某个数,而不是等于0,并且只需要返回最小的结果,斌不需...阅读全文

博文 2017-04-21 02:45:44 L千年老妖

Docker学习笔记(二)

**1**.Docker的安装 必备环境: **CentOS 7.4** 下载链接 http://mirrors.nju.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1708.iso **Docker 1.12.6** yum命令安装,版本一定要是1.12.6,千万不要按照文档上安装Docker CE 安装步骤 **(1)**.我是在VM中新建的虚拟机,虚拟机要保证挂载点**/boot**文件系统为ext4(挂载点**/**文件系统为ext4),主机名只由字母和中划线组成,网络使用NAT模式,安装完,使用`df -hT`来查看文件系统 由于CentOS 7.4内核版本过低,我们应该先升级内核,命令如下: `cd etc/yum...阅读全文

博文 2018-01-18 10:51:53 yinshidaoshi

[转载]游戏服务器架构

文:https://www.cnblogs.com/hwcs/p/7203605.html 一、游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类服务的特点是要特别关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。 功能约束,是架构设计决定性因素。基于游戏业务的功能特征,对服务器端系统来说,有以下几个特殊的需求: 游戏和玩家的数据存储落地 对玩家交互数据进行广播和同步 重要逻辑要在服务器上运算,做好验证,防止外挂。 针对以上的需求特征,在服务器端,我们往往会关注对电脑内存和CPU的使用,以求在特定...阅读全文

博文 2018-12-31 19:34:47 Golang语言社区

Golang学习摘录一:初识

1、Hello Word编写方式 package main import "fmt" func main (){ fmt.Printf("Hello, world") } 编译 go build helloworld.go运行 ./helloworld 2、声明方式 1、普通方式 var a int = 15 var b bool = false 或 var a int var b bool a = 15 b = false 2、 :=会自动匹配类型,只能在函数内使用 a := 15 b := false 3、中括号的形式: var ( x int b bool ) 4、平行赋值 a,b := 20,16 #注意 :Go 的编译器对声明却未使用的变量在报错。 5、常量,只能是数字、字符串或布...阅读全文

博文 2017-02-23 02:47:42 ma772528138

下载 Ubuntu Docker Golang

下载 Ubuntu 教程 下载地址:http://www.ubuntu.org.cn/download/alternative-downloads。版本为 14.04.4 配置过程查看收藏网页 用 mac iTerm 操作ubuntu:ssh hostname@ip [-p port]ssh 默认端口是 22ssh rainbow@192.169.240.131 连接 安装 Docker https://docs.docker.com/engine/installation/linux/ubuntulinux/先决条件: 查看是否有 apt-get ,或者升级: sudo apt-get update 安装:sudo apt-get install apt-transport-https c...阅读全文

博文 2017-06-15 03:07:00 吃柠檬的小刺猬

Golang 数据结构:链表

Golang 中链表的实现及常用操作,数据结构系列原文:flaviocopes.com,翻译已获作者授权。 前言链表的结构类似于数组,但插入元素的代价比数组小得多,因为在数组中插入元素,需要把插入位置后边所有的元素后移一个位置,删除元素则要全部前移。 数组将元素顺序存储在内存单元中(静态分配内存),而链表是通过元素中的指针,将元素存储在零散的内存中(动态分配内存) 链表相比数组有个明显的缺点:查找元素时不知道元素在链表中的地址,需要从第一个元素开始遍历整条链表来寻找。 链表结构基本操作:12345678Append(t) // 将元素 t 追加到链表尾部Insert(i, t) // 在位置 i 处插入元素 tRemoveAt(i) // 移除位置 i 的元素IndexOf(t) // 返回...阅读全文

博文 2018-03-15 10:58:54 wuYinBlog

Emacs支持gomodifytags

受到《Go 终极指南:编写一个 Go 工具》的启发,萌生了把 gomodifytags 封装成emacs-plugin的想法, 然后经过两周的努力,诞生了emacs-go-tag。 emacs-go-tag 实现了两个命令: go-tag-add 添加结构体字段tag, go-tag-remove 删除结构体字段tag。 安装依赖 emacs-go-tag 有两个依赖项, gomodifytags 和 go-mode.el,若使用emacs做Go开发 go-mode.el 应该已经在使用了。 gomodifytags安装如下: go get -u github.com/fatih/gomodifytags 安装 目前emacs-go-tag已发布到了MELPA上,可使用如下命令安装: M-x...阅读全文

博文 2017-12-08 09:04:42 brantou

RobotGo v0.47.0 发布, Go 桌面自动化, 移除 libpng 等依赖

RobotGo v0.47.0 库克山发布了,Golang 跨平台控制鼠标、键盘、位图、屏幕、窗口句柄以及全局事件监听。 项目地址: https://github.com/go-vgo/robotgo ### 主要变更 - [NEW] 增加 windows 32bit and 64bit 依赖到包内部 - [NEW] 增加 macOs 依赖到包内部 - [NEW] 将依赖包添加到 vendor 解决依赖不方便问题, 移除 zlib/libpng 依赖 - [NEW] 增加 FindColorCS(x, y, w, h int, color CHex), CHex 类型 and examples #84 - [NEW] 增加 Kill 杀死 process 方...阅读全文