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

模拟浏览器登录操作

近来想用Go做一点事,以减轻工作上的负担。 我的工作中有几项工作是每日重复的,大致内容: 1、将数据收集到Excel中。 2、收集齐后,将Excel中的部分数据提交到办公系统中(网页上操作)。 3、再将提交过后的审批号码提取出来,存入Excel中。 我现在有两个问题: 1、现在,上面的第一步Excel操作,Go中不知有何现成的库,若没有,我有个效率不高的办法。这个问题倒还不算急。 2、第二个问题比较着急。向办公系统提交数据,得先登录。我的操作步骤如下: 2.1、先访问办公系统首页,获取Session的Cookie。 2.2、进行登录数据提交,将刚才获取的这个Session的Cookie一并提交上去。 2.3、进行业务数据提交。 我现在的...阅读全文

golang中container/list包用法

list是一个双向链表。该结构具有链表的所有功能。 type Element type Element struct { Value interface{} //在元素中存储的值 } func (e *Element) Next() *Element //返回该元素的下一个元素,如果没有下一个元素则返回nil func (e *Element) Prev() *Element//返回该元素的前一个元素,如果没有前一个元素则返回nil。 type List func New() *List //返回一个初始化的list func (l *List) Back() *Element //获取list l的最后一个元素 func (l *List) Front() *Element //获取lis...阅读全文

博文 2015-06-23 02:03:13 chenbaoke

golang list slice 删除其中一项比对

slice可以动态添加项(使用append()函数),但是没有删除项的函数。变通方法,可以使用slice重新组合的方式删除一个或多个项,slice是引用类型,存的是指针,性能上不会有太多影响,示例如下:package mainimport "fmt"func main() { s := []int{11, 22, 33, 44, 55, 66} // 原始slice i := 2 // 待删除项索引 s = append(s[:i], s[i+1:]...) // 最后面的“...”不能省略 fmt.Println(s) // 数据结果 [11 22 44 55 66]} 有人回答的很好: 这样是可以实现。不过从slice这种数据结构来看,本身并不适合做删除操作。抛开语言,只谈数据结构,我们...阅读全文

博文 2015-06-10 19:00:01 panda1986_meng

Google 镜像站搜集

Google 镜像站搜集 Techzero • 2015-01-31 • 搜集整理 • 394,843 次阅读 • 166 条评论 在特殊的地方和特殊的时间,流畅顺利的打开一个网站也变得如此艰难。 2015.9.4 更新。 以下是直接使用谷歌的方法,如需科学上网请加入交流群53767380,本站交流群为336220319。 本文将不定期维护更新,删除不能用的,增加新的可用网址。欢迎 Ctrl+D 收藏。列表中有些打不开可能是 DNS污染 的原因,可以参考 DNS劫持 DNS污染 介绍 与 公共DNS 推荐 一文尝试解决。 以下镜像站分原版、非原版和智能跳转。非原版的界面有些改变,搜索结果依然与原版相同。智能跳转是在搜索时自动检测使用可用镜像进行搜索并展示结果。 如果您是以下镜像的作者,并且不...阅读全文

博文 2015-09-06 09:00:02 Jr小王子

IntelliJ IDEA开发golang环境配置

看到一篇文章说IntelliJ IDEA开发作为Go的开发环境不错,突然发神经地想试了一下。 谁知道跟着教程走,到后面越来越不对劲,去百度其它教程,谁知道千篇一律。。。 好了下面开始了 首先把GO安装好。。。(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbrains.com/idea/download/。 下载go-lang-idea-plugin这个插件,下载地址: https://plugins.jetbrains.com/plugin/5047。(PS:网上百度的基本都是下源码、编译,搞了一个下午编译,谁知道有已经编译好的可以下载) 下载之后,是一个zip文件,不需要解压,打开IntelliJ IDEA,打开P...阅读全文

博文 2016-02-14 04:00:02 skytoup

Go 语言运算符

Go 语言运算符运算符用于在程序运行时执行数学或逻辑运算。Go 语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符接下来让我们来详细看看各个运算符的介绍。算术运算符下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。运算符描述实例+相加A + B 输出结果 30-相减A - B 输出结果 -10*相乘A * B 输出结果 200/相除B / A 输出结果 2%求余B % A 输出结果 0++自增A++ 输出结果 11--自减A-- 输出结果 9以下实例演示了各个算术运算符的用法:package main import "fmt" func main() { var a int = 21 var b int = 10 var c int c =...阅读全文

博文 2015-11-25 19:00:32 u011225629

[golang学习] 在idea中code & debug

idea 虽然审美倒退了n年. 不过功能还是相当好用的. idea 的go插件堪称最好的go ide. 1. 语法高亮支持 2. 智能提示 3. 跳转定义(反跳转回来) 4. 集成debugger 还有重构等等功能也不错. 这些都是用起来让人很舒服的功能. 你要是用vim/emacs/sublime啥的. 当我没说. 很多人可能都不知道golang 代码可以debug. 很多人用console gdb命令式的调试. 如果不需要界面化的调试器, 也可以略过了. 1. 语法高亮支持 配色看起来挺搓的. 默认的, 我也懒得改. 大家可以随便改... 2. 智能提示 虽然我觉得VS + VA的提示更吊一点. 不过这样也还不错. 3. 跳转定义(反跳转回来) 这在查看代码时很有用. 比如我跳转到fmt...阅读全文

博文 2014-12-30 22:00:01 lingdhox

http.ServeMux解析

## web server概述 使用go语言搭建一个web服务器是很简单的,几行代码就可以搭建一个稳定的高并发的web server。 ``` // hello world, the web server func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func main() { http.HandleFunc("/hello/", HelloServer) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }...阅读全文

博文 2015-09-29 14:14:51 shanks

VSCODE中godef无法跳转到定义的问题

文链接:http://targetliu.com/vscode-can-not-go-to-def/ 之前研究GOLANG时一直用LiteIDE,不得不说,LiteIDE的确不错,但是总感觉缺乏美感,是一款很中规中矩的编辑器。网上看到大家对VSCODE评价不错,尝试后发现的确不错,布局简洁、插件化、支持中文,通过VSCODE GO扩展能够很舒服的写GO的代码。 问题描述 不过在实际使用过程中发现 net 包无法正常跳转到定义,如下段代码 ResolveTCPAddr就无法正常跳转 package main import ( "net" ) func main() { _, err := net.ResolveTCPAddr("tcp", ":4040") } 由于VSCODE GO中跳转到定...阅读全文

博文 2017-02-09 08:29:59 Target_Liu

Go语言的分词器(sego)

今天,主要来介绍一个Go语言的中文分词器,即sego。本分词器是由陈辉写的,他的微博在这里,github详 见此处。由于之前他在Google,所以对Go语言特别熟悉。sego的介绍如下 sego是Go语言的中文分词器,词典用前缀树实现, 分词器算法为基于词频的最短路径加动态规划。 支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行JSON RPC服务。 分词速度单线程2.7MB/s,goroutines并发13MB/s, 处理器Core i7-3615QM 2.30GHz 8核。 接下来,以如下几个方面来介绍sego 1. sego的安装 2. sego的原理 3. sego的使用 1. sego的安装 首先,在Go语言中,有很多第三方包,可以帮助我们实现某些特定的功能。比如这里...阅读全文

博文 2015-03-26 23:00:08 ACdreamers

golang label breaks

我们在for多层嵌套时,有时候需要直接跳出所有嵌套循环, 这时候就可以用到go的label breaks特征了。 先看一个范例代码: package main import ( "fmt" ) func main() { fmt.Println("1") Exit: for i := 0; i < 9; i++ { for j := 0; j < 9; j++ { if i+j > 15 { fmt.Print("exit") break Exit } } } fmt.Println("3") } 执行效果: 注意, label要写在for循环的开始而不是结束的地方。和goto是不一样的。虽然它是直接break退出到指定的位置。 break的标签和goto的标签的区别可以参考下面代码: JL...阅读全文

博文 2015-02-11 03:00:00 ghj1976

Golang获取有重定向信息的response的location

在用golang做模拟登录某个网站的功能时发现了一个问题:如何获取该网站带有重定向信息的Response?或者说我只需要这个Response中的location信息即可,但是发现对于go的标准库net/http来说如果不hack这个库是没办法直接获取带有重定向信息的Response,而且目前大多第三方的http库也是基于标准库net/http的,貌似就要改net/http库或库本身就提供了对于重定向的设置? 那么我们就得先查看一下net/http库的源码了,通常我们都会用http.Client的Do方法发起一个请求,首先看一下它的源码: // Do sends an HTTP request and returns an HTTP response, following // policy ...阅读全文

博文 2015-05-04 09:00:01 reflectsky

golang技术随笔(一)深入理解interface

Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。可见接口在golang中的地位,及其对gloang这门语言所带来的活力。 golang中的interface是什么 接口相当于是一份契约,它规定了一个对象所能提供的一组操作。要理解golang中接口的概念我们最好还是先来看看别的现代语言是如何实现接口的。 C++没有提供interface这样的关键字,它通过纯虚基类实现接口,而java则通过interface关键字声明接口。它们有个共同特征就是一个类要实现该接口必须进行显示的声明,如下是java方式: interface IFoo { void Bar(); } class Foo implements IFoo ...阅读全文

博文 2015-01-26 20:00:02 justaipanda

Go语言流程控制语句if、goto、for、switch

最近在看go语言,虽然网上大多数的评论都是在吐槽go语言,但是我喜欢简单的东西,我不拿它和任何语言去比,去用每一种语言完全是自己兴趣问题。 还没开始就跑题了 ~~!回到标题上来,golang的流程控制,刚开始学go,记性一直都不怎么好,做个笔记 流程控制包含三大类:条件判断、循环控制和无条件跳转。 if go语言的if package main import ( "fmt" ) func main() { if a := 8; a > 2 { fmt.Println("a 比 10 大") } else { fmt.Println("a 比 10 小") } } 输出 a 比 2 大 if语句允许在if里面声明变量,但是这个变量的作用域只在该条件逻辑块内。 goto package main...阅读全文

博文 2014-10-06 06:16:32 guhao022

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-29 01:00:00 LvanNeo

Vim 搭建强大的 Golang 开发环境

Vim 有一个很强大的地方是有各种强大的插件 对于 Go 语言,官方提供了一些简单的 Vim 插件,比如 语法高亮;Sublime 中有一个插件 GoSublime 对 Go 开发支持比较好。而 Vim 中有一个插件 vim-go,功能很强大。喜欢 Vim 的 gopher 可以试用下。插件地址:[vim-go](https://github.com/fatih/vim-go)。 ### 主要特性: ### 1、语法高亮,如 函数,操作符,方法等; 2、通过 gocode 支持自动完成; 3、保存是自动 gofmt,而且会保持光标的位置,不会破坏 undo 历史记录(这点很重要); 4、通过 godef 支持代码跳转(如跳转到定义处); 5、在 Vi...阅读全文

Go语言学习八:切片(slice)和范围(range)

// Go 语言切片是对数组的抽象。切片的单词来源于可以对其他数组和切片进行片段截取 // Go 数组的长度不可改变,在特定场景中这样的集合就不太适用, // Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"), // 与数组相比切片的长度是不固定的,可以追加元素, // 在追加时可能使切片的容量增大。 package main import "fmt" func main() { // 切片的长度和容量 var numbers = make([]int, 3, 5) //用make创建切片 printSlice(numbers) // 空(nil)切片 // 切片在未初始化时默认是nil,长度是0,容量也是0 var numbers1 []int printSlice(numbe...阅读全文

博文 2016-03-31 11:00:08 shawncheer

google hosts

google hosts 2015.2.16更新,本文只提供google相关服务的hosts,目前有效,失效后会及时更新 注1:请使用chrome浏览器,并在地址栏里输入chrome://flags/,然后查找QUIC,启用该协议,同时建议启用SPDY/4,能让访问更流畅。 注2:请使用https的方式访问,比如:https://www.google.com 注3:默认可能会跳转到www.google.com.hk,如果.hk访问困难,请使用:https://www.google.com/ncr 方式访问,禁止国别跳转。 ====更新分界线,复制下面内容到hosts文件即可===== #google hosts 2015.2.15 by 360kb.com #base services 64...阅读全文

博文 2015-02-28 03:00:01 yudishow

golang源码解读之map

golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。 详细的实现后续补充,这里先做个备忘。 在iterate整个map的时候,使用delete是安全的。这跟c++是不一样的,c++在delete的时候,会导致整棵树发生变化,所以不能在迭代的时候删除元素。 那为什么golang的map是安全的呢,从源码来看,golang的map使用了桶的概念,元素是被hash到桶存储,每个桶预设是存储八个kv,而且在头部有一个uint8 tophash[8]的结构,存储每个key的高八位(即hash(key) » (64 - 8)),如果该位置未被放置元素,则有一个特殊的标志Empty。在插入删除的时候,首先会比较该uint8跟hash(key)是否相等。当然,桶还利...阅读全文

博文 2014-10-04 19:26:15 weijiaen

Golang redigo hmset hset 问题

最近公司项目,换到了golang 下面来开发,遇到了redis存储链表的问题,困扰了我好几天,后面静下心来,好好读了一下源码,发现官方的例子,最终还是羊毛出在羊身上 c, err := dial() if err != nil { panic(err) } defer c.Close() var p1, p2 struct { Title string `redis:"title"` Author string `redis:"author"` Body string `redis:"body"` } p1.Title = "Example" p1.Author = "Gary" p1.Body = "Hello" if _, err := c.Do("HMSET", redis.Args{...阅读全文

博文 2015-05-13 03:00:05 jackluo

idea intellij go "can’t find import" 解决方法

尝试众多golang的ide,最后发现intellij目前做的完成度最高 eclipse go 不能进行包、类、方法等的跳转,这点是无法忍受的,所以果断换成intellij 但是发现在intellij里面不能import $GOPATH里src下的包,网上搜索了很长时间, 在这里找到解决方法:https://github.com/mtoader/google-go-lang-idea-plugin/issues/224 Looking through the source, it seems that the plugin doesn't use the $GOPATH (to be fair, I think earlier Go docs didn't make the distinct...阅读全文

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

golang web 跳转的实现

package mainimport ( //"database/sql" //_ "github.com/mattn/go-sqlite3" "fmt" "html/template" "log" "net/http" "strconv")type User struct { ID int Name string}func (user User) String() string { format := `ID : %d Name: %s` return fmt.Sprintf(format, user.ID, user.Name)}func saveUser(w http.ResponseWriter, req *http.Request) { userId, _ := strconv.A...阅读全文

博文 2015-08-09 11:00:01 石头军

《Golang 入门系列三》golang的运算符

前言:运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 一、算数运算符 下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * B 输出结果 200 / 相除 B / A 输出结果 2 % 求余 B % A 输出结果 0 ++ 自增 A++ 输出结果 11 -- 自减 A-- 输出结果 9 二、关系运算符 下表列出了所有Go语言的关系运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B...阅读全文

博文 2018-02-28 01:33:07 IT--小哥

beego关于session的问题

我在自己的网站中使用的是简单的:登陆时setsession,使用时getsession,在退出登陆时deletesession。在电脑上使用没有问题,但我同时在手机上测试的,手机上set,get都没问题,但delete就不行了,怎么都退不出登陆状态,重启手机浏览器都不行,删除cookie后才可以退出登陆,这是什么原因,deletesession操作时应该是有删除cookie处理的,是不是手机浏览器不支持外部的删除cookie操作?再问一句,好像手机浏览器不支持301跳转!这是什么原因。电脑用的是firefox浏览器,手机用的是安卓uc浏览器...阅读全文

分布式事务一致性方案

http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。而大型互联网平台往往是由一系列分...阅读全文

博文 2017-03-09 05:02:33 jey恒

golang http.Redirect()函数容易误解的地方

调用http.Redirect()函数后,并不会立刻进行跳转,而是继续顺序执行函数中的所有的代码后,再进行跳转。但是Redirect后面的写界面的代码不会发送到游览器前端的。 代码如下: func Chat(w http.ResponseWriter, r *http.Request) { fmt.Println("Chat") r.ParseForm() withWho := r.Form.Get("withWho") type ToWho struct { Name string } if ret := CheckCookie(r); ret == "" || "" == withWho{ url := "/login" http.Redirect(w,r, url, http.Stat...阅读全文

博文 2015-06-17 20:17:46 rufidmx

golang sync.Pool试用说明及注意事项

Go tip 是 Go 语言的实验分支,包含了很多尚在讨论,但很有可能会加入 stable 分支的特性。“Go tip 在做什么”(原文地址:What's happening in Go tip)分析总结了 Go 语言尚在开发中的一些重要特性。 本文译自:What's happening in Go tip (2014-01-10) 现在是 2014 年了,刚刚经历了圣诞和新年前夜,Go 团队就已经开始为下一个发布版本而工作了。也因此,“Go tip 在做什么”系列也重开了。 作为这个系列的最新一篇,这篇文章将会有些小调整。最重要的调整是,不会再遵循每周一篇文章的发布周期。一周里可能有几篇文章,也可能一篇都没有。这个调整,一部分由于个人原因,一部分也因为这样可以更灵活的追踪 Go 的改变。这...阅读全文

google hosts 2015

感谢互联网为所有人提供开放自由的服务,祝愿祖国繁荣富强人民安居乐业。 ------ 注1:请使用chrome浏览器,并在地址栏里输入chrome://flags/,然后查找QUIC,启用该协议,同时建议启用SPDY/4,能让访问更流畅。 注2:请使用https的方式访问,比如:https://www.google.com 注3:默认可能会跳转到www.google.com.hk,如果.hk访问困难,请使用:https://www.google.com/ncr 方式访问,禁止国别跳转。 ------ google hosts 2015.2.2 ========================================= #google-hosts-2015 #base services ...阅读全文

博文 2015-02-05 03:00:01 5tao

golang debug with LiteIDE

golang 的调试比较麻烦,debug stop into 无法跳转到自己写的代码,但是能够跳转到系统提供的代码。 以下是简单的测试代码:package main import ( "fmt") func main() { i := 5 even(i) b := 1 fmt.Printf("Is %d even? %v\n", i, b)} func even(i int) bool { a := 1 b := a + 1 b = b + 1 return i%2 == 0} 这个情况太诡异了,网上到处是对golang gdb的吐槽。详情可以看这里:http://grokbase.com/t/gg/golang-nuts/1443r0vch8/go-nuts-debugging-in-go...阅读全文

博文 2015-09-07 03:00:00 bnbqian

Go 语言的数据结构:链表

数据结构和算法是计算机科学的重要组成部分。虽然有时候它们看起来很吓人,但大多数算法都有简单的解释。同样,当问题能用算法来解释清楚的时候,算法的学习和应用也会很有趣。 这篇文章的目标读者是那些对链表感到不舒服的人,或者那些想要看到并学习如何用 Golang 构建一个链表的人。我们将看到如何通过一个(稍微)实际的例子来实现它们,而不是简单的理论和代码示例。 在此之前,让我们来谈谈一些理论。 ## 链表 链表是比较简单的数据结构之一。维基百科关于链接列表的文章指出: > 在计算机科学中,链表是数据元素的线性集合,其中线性顺序不是由它们在内存中的物理位置所给出的。相反,每个元素指向下一个元素。它是由一组节点组成的数据结构,它们共同代表一个序列。在最简单的形式下,每个节点都由数据和一个指向下个节点的引...阅读全文

博文 2018-03-25 23:02:44 SergeyChang

Go Mvc的一个示例

下载 Go Mvc的一个示例,项目后台用户管理部分,包括用户的添加,修改,删除,分页,查询等操作。分享出来供大家参考。 data.sql 是表结构的创建SQL,运行前先创建数据表。DBConfig.xml是数据库连接字符串的设置,只所以独立出来一个文件,主要是方便程序里对文件进行修,力求简单,在程序运行前先设置Mysql连接信息。访问地址为:http://localhost:6080/Admin/AdminUser/Index 下...阅读全文

博文 2015-05-12 21:00:02 王岩0001

golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接。 ring 包实现循环双向链表: type Ring struct { next, prev *Ring Value interface{} } 内部导出一个用户可以操作的Value 字段。 heap 包实现 binary heap : type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } heap.I...阅读全文

博文 2015-03-18 14:00:01 yujian0231

Go Runtime hashmap实现

前两天有小伙伴问道是否看过 Go 语言 map 的实现,当时还真没看过,于是就花了一点时间看了一遍 runtime 源码中的 hashmap 实现。map 的底层实现就是一个 hash 表,大体结构上和平时在脑海里的 hash 表差不多,但确实有很多细节(“Devils in the details”)。 hashmap 通过一个 bucket 数组实现,所有元素将被 hash 到数组中的 bucket 中,bucket 填满后,将通过一个 overflow 指针来扩展一个 bucket 出来形成链表,也就是解决冲突问题。这也就是一个基本的 hash 表结构,没什么新奇的东西,下面总结一些细节吧。 注意一个 bucket 并不是只能存储一个 key/value 对,而是可以存储8个 key/...阅读全文

让vscode完美支持go vendor的代码跳转(使用vscode必看)

Vscode是世界上最好的Go IDE!! 所以使用vscode作为Go的IDE是一件非常爽的事情。 可是事情总有不完美。现在有很多项目都是用vendor来做第三方包的版本控制,可是godef竟然不支持vendor的代码跳转!!我们想跳转到vendor中的代码,目前是无法做到的。 现在特分享一个自修改的版本,完美支持vendor特性,只要go install后,就可以爽爽的用vscode了。 欢迎大家加入Golang隐修会,群号894864,在群文件中就可下载,而且群内大神很多哦...阅读全文

博文 2016-04-19 15:00:02 abv123456789

Go数据结构之队列

一、什么是队列​数据结构里的队列就是模仿现实中的排队。如上图中狗狗排队上厕所,新来的狗狗排到队伍最后,最前面的狗狗撒完尿走开,后面的跟上。可以看出队列有两个特点:(1) 新来的都排在队尾;(2) 最前面的办理业务后离队,后面一个跟上。根据特点,计算机砖家就归纳以下队列结构。​队列简称FIFO,含义自己体会。二、队列的结构​继续大卫哥的拆卸手。队列拆成容器和链表,分别用结构和单链表实现,如上图。三、接口说明及实现​1、Init初始化队列,其实是初始化里面单链表。func (queue *Queue) Init() {lst := new(List)(*queue).list = lstlst.Init()}2、Enqueue有尿的小狗狗排队。func (queue *Queue) Enqueu...阅读全文

博文 2017-11-27 09:09:54 rhan-zz

Emacs中Golang的设置

欲善其事,先利其器。下面记录一些使用Emacs24做golang开发中的一些有用设置,备忘用。 一,golang中的代码跳转 emacs24的go-mode中默认用godef-describe,godef-jump和godef-jump-other-window来做代码跳转,而godef-*这几个命令需要用到外部程序godef来寻找函数定义。安装步骤如下: 1,安装godef 1)设置GOPATH和GOBIN,将GOBIN设置为/usr/local/bin 2) go get github.com/rogpeppe/godef 3) go install github.com/rogpeppe/godef 注: godef也可以从code.google.com/p/rog-go/exp/cm...阅读全文

博文 2015-10-09 11:00:10 cobbliu

Go语言_range(范围)理解

一、Go语言中的range Go 语言中 range 关键字用于 for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素; 在数组和切片中它返回元素的索引值, 在集合中返回 key-value 对的 key 值。 二、代码举例 package main import "fmt" func main() { //这是我们使用range去求一个slice的和。使用数组跟这个很类似 nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) //在数组上使用range将传入index和值两个变量。上面那个例子我们不需要使...阅读全文

博文 2018-07-26 00:30:00 OctoptusLian

Go语言(container介绍)

今天,Mayuyu来介绍Go语言中一个重要的东西,叫做container。具体源码可以参考Go语言的源代码,如下 路径:/usr/local/go/src/pkg/container Github上的路径为:https://github.com/astaxie/gopkg/tree/master/container container的结构如下 可以看出包含三部分:heap,list和ring。下面分别介绍 1. heap heap即为堆,是一种常用的数据结构,在源码里面,提供了接口,在实际使用时需要实现。 下面是一个关于heap使用的实例。 代码: package main import ( "fmt" "container/heap" ) //heap提供了接口,需要自己实现如下方法 t...阅读全文

博文 2015-06-17 23:00:35 ACHelloWorld

重温一遍数据结构之单链表(golang版)

说明 上一篇说的是线性表中的顺序存储结构,他的读取复杂度虽然是o(1),但是它的缺点也很明显,插入和删除需要移动很多元素,而且需要分配一块连续的内存区域 线性表之单链表 单链表在一定程度上解决了一部分上面的问题,而且也不要一大块连续的内存区域,代码如下 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type Elem int type LinkNode struct { Data Elem Next *LinkNode } //生成头节点 func New() *LinkNode { //下面的data可以用来表示链表的长度 return &LinkNode{0, nil} } //...阅读全文

博文 2017-11-19 16:04:58 woshicixide

Go语言内存分配器的实现

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

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

golang 环境配置建议

AUTH:PHILO VERSION:1.2 开发环境的必要特征 项目管理 快速文件跳转 自动语法检查 自动补全 查找定义 启动速度快 如果自己有需求的话插件可以随便写 灵活的运行配置 (project,lint,hint,autocomplete) 要实现上面几点我们来一步一步的配置。 我的大环境 OSX GO 1.4 HomeBrew go 环境安装 这一部分是最重要的,如果没有它,每次build的时候出现 too many errors 心里真的是非常难过的。 环境配置:(golint,gooracle,mercurial) 安装mercurial: brew install mercurial 这个东西是用来做版本管理的,也是下载代码的工具类似git,貌似google的项目用的挺多的...阅读全文

博文 2015-03-09 12:02:22 jianyingLi

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

beego分页类

go count, _ := models.M("logoperation").Alias(`op`).Field(`count(op.id) as count`).Where(where).Count() if count > 0 { pagesize := 10 p := tools.NewPaginator(this.Ctx.Request, pagesize, count) log, _ := models.M("logoperation").Alias(`op`).Where(where).Limit(strconv.Itoa(p.Offset()), strconv.Itoa(pagesize)).Order(`op.id desc`).Select() this.Data["d...阅读全文

博文 2015-06-05 11:00:06 别人说我名字很长

分布式游戏服务器引擎GoWorld

**GoWorld是一个使用Golang实现的可扩展的分布式游戏服务器引擎,并支持游戏逻辑的热更新。** ![image](http://goworldgs.com/static/goworld_arch.png) GoWorld架构图 一个GoWorld系统包括一个dispatcher进程、一个或者多个game进程以及一个或者多个gate进程。dispatcher负责game之间以及gate和game之间的消息转发,并对一些基础功能提供支持。Game进程负责Entity对象的管理和所有游戏逻辑的运行,Gate进程负责管理客户端连接,并将客户端请求通过dispatcher转发到game进程。Gate还需要负责对客户端数据进行压缩和加解密(尚未实现)。GoWorld可以通过增加更多的...阅读全文

开源项目 2017-07-29 01:00:04 网友

windows下 sublime text2 跳转查看go源码

1.下载ctags 网站被墙,点此下载 下载后的exe文件随便放在哪个目录,将目录添加到 环境变量 path中.然后 cmd,输入ctags --help,显示一堆帮助文字,说明就可以了。 3. 在sublime text 2中安装CTAGS, ctrl + shift + p输入CTAGS回车就行了,不知道怎么安装包的请百度。 4. 在sublime text 2打开$GOROOT下src\pkg目录(例如 D:\go\src\pkg),在左侧边栏pkg文件夹上右击 Rebuild Tags。稍等一会。(右键看不到的朋友 先ctrl + shift + p ,rectags) 5.OK,大功告成。随便写个go,例如fmt.Println(。。。。),在Println上按ctrl+shift...阅读全文

博文 2014-10-04 19:26:29 阳光灿烂的日子

Go语言基础入门--if,for,range,switch

流程控制 这节主要记录的是编程语言中处理逻辑结构的流程控制 基本上流程控制语句启3个作用: 选择,根据条件跳转到不同执行序列 循环,反复执行某个序列 跳转,根据条件返回到某执行序列 Go语言支持如下的几种流程控制语句:  条件语句,对应的关键字为if、 else和else if;  选择语句,对应的关键字为switch、 case和select(将在介绍channel的时候细说);  循环语句,对应的关键字为for和range;  跳转语句,对应的关键字为goto。 Go语言还添加了关键字:break, continue, fallthrough。我们在实际开发中要灵活运用这些关键字以增加代码的健壮性 if...else if...else if a < 5 { return 0 }...阅读全文

博文 2015-04-22 15:00:24 chenqijing2

Go语言实战笔记(三)| Go Doc 文档

《Go语言实战》读书笔记,未完待续,欢迎关注公众号flysnow_org,第一时间看后续笔记。 对于协作开发或者代码共享来说,文档是一个可以帮助开发者快速了解以及使用这些代码的一个教程,文档越全面,越详细,入门越快,效率也会更高。 在Go语言中,Go为我们提供了快速生成文档以及查看文档的工具,让我们可以很容易的编写查看文档。 Go提供了两种查看文档的方式,一种是使用go doc命令在终端查看,这种适用于使用VIM等工具在终端开发的人员,它们不用离开终端,既可以查看想查看的文档,又可以编码。 第二种方式,是使用浏览器查看的方式,通过godoc命令可以在本机启动一个web服务,我们可以通过打开浏览器,访问这个服务来查看我们的Go文档。 从终端查看文档 这种方式适用于在终端开发的,它们一般不像离开...阅读全文

博文 2017-03-09 15:52:22 飞雪无情flysnow_org

修改 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