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

golang 自旋锁

参考来源:https://blog.csdn.net/qq_34337272/article/details/81252853 CAS算法(compare and swap)  CAS算法是一种有名的无锁算法。无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。CAS算法涉及到三个操作数 需要读写的内存值V 进行比较的值A 拟写入的新值B  当且仅当 V 的值等于 A时,CAS通过原子方式用新值B来更新V的值,否则不会执行任何操作(比较和替换是一个原子操作)。一般情况下是一个自旋操作,即不断的重试。 自旋锁  自旋锁是指当一个线程在获取锁的时候,如果锁已经被其他线程...阅读全文

博文 2018-11-25 19:34:40 one_zheng

Go 包依赖管理工具 —— govendor

govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本、以及无相互侵入的开发和管理。 vendor 特性 最开始的时候,Go 并没有提供较为妥当的包管理工具。从 1.5 版本开始提供了 vendor 特性,但需要手动设置环境变量 GO15VENDOREXPERIMENT=1。 在执行 go build 或 go run 命令时,会按照以下顺序去查找包: 当前包下的 vendor 目录 向上级目录查找,直到找到 src 下的 vendor 目录 在 GOROOT 目录下查找 在 GOPATH 下面查找依赖包 在发布 1.6 版本时,该环境变量的值已经默认设...阅读全文

博文 2019-03-26 02:34:43 舆图易稿

装机员PE工具 V5.0(UEFI+UD双启动+首发自动安装MSDN原版系统)

装机员PE工具 V5.0(UEFI+UD双启动+首发自动安装MSDN原版系统) [2.jpg](http://studygolang.qiniudn.com/170222/1b9bc8415df4a8ded77c6590a72a86af.jpg) 文件:装机员pe5.0 大小:303M MD5:314F2D02FA7A894FCBE995FCCF19D9B2 [迅雷]电信下载 本站下载 ① 百度网盘 ② 采用最新win8内核,支持UEFI+UD双启动 ![2.png.thumb.jpg](http://studygolang.qiniudn.com/170222/9c3a7cc0432a02adbd437de28a510733...阅读全文

数据结构——Golang实现队列

载请注明出处: 数据结构——Golang实现队列 Golang 1. 介绍 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 数据结构里的队列就是模仿现实中的排队。 1) 新来的都排在队尾; 2) 最前面的办理业务后离队,后面一个跟上。 根据特点,计算机砖家就归纳以下队列结构。 image.png 2. Golang 实现 2.1. 队列结构 同前文的栈一样,在这里,我把队列拆分为两个部分,容器和链表,容器用结构体实现,链表用单链表,当然大家也可以用其他链表结构,甚至数组来实现。 这里的例子,也是使用单链表实现的。 // Queu...阅读全文

博文 2019-02-13 16:34:47 ChainZhang

MySQL Go驱动

MySQL基础见菜鸟教程; 本文参考了astaxie/build-web-application-with-golang. 创建数据库 编写test.sql source test.sql 文件 编写Go文件 test.go 内容如下: package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:root@/test") //打开数据库test checkErr(err) stm, err := db.Prepare("DROP TABLE IF EXISTS userinfo;") //准备SQ...阅读全文

博文 2018-12-31 16:34:47 早安我的猫咪

Golang 套件管理工具 Glide

# 原文來自: [Golang 套件管理工具 Glide](https://blog.wu-boy.com/2016/05/package-management-for-golang-glide/) 套件版本管理已經是各大語言不可或缺的工具,像是 [Node.js][1] 有 [npm][2],[PHP][3] 有 [Composer][4],[Ruby][5] 有 [RVM][6] 等...,都已經發展很成熟了,但是在 [Golang][7] 語言呢,在 Go 1.5 以後的版本,可以透過 `GO15VENDOREXPERIMENT` 或 [Glide](https://glide.sh/) 來管理套件版本,在 Go 官方網站也有整理一份 [Wiki](https://github....阅读全文

Golang包管理-vendor

Vendor目录介绍 Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。即使使用vendor,也必须在GOPATH中。 查找依赖包路径的顺序 当前包下的vendor目录。 向上级目录查找,直到找到src下的vendor目录。 在GOPATH下面查找依赖包。 在GOROOT目录下查找 包管理工具govendor 需要把 $GOPATH/bin/ 加到 PATH 中。 安装 go get -u github.com/kardianos/govendor 命令 init 创建 vendor 文件夹和 v...阅读全文

博文 2019-03-08 02:34:39 clawhub

【golang】HashMap原理和实现

理 我们都知道怎么使用goLang中的map来存储键值对类型的数据,但是它的内部实现是怎么样的? 其实map是一种HashMap,表面上看它只有键值对结构,实际上在存储键值对的过程中涉及到了数组和链表。HashMap之所以高效,是因为其结合了顺序存储(数组)和链式存储(链表)两种存储结构。数组是HashMap的主干,在数组下有有一个类型为链表的元素。 这是一个简单的HashMap的结构图: HashMap结构 当我们存储一个键值对时,HashMap会首先通过一个哈希函数将key转换为数组下标,真正的key-value是存储在该数组对应的链表里。 HashMap的数组往往是有限的,那当要存储的键值对很多数组不够或者两个键值对哈希运算后的值相同时,不就会有不同的键值对存储在同一个数组下吗?是的,...阅读全文

博文 2018-07-11 02:34:42 chaors

Golang 处理命令行启动参数

最近要做Apache Thrift相关的项目。大概看了一下,觉得不难。Thrift目前已经至此和Go语言了。照着官方提供的一个例子在学。周五搞了一上午,终于编译通过了。下午去读例子源码,发现一个从来没见过的包——flag。 不管是C开发还是Java,都接触过命令行开发。像大Java的main函数public static void main(String []args)直接参数里面就能读取到命令行启动参数。而Go语言的主函数是func main()果断啥也没,需要用这个包。 虽然Go不像大Java,在主函数里面直接就能获取到命令行参数,但是Go通过flag包获取到的参数类型,不像Java那样,只能是String类型。 再获取之前,需要自定义要获取的参数名称、参数默认值、参数使用方法,还有参数...阅读全文

博文 2017-02-09 12:25:00 Bryce

从Maven,Gradle到Go

为什么要有依赖管理工具? 谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个“Hello World”,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在项目的lib里。要提供给别人呢?把二进制包提供下载或者给别人传过去。依赖管理工具出现之前大多数都是这样搞的。 但如果再复杂些,依赖库本身也有依赖怎么弄呢?将依赖压缩打包,然后放个rea...阅读全文

Go语言内存分配器的实现

前几天断断续续的写了3篇关于Go语言内存分配器的文章,分别是Go语言内存分配器设计、Go语言内存分配器-FixAlloc、Go语言内存分配器-MSpan,这3篇主要是本文的前戏,其实所有的内容本可以在一篇里写完的,但内容实在太多了,没精力一口气搞定。本文将把整个内存分配器的架构以及核心组件给详细的介绍一下,当然亲自对照着翻看一下代码才是王道。 内存布局结构图 我把整个核心代码的逻辑给抽象绘制出了这个内存布局图,它基本展示了Go语言内存分配器的整体结构以及部分细节(这结构图应该同样适用于tcmalloc)。从此结构图来看,内存分配器还是有一点小复杂的,但根据具体的逻辑层次可以拆成三个大模块——cache,central,heap,然后一个一个的模块分析下去,逻辑就显得特别清晰明了了。位于结构图...阅读全文

博文 2014-11-13 21:58:15 skoo

Swirl:Docker Swarm 集群管理的新选择

# SWIRL GitHub 地址:[https://github.com/cuigh/swirl](https://github.com/cuigh/swirl) [**Swirl**](https://github.com/cuigh/swirl) 是一个 Docker 管理工具,专注于 Swarm 集群。 ## 主要功能 * Swarm 各组件管理,包括服务、网络、任务等 * 镜像与容器管理 * Compose 管理与部署 * 服务状态监控(基于 Prometheus) * 服务自动伸缩 * 支持 LDAP 认证 * 基于 RBAC 完整的权限控制模型 * 支持横向扩展部署 * 多语言支持 * 更多功能... ## Snapshots ...阅读全文

解剖Go语言map底层实现

``map``是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢? # ``map``的整体结构图 Golang中``map``的底层实现是一个散列表,因此实现``map``的过程实际上就是实现散表的过程。在这个散列表中,主要出现的结构体有两个,一个叫``hmap``(``a header for a go map``),一个叫``bucket``。这两种结构的样子分别如下所示: hmap: ![hmap.png](https://static.studygolang.com/180826/09d0c94fc2946bba795ecc2ae0c97ac2.png) 图中有很多字段,但是便于理解``map``的架构,你只需要关心的只有一个,就是标红的字段:bucke...阅读全文

博文 2018-09-01 02:46:44 RyuGou

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

OPIPING 专业Api 管理及自动化测试工具

功能说明 支持多团队、多项目、多环境,更符合技术开发和使用场景 支持Api场景组并发测试、性能测试 通过功能权限、数据权限让您精准的控制用户的使用权限,使其尽在掌控之中 动态生成API数据,让前后端更好的协同开发,降低等待时间,提高开发效率 官方地址:https://www.opiping.com/ 操作手册:https://shuka.opiping.com/t/opiping Windows、Mac客户端演示 多团队管理 Api快速查找 Api自动化测试 Api Mock测试 常用插...阅读全文

修改 liteide 的 godoc 文档样式

在某些桌面环境下,如果 QT 无法运行,则打开 go api 的文档,可能由于系统颜色的原因,无法看清楚文档,甚至看不到文字。浏览了一个 liteide 的目录,发现在 liteide/share/liteide/packages/go/godoc 上有个样式表:style.css。修改这个样式表,即可调整文档的样式。 body { margin: 0; font-family: Helvetica, Arial, sans-serif; background: #333; } 我添加了 body 的背景颜色为 #333,使其不受系统桌面配置的影响。 pre { background: #333; padding: 10px; -webkit-border-radius: 5px; -moz...阅读全文

博文 2015-03-12 18:00:01 heiing

Go数据结构之集合

一、什么是集合集合就是不同对象的无序聚集。那么链表和集合有什么关系呢?我们来变个魔术。如下图是各种颜色组成的链表:​下面我们一步步把链表变成集合。第一步砍去链接​第二步去掉重复​第三步放到一个框里摇一摇就成集合了​可以看出集合有这些特点:无序:链表去掉链接,就是去掉元素间有序状态。不重复:去掉重复的玫红色。虽然说集合是一种数学概念,但在实际生活中无处不透露着集合。比如一个班级的学生是一个集合。班级里的男生又是一个集合。二、集合的结构​大卫哥这里为了简化概念的描述,继续用单链表来表示集合,但是在对集合做计算的时候单链表并不合适,数据量大的时候它的弊端就会显现,在讲到后面的数据结构和算法的时候,我们再回头来完善前面讲的数据接口的实现。三、接口说明及实现​2、Init初始化集合,本质是初始化链表。...阅读全文

博文 2017-12-09 01:29:48 rhan-zz

go 语言实现通用单链表

## 链表定义 ### 定义错误 ```go import "errors" var ( //ErrIndex 超出列表索引 ErrIndex = errors.New("out of list index") //ErrNotFound 没有找到该元素 ErrNotFound = errors.New("not found this element") ) ``` ### 定义接口 ```go // Comparer 数据接口 type Comparer interface { compare(data interface{}) bool } ``` ### 定义链表结点 ```go // SingleElement 列表结点 type SingleElement struct { Dat...阅读全文

博文 2019-07-17 09:19:21 daymenu

GO 编写的进程管理工具 Gosuv

Gosuv是一个进程管理工具,使用Go语言编写。受python-supervisor启发,学习了很多其中的功能和用法。 至于为什么要写一个go的进程管理工具,主要还是因为感觉python-supervisor不是很好用(毕竟我也用了这玩意好几年了,又爱又恨)。因此gosuv对其不易用的部分重点加强了下。 Web控制台部分做了重点加强,因为使用频率太高了。在网页上也可以直接添加先的应用,网页查看日志的部分也做了优化,查看起来没有这么费劲了。使用了websocket连接后端,状态一有变化,前台就能立刻看到变化。 命令行做了部分修改,通常来说reload是热加载的命令,可是python-supervisor的reload命令是重启后台主进程,用起来显然很不习惯,顺手改掉。 配置文件也被我全...阅读全文

Go数据结构之栈

一、什么是栈​这是杭州地铁1号线线路图。大卫哥考考大家,地铁列车如何调头?我也不卖关子了,列车通常是用“人字轨道”来变换车道。​列车先从A轨道开进“人字轨道”里,再从B轨道开出。从A轨道开进去的时候1号车厢是车头,从B开出来的时候4号车厢就变成车头了。所以大家看到地铁前后各一个车头。“人字轨道”有个特点:先进后出,英文简写就是FILO,含义自己体会。计算机专家把“人字轨道”抽象出来,提出了一个叫“栈”的概念。​栈和“人字轨道”的特点是一样的FIFO,只不过把车厢换成了数据。接下来,看大卫哥把栈扒的底裤不剩。二、栈的结构​大卫哥把栈拆分成容器和链表两块,容器用结构体实现,链表用单链表,当然大家也可以用其他链表结构,甚至数组来实现。三、接口说明及实现​1、Init初始化栈,其实就是初始化里面的链...阅读全文

博文 2017-11-16 02:29:29 rhan-zz

字节跳动后台实习一面凉经

记录一下昨天的面试,感觉是凉了。 字节跳动嘛,早有耳闻面试很难,尤其是算法题部分,所以特地准备了很久算法,没想到最后没有跪在算法,跪在数据库…… 背景 2019届中流985计算机本科,已经保研南京大学,同学帮忙内推暑期实习,时长3个月。目标岗位是后台开发,头条后台用Golang较多,本人没有接触过Golang,对Java比较熟悉。 面试 先自我介绍一下,最近在做什么。打算什么时候开始实习,能实习多久。 对什么语言比较熟悉?Java。 HashMap底层实现,如何扩容。HashMap为什么线程不安全,多个线程同时put时会发生什么?(这里答得不好,没有答到同时put导致链表成环的场景,反而是想到了用迭代器时其他线程对HashMap进行了修改引发的ConcurrentModificationEx...阅读全文

博文 2019-04-20 21:34:40 Jarkata

Go语言编程--读后感

图灵出的《Go语言编程》拿到手后稍稍有点失望,书太薄了,才230页。阅读完后,说实话,作为Go语言入门书籍,实用性比不上邢星翻译的那本GO中文学习书。把它当作Go语言工具书,内容和老外写的又差的太远。所以,我的结论是:还行,不是最好的,也不是最差的。对于Go语言有兴趣而又不了解的朋友,值得买来看看。但对于Go语言的职业开发者,建议还是看老外写的Go语言工具书。例如,《The.Way.To.Go.A.Thorough.Introduction.To.The.Go.Programming.Language》,《Programming.in.Go.Creating.Applications.for.the.21st.Century...阅读全文

博文 2014-12-24 00:00:01 cometwo

2018秋招后端面经--百度、网易、拼多多、滴滴

【写在前面】 背景中流985,非科班,但相近专业渣硕。没有互联网相关项目,只会C++和Python。8月初开始准备秋招。岗位锁定后端,目标定位前十大厂,侥幸拿到了理想的offer。【准备】 目标后端,主要复习内容:刷题+基础,觉得有时间的同学最好多增加一个项目。我由于准备得太晚,优招内推基本都没来得及,所以只能走校招。 基础部分:C++、数据库、操作系统、网络,数据结构与算法五门。C++看的是程序员面试宝典。其余主要靠的牛客网上github资料:https://github.com/CyC2018/CS-Notes 刷题:剑指offer牛客网上刷了两遍,一遍python,一遍C++,然后手写一遍,由于时间关系却没有总结。LeetCode核心题目,参照上面github资料。牛客网上2017年编...阅读全文

博文 2018-10-26 00:34:46 happyVee

Go语言实现跳表(SkipList)

跳表(skiplist)在redis/levelDB中属于核心数据结构,我简单粗暴的用Golang实现了下。 就我的简单理解来说,就一个普通的链表,在insert时,通过Random_level(),把一层变成很多层, 越上数据越小,跨度越大。 查找时从上往下找,如果在一层没找到,在下一层继续时,以此节点作为起始, 继续查找,是一种用空间换时间的方式。 测试代码: package main //SkipList //author:Xiong Chuan Liang //date:2014-1-28 import ( "github.com/xcltapestry/xclpkg/algorithm" ) func main() { slt := algorithm.NewSkipList() ...阅读全文

博文 2015-06-17 23:07:41 xcltapestry

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

用golang开发的辅助工具,附上源码

一个用golang开发的辅助工具,在web开发下自动根据数据库表生成model文件。根据php框架yii中的gii等启发开发的类似的工具。可以在此基础上扩展自动生成其他的文件。 目前只是生成模型文件,模型中数据库的struct 映射表的字段。可以根据需要自行扩充。 项目地址:http://git.oschina.net/lmh860628/autofile/tree/master...阅读全文

go实现排序的链表

链表的数据结构比较线性数组,优点是 可以方便的对任意的位置进行插入和删除。 这一特性使得它很适合于应用在排序等场景下,由于golang目前类库还不是很完善,在java中可以很简单的使用api提供的支持完成对list或者map的排序,在使用go时就没有那么幸运了,可能需要自己去实现。 下面的例子就是使用go package 中的LinkedList实现的排序的链表。 有几个功能特性: 1.支持固定的长度 2.可自定义排序的规则 3.组合LinkedList功能 package codeforfun import ( "container/list" ) type SortedLinkedList struct { *list.List Limit int compareFunc func (o...阅读全文

博文 2014-10-04 19:26:24 mahang

golang终端进程管理工具

最近维护了一个类似nodejs的pm2进程管理工具pmgo 今天发布了0.1.0版,虽然还有很多的东西需要完善,但是基础的功能都能使用。欢迎大家star或者提交pr. 另外项目中获取cpu和memory的package也是我维护的,但在这一版暂不支持windows,所以导致该项目不支持windows平台,然而这个问题将在下一版解决,不支持的原因就是我身边没有windows的电脑。。。 最后,放上连接: https://github.com/struCoder/pmgo ![demo.png](http://studygolang.qiniudn.com/170411/f3fadf59b05e4df92adfa98771789e9f.png...阅读全文

Gopher China 2019 讲师专访 -百度资深研发工程师陈肖楠

第五届 Gopher China 大会将于 2019 年 4 月 26 日-4 月 28 日在北京市海淀区朗丽兹西山花园酒店举办,Gopher China 大会目前是国内最大规模,最专业的 Go 语言线下技术交流大会。大会聚集了全国各地的 Gopher 一起进行 Go 语言的学习与交流。通过国内外 Go 语言届的大神给大家带来技术的分享,实时了解有关 Go 的动态、应用场景以及技术实践的细节等等。 为方便我们的 Gopher 朋友们在大会前也能 get 到大神们在 Go 方面的技术理念,会前我们将对本次大会所有的讲师一一做专访。下面是来自百度 APP 技术平台部 /资深研发工程师-陈肖楠的专访。 ![alt 文本](http://m.qpic.cn/psb?/V11z1X9s0jmg8R/q...阅读全文

博文 2019-03-01 21:14:21 Susan

go 学习笔记之是否支持以及如何实现继承

熟悉面向对象的小伙伴们可能会知道封装,继承和多态是最主要的特性,为什么前辈们会如此看重这三种特性,真的那么重要吗? ![go-oop-inheritance-concept.jpeg](https://upload-images.jianshu.io/upload_images/16648241-82498195b3e8d051.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 什么是封装 什么是封装,封装有什么好处以及怎么实现封装? 相信大多数小伙伴们都有自己的理解,简而言之,言而简之,封装是屏蔽内部实现细节,仅仅对外暴露出有价值接口. ![go-oop-inheritance-computer.jpeg](https:/...阅读全文

博文 2019-08-24 23:55:52 snowdreams1006

go语言打印九九乘法表

package main import "fmt" func main() { /* local variable definition */ var top int = 10 /*两层循环打印*/ for i:=1; i /*格式输出,最后输出一个制表符以分隔一行中的算式 %2d用于将每一个结果以两位整数对齐*/ fmt.Printf("%d * %d = %2d\t", i , j, i*j) } println() } } go语言编写的乘法表,初学者,各位轻拍。 输出: 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = ...阅读全文

博文 2015-12-24 00:00:00 tjzzy

Go语言中文网源码studygolang

[Go语言中文网 - Golang中文社区](https://studygolang.com/) 源码 网站上线时间:2013-03-15 14:38:09 目前在线运行的是 Master。欢迎有兴趣的 gopher 们参与进来,一起构建一个完善的 Go 语言中文网,Go 语言爱好者的学习家园,参与方式请参考:[https://studygolang.com/topics/4092](https://studygolang.com/topics/4092) 首先你都需要下载代码,因为代码中有很多静态资源。可以[点击这里下载](https://github.com/studygolang/studygolang/archive/master.zip) 或 `git clone https...阅读全文

如何用Go实现单链表

一、概念介绍下面这副图是我们单链表运煤车队。​每节运煤车就是单链表里的元素,每节车厢里的煤炭就是元素中保存的数据。前后车通过锁链相连,作为单链表运煤车,从1号车厢开始,每节车厢都知道后面拉着哪一节车厢,却不知道前面是哪节车厢拉的自己。第一节车厢没有任何车厢拉它,我们就叫它车头,第五节车厢后面拉其他车厢,我们称为车尾。作为单链表它最大的特点就是能随意增加车队的长度,也能随意减少车队的长度。这是比数组公交车最大的优点。二、Go语言实现讲解1、节点​每节车厢都由车体、绳索和煤炭构成。在Go语言中表示这种自定义组合体的类型就是结构,当然为了通用性,我们这里要把车厢转换成节点也就是元素,煤炭转换成数据,绳索转换成指针。type Node struct { data Object next *Node ...阅读全文

博文 2017-11-09 06:41:27 rhan-zz

Go语言的包管理

接触go语言之前写了一些nodejs的App,所以对于npm的包管理方式还是觉得挺方便的,但转移到go语言平台后,由于官方并未推出自己的包管理工具,所以只能借助于第三方的一些工具完成,本篇主要介绍一些目前使用的go的包依赖管理工具,用来协助程序的开发. gpm gpm工具使用来完成go依赖库下载的工具,非常的简单,只需要创建自己的一个Godeps文件,并把依赖的包写到文件中,这样我们就可以直接通过命令行来执行下载任务,并把依赖下载到当前的GOPATH路径中. 一个典型的Godeps文件中,我们可以不标记任何库依赖的版本信息,这样默认下载最新的依赖库,也可以通过标记下载指定的版本,只需要在依赖库的后面写上版本或者git的tag即可,如下所示: $ cat Godeps # This is a ...阅读全文

博文 2016-11-21 02:00:42 u014029783

bibibi 做游戏

玩自己喜欢的游戏,如果没有,就做一个。 ---bibibi 为什么还没有做游戏 首先要回答一个问题,为什么工作5年了,还没有进入游戏行业,这要从我的工作经历讲起。 2012年毕业后,首先关注的是生存,随便进了一家愿意招我的外包公司,被公司强行从c++开发转型去做ios,当时还很不乐意,什么ios,从来没听说过,我要做我的c++,c++是世界上最好的语言,于是我向主管申请做c++,可惜主管没鸟我。没办法,工资比较重要,于是我就学起了ios,没想到,一做就是5年。 中间跳过几次槽,跳槽的时候发现ios的工作很好找,行情不错,待遇也很好,于是就一直做到现在。这些技术积累和工作经历都是可以累加的,下家公司给你高薪看重的也是这点,如果转行做游戏,那就是要从头算起,待遇大幅度降低。当一个人的事业在飞速上...阅读全文

博文 2017-09-04 09:05:09 bibibime

Golang官方依赖管理工具:dep

在这里声明一下,百度或者google看到的godep不是我这篇博文说的dep,那它们是什么关系呢?按照Peter Bourgon博文来说,它们的作者都有相同的人,但是一个是dep是官方版本,godep是第三方工具。我今天介绍的是dep,之前也有介绍过glide,有兴趣的可以到Golang依赖管理工具:glide从入门到精通使用看看。 现在还有一个疑问是为什么官方现在要支持依赖管理了呢?我个人认为有如下原因(勿喷,如果不同或者遗漏欢迎留言补充):第三方依赖管理很多,虽然很好用,但是很少可以兼容的,结果--乱;官方的包管理为了增加社区的凝聚力,保持Go开箱即用的简单特性,不需要大家再安装各种第三方工具了,而且第三方工具都会过来兼容官方版的;还有一个官话,为了go更好的发展;dep的FAQ中有一段...阅读全文

博文 2018-07-02 12:20:33 梦朝思夕

Go语言实现LRU算法

LRU 通常使用hash map + doubly linked list实现。在Golange中很简单,使用List保存数据,Map来做快速访问即可. 具体实现了下面几个函数: func NewLRUCache(cap int)(*LRUCache) func (lru *LRUCache)Set(k,v interface{})(error) func (lru *LRUCache)Get(k interface{})(v interface{},ret bool,err error) func (lru *LRUCache)Remove(k interface{})(bool) 演示: package main //LRU Cache //author:Xiong Chuan Lian...阅读全文

博文 2015-06-17 23:07:42 xcltapestry

Go 辅助工具

出来go和gofmt之外,下面有很多有用的工具 go get -u -v github.com/nsf/gocode go get -u -v github.com/rogpeppe/godef go get -u -v golang.org/x/tools/cmd/goimports go get -u -v golang.org/x/tools/cmd/oracle go get -u -v golang.org/x/tools/cmd/gorename go get -u -v github.com/golang/lint go get -u -v github.com/kisielk/gotool go get -u -v github.com/kisielk/errcheck 在v...阅读全文

博文 2016-08-23 13:00:02 zly9923218

Go程序GC优化经验分享

作者:达达来源:http://1234n.com/?post/yzsrwa最近一段时间对《仙侠道》的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验。游戏第一次上线的时候,大部分精力都投入在做cpuprof和memprof找性能瓶颈和内存泄漏上,没有关注过Go的GC运行情况。有一次cpuprof里的scanblock调用所占的比例让我注意到Go的GC所带来的性能消耗,记得那份cpuprof里,scanblock调用占到49%。也就是说有一半的CPU时间浪费在了GC上。于是我开始研究如何进行优化,过程中免不了要分析数据,经过一番搜索,我好到了GOGCTRACE这个环境变量。用法类似这样:GOGCTRACE=1 ./my_go_program 2> log_file 通过这个环境变...阅读全文

博文 2014-10-10 11:00:00 heiyeshuwu

go module 使用教程

如果你还在使用 GOPATH 模式来开发Golang程序,那么你可以参考本文来告别 GOPATH,并带给你一个方便的包管理工具。 关于 go mod 的说明和简单使用,可以参考: 1、Go1.1.1新功能module的介绍及使用请添加链接描述 2、Introduction to Go Modules请添加链接描述 3、Go 1.11 Modules 官方说明文档请添加链接描述 go Modules—Modules是Go 1.11中新增的实验性功能,是一种新型的包管理工具。具体操作:首先要把go升级到1.11 升级后,可以设置通过一个环境变量GO111MODULE来激活modules: export GO111MODULE=on //此时go会使用modules,而不会去GOPATH目录下查找...阅读全文

博文 2020-03-17 23:33:20 chymingyan

Go语言标准库概览

Go语言标准库概览 九 08 bigwhite技术志 Assert, Blog, Blogger, C, Cpp, Go, Golang, Google, Interface, map, Opensource, Programmer, Reflect, Slice, 切片, 博客, 反射, 容器, 开源, 接口, 断言, 方法, 标准库, 程序员, 结构体, 编程,语言, 编译器 No Comments 本文翻译自Dr.Dobb's的"A Brief Tour of the Go Standard Library"一文。 在Go语言五周系列教程的最后一部分中,我们将带领大家一起来浏览一下Go语言丰富的标准库。 Go标准库包含了大量包,提供了丰富广泛的功能特性。这里提供了概览仅仅是有选择性的且...阅读全文

博文 2014-11-22 13:00:55 bigwhite

Go语言开发工具LiteIDE

Go语言最初在2009年11月对外公布,在2011年3月16日发布第一个release,第一个正式版本Go1于2012年3月28日推出。在Go语言的正式版本推出后,Eclipse、IntelliJ IDEA、vim、emacs、gedit、SublimeText2、Textmate、Textpad、SciTE、Notepad++等IDE和编辑器开始纷纷有了各自的Go语言插件。 LiteIDE是一款专为Go语言开发而设计的跨平台轻量级集成开发环境(IDE),基于Qt开发,支持Windows、Linux和Mac OS X平台。LiteIDE的第一个版本发布于2011年1月初,是最早的面向Go语言的IDE之一。到2013年1月为止,LiteIDE已经发布到版本X16。 LiteIDE主要特点 支持...阅读全文

博文 2014-10-17 10:00:01 hypnosis01

数据结构——Golang实现双向链表

载请注明出处:数据结构——Golang实现双向链表 Golang 1. 双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 结构如下图: image.png 2. Golang 实现 2.1. 相关结构体 首先需要先定义一下链表相关的结构,DoubleObject用于每个节点的数据,为interface{}结构,DoubleNode为链表中的节点,DoubleList双链表,为了多协程读写安全,所以在链表中加了读写锁。 具体定义如下: // 节点数据 type DoubleObject interface{} // 双链表节点 type DoubleNode ...阅读全文

博文 2019-01-30 23:34:42 ChainZhang

用Golang写一个搜索引擎

用Golang写一个搜索引擎 猜你喜欢 golang入门-- 一个2D的图形库学习 golang入门--一个简单的http client golang的第一个deadlock LiteJob,一个Golang的本地任务调度器 再次自我黑客马拉松--不用第三方库实现一个基于golang的web service 如何利用golang 反射值来定义一个变量 用Golang写一个搜索引擎 用Golang写一个搜索引擎(0x01) 用Golang写一个搜索引擎(0x02) 用Golang写一个搜索引擎(0x03) 前面已经说了倒排索引的基本原理了,原理非常简单,也很好理解,关键是如何设计第二个倒排表,倒排表的第二列也很好设计,第一列就是关键了,为了满足快速查找的性能,设计第一列的结构,我们需要满足以下...阅读全文

博文 2016-04-14 17:00:04 daisongwan

golang之分模块导包例子

liteIde建立sample工程,目录自定 我这边工程叫myTest,目录结构如下 ├── doc.go ├── main.go └── mm ├── a.go └── b.go main.go package main import ( "./mm" ) func main() { mm.Mm() } a.go package mm import ( "fmt" ) func Mm() { zz() fmt.Println("mmmmmmmmmmm") } b.go package mm import ( "fmt" ) func zz() { fmt.Println("zzzzzzzzzzz") ...阅读全文

博文 2014-10-04 19:26:12 ziyouchutuwenwu