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

golangxApi Manager-哆啦接口管理平台

#### XAPI MANAGER -专业实用的开源接口管理平台,为程序开发者提供一个灵活,方便,快捷的API管理工具,让API管理变的更加清晰、明朗。 基于golang开发的V3版本已上线,欢迎大家使用,也欢迎大家加入QQ交流群(623709829),< atarget="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=d83394f78622527ea525d1d1bc5dca2e6aa8292ca2f05a04c46d172ac2180f29">xApi Manager阅读全文

时间轮的 golang 实现 https://github.com/wgliang/timewheel

时间轮是一个固定大小的数组结构,这个数组的每一个槽(元素)代表着软定时器的精度,(类似于时钟的最小刻度).时间轮的优点:通过排序的时间列表来有效的更新 timers.它能非常效率地增加,取消 timer. 定时器的替代者,基于链表,自定义回调函数 应用于网络连接的过期失效,会话失效以及业务资源的自动释放和销毁失效等等 https://github.com/wgliang/timewhee...阅读全文

使用CGO进行GC优化的注意事项

前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.size_t(len(myTable.Name)) name := C.calloc(1, nameLen) C.memcpy(name, unsafe.Pointer((*reflect.String...阅读全文

博文 2014-10-13 20:37:36 达达

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 关系运算符 运算符 描述 实例 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False != 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为 True > 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A ...阅读全文

博文 2019-04-30 02:35:11 类似简单

高性能跨平台导表工具tabtoy

# tabtoy 游戏客户端,服务器的策划表格数据导出 # 优点 * 编写电子表格, 导出. 只需2步, 即可导出数据! * 跨平台运行, 无第三方依赖, 无需任何的vbs,vba,dll * 支持文件格式最多的导出器(json, lua, C#+二进制, protobuf text, proto, golang) * 一次设置, 自动生成索引代码, 支持lua, C# * 单元格字段列顺序随意调整, 自动检查错误, 精确报错位置 * 强类型, 导出时自动类型检查, 提前暴露表格错误 * 支持中文枚举值, 中文结构体字段, 编写,更直观 * 全中文导出提示,并支持多语言导出提示 * 支持导出Tag匹配,导出需要的部分, 避免...阅读全文

开源项目 2017-07-31 08:37:48 Davy xu

语义导入版本控制

本文译自 Semantic Import Versioning, Go & Versioning 的第 3 部分, 版权@归原文所有. 如何将不兼容的更改部署到现有软件包 ? 这是任何包管理系统中的根本挑战和决断. 问题的答案决定了所产生的系统的复杂性, 它决定了如何轻松或难以使用包管理. (它还决定如何轻松或难以实现包管理, 但用户体验更重要.) 为了回答这个问题, 这篇文章首先介绍了 Go 的导入兼容性规则: 如果旧包和新包具有相同的导入路径, 新软件包必须向后兼容旧软件包. 我们从 Go 一开始就主张这个原则, 但我们没有给它一个名字或者这样一个直接的陈述. 导入兼容性规则大大简化了使用不兼容版本的软件包的体验. 当每个不同版本具有不同的导入路径时, 关于给定导入语句的预期语义没有歧义...阅读全文

mac 下 vim+golang 开发环境搭建

o语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发。 下面介绍在Mac OS X中golang的开发环境配置。 1.安装brew brew是一个mac下的由ruby开发的包管理系统,其官网是http://brew.sh。你只要在你的终端中执行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 便可将其安装完成。 安装完之后输入命令 brew update 即可获得更新并切换到速度最快的源上 2.安装go brew install go 3.安装分布式管理工具hg brew install hg 4.建立go的环境变量文件夹 cd $H...阅读全文

博文 2016-10-18 15:00:05 linspire

golang实现直接插入排序算法

直接插入排序算法golang实现版本: 插入算法概要: 建立一个空的链表,首先在要排序的数组中随便拿出来一个数据,放在新建链表的开头,然后不停的从原数组中 获取数据,并和链表中的数据进行比较,大就放在链表的右端,小就放在链表的左端,一直循环直到结束为止, 排序完成。 package main import( "container/list" "fmt" ) var old []int = []int{432,432432,4234,333,333,21,22,3,30,8,20,2,7,9,50,80,1,4} func main(){ fmt.Println("old array:",old) res,_ := InsertionSort(old) i := 0 for e := res....阅读全文

博文 2014-10-04 19:26:08 rufidmx

GO语言 使用hash 表

package main import ( "fmt" ) type Data struct{ date string; value int; } func main() { fmt.Printf("hello world!\n"); var m = make(map[string]int); //创建一个空白的hash m["str1"] = 10; m["str2"] = 1000; fmt.Printf("%d\n",m["str1"]); // 遍历 hash for name,value := range m { fmt.Printf("%s\t%d\n",name,value); } ...阅读全文

博文 2015-06-17 23:07:37 juxuny

循环链表的Go语言实现

一、什么是循环链表​循环链表的节点形成一个圈。把单链表的尾巴指向开头形成单循环链表。把双向链表的尾巴与开头链接起来就形成双向循环链表。使用循环链表可以不断的绕圈寻找所需要的数据,而不需要像单链表那样每次都从开头开始寻找,可以提高查询的效率。今天大卫哥先实现一个单向循环链表,双向循环链表的实现就交给大家了。二、单向循环链表的Go实现1、节点​单向循环链表的节点和单链表的实现是类似的,不过为了区别,我们取了不同名字。type CNode struct { data Object next *CNode }2、单向循环链表​单向循环链表车队由5节车厢组成,1号车是车头。为了表示这种关系,大卫哥用下面的结构体来承载。type CList struct { size uint64 // 车厢数量 he...阅读全文

博文 2017-11-10 03:15:53 rhan-zz

如此,用dep获取私有库

如此,用dep获取私有库 介绍 dep是一个依赖管理工具。它需要1.9或更新的Golang版本才能编译 dep已经能够在生产环节安全使用,但还在官方的试验阶段,也就是还不在go tool中。但我想是迟早的事 :=) 指南和参考资料,请参阅文档 获取私有库 我们常用的git方式有两种,第一种是通过ssh,第二种是https 本文中我们以gitlab.com为案例,创建一个private的私有仓库 通过ssh方式 首先我们需要在本机上生成ssh-key,若没有生成过可右拐传送门 得到需要使用的ssh-key后,我们打开我们的gitlab.com,复制粘贴入我们的Settings -> SSH Keys中 添加成功后,我们直接在Gopkg.toml里配置好我们的参数 [[constraint]] ...阅读全文

博文 2018-03-01 00:40:52 EDDYCJY

GO-struct结构体

一、struct的特点 1、用来自定义复杂数据结构 2、struct里面可以包含多个字段(属性) 3、struct类型可以定义方法,注意和函数的区分 4、struct类型是值类型 5、struct类型可以嵌套 6、GO语言没有class类型,只有struct类型 二、struct的定义 1、struct声明: type 标识符 struct { Name string Age int Score int } 2、struct 中字段访问:和其他语言一样,使用点 例子 type Student struct { Name string Age int Score int } func main(){ var stu Student stu.Name = "lilei" stu.Age = 22...阅读全文

博文 2018-01-12 00:30:01 willpower-chen

Go语言移植Linux内核数据结构hlist

hlist(哈希链表)可以通过相应的Hash算法,迅速找到相关的链表Head及节点. 在有些应用场景,比Go标准库提供的list(一种常见的双向链表)更合适。 依照list.h中的源码,我实现了一个Go语言版本的hlist例子。 首先说下hlist的构成: 在hlist(哈希链表)中, 头结点使用struct hlist_head来表示,hlist_head仅一个first指针. 普通节点使用struct hlist_node来表示。 源码中有几个特别的地方: 1. 在struct hlist_node中有一个**pprev中的二级指针, pprev指向的是当前hlist_node变量中的前一个变量的next的地址, 如果是第一个元素的话,这个值指向的是first的地址, 如果是最后一个节点...阅读全文

博文 2015-02-23 16:00:01 xcltapestry

Go凭什么击败C++成为证券期货行情系统的首选语言

Golang 由于其高效快速、天然支持并发的显著优势,大大降低了服务的开发门槛,使得企业更易于直接架构业务,这些特性使得越来越多的传统公司技术部门选择拥抱 Go ,并结合自身业务特点摸索出了丰富的实践经验。在由 Go 中国和七牛云联合主办的 Gopher China2017中,来自金大师的技术经理张泽武详细分享了一个使用 Go 语言开发全套证券、期货、行情处理及分发系统。项目背景是在团队成员未完全到位的情况下,使用简单易用的 Go 语言后,用三个月的时间开发完成。并在随后的项目发展中,这套系统逐步演化完善成一套自有的快速开发框架。项目故事 项目启动的时候,领导对这个行情系统有几个要求,怎么在最短的时间交付,怎么满足大量并发的请求,怎么保证低延时,把交易所的行情数据尽可能快的发到客户端。在这些...阅读全文

博文 2017-08-09 01:41:29 张泽武

代码质量检测工具GoReporter

Golang 开发工具,提供代码质量检测/Golang 代码静态检测器/Golang 项目单元测试,根据自定义模版自动生成 Golang 代码质量检测报告。 ![image](https://static.oschina.net/uploads/space/2017/0406/113414_e0Od_2903254.png) Summary ![image](https://static.oschina.net/uploads/space/2017/0406/113431_ipJw_2903254.jpeg) UnitTest ![image](https://static.oschina.net/uploads/space/2017/0406/113446_U2OK_2903...阅读全文

PostgreSQL 管理工具Stolon

Stolon是一个cloud native的PostgreSQL高可用管理工具。它之所以是cloud native的是因为它可以在为容器内部的PostgreSQL提供高可用(Kubernetes 集成),而且还支持其他种类的基础设施(比如:cloud IaaS,旧风格的基础设施等) ![image](https://static.oschina.net/uploads/space/2017/0314/175929_Rxas_2903254.png)、 Stolon 是由3个部分组成的: keeper:他负责管理PostgreSQL的实例汇聚到由sentinel(s)提供的clusterview。 sentinel:it负责发现并且监控keeper,并且计算最理想的clustervie...阅读全文

Go语言链接器大修

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

【十问十答】对话Go语言开发团队

Go是谷歌推出的一门编程语言。熟悉Go语言的开发者都知道其弥补了C语言的不足并且保持了C的极简主义。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程(使用Go语言的12个理由)。一些主流的项目包括Docker、Heroku's Force.com以及Cloud Foundry's (Go)Router都是基于Go语言编写而来。有人说,Go为云而生,也正是由于其拥有并发性的操作系统以及完美的架构,使其备受开发者的青睐。 本文摘译自dotGo,文中采访了Go语言的开发团队,一起来聆听大神们谈Go语言的依赖关系、语言设计及Android平台上的一些新特性。 译文如下: Go语言开发团队成员:Francesc Campoy Flores、Andrew Gerrand、Bra...阅读全文

博文 2014-10-21 10:59:34 mengyidan1988

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-08-23 13:00:03 aqtata

【BAT后台入门】第三课:链表,队列与栈

小伙伴们,今天更新第三课:链表,队列和栈。链表是计算机科学中很多数据结构的基础,非常重要;队列和栈的应用也非常广泛。文中不光介绍了链表、队列和栈的工作原理和基础实现,还结合工业界的实际应用,给出了优化的建议。比如使用内存池或者使用数组的方式,来减少内存分配的次数,随之Golang的GC开销也会减小。这些优化技巧,在构建高性能服务端开发的时候,至关重要。目前系列课程已更新至第三课,感谢朋友们与我一起坚持。有师弟在小密圈反馈说:第二课的干货很多,收获很大。我感觉很欣慰,努力没有白费。但是很遗憾的是,有不少学习了第一课的小伙伴,暂时没有坚持学第二课。程序员是一个很辛苦的职业,要不断的学习和提升,永远不要待在comfort zone。欢迎大家在文章下面留言打卡,或者加入西七楼小密圈,与豪华嘉宾阵容一...阅读全文

博文 2017-07-09 16:06:52 西七楼

【Go语言踩坑系列(十)】Channel(下)

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 引入 有了上一篇文章的基础,这一节我们来看通道的底层实现,我们先看一个例子,相信你已经很熟悉了: func main() { ch := make(chan int) go func() { ch <- 1 }() time.Sleep(5 * time.Second) fmt.Println(len(ch)) // 0 <- ch } 我们在主协程中创建一个通道,并且开了一个子协程往通道里写入一个数据,然后再在主协程读取这个数据,且在读取之前打印通道的有效长度。由于我们在上一节说过,这是一个非缓冲通道,如果我们要向里面写入数据,必须得有接收方同时来接收才可以,否则就会发生死锁。 代码...阅读全文

博文 2020-04-12 18:32:42 NoSay

Go map中一个很重要的特性

先看一段代码: func main() { m := make(map[int]string) m[1] = "a" m[2] = "b" m[3] = "c" for k, v := range m { fmt.Println(k, v) } fmt.Println("-----------------") mm := make(map[int]string) mm[1] = "a" mm[2] = "b" mm[3] = "c" for k, v := range mm { fmt.Println(k, v) } fmt.Println("-----------------") mmm := make(map[int]string) mmm[1] = "a" mmm[2] = "b" m...阅读全文

博文 2015-05-12 03:00:01 cobbliu

在 Golang 中使用 -w 和 -s 标志

今天的博客文章来自 Valery,这是 [Spiral Scout](https://spiralscout.com/) 的一名高级软件工程师,专门从事 Golang(Go)开发。 作为在 Golang 以及许多其他编程语言方面具有专业知识的软件开发机构,我们知道对于我们的工程师和质量保证专家而言,能够与社区分享他们的知识和经验非常重要。 感谢 Valery 这篇出色的文章和有用的 Golang 测试技巧! 当我在 GitHub 上查找一些良好的工程实践以备应用时,我注意到许多开发人员编译他们的 Go 程序时经常出现的问题,他们中许多人都使用链接器标记(linker flags)来减小输出文件大小,尤其是同时使用 `-w` 和 `-s` 标记所带来的叠加效果。 在软件测试中,标记也被称为参数...阅读全文

博文 2020-01-08 17:43:13 befovy

Docker 管理工具lazydocker

lazydocker,一个简单的 docker 和 docker-compose 终端用户界面,用更懒惰的方式来管理所有的 docker。 其界面采用 [gocui](https://www.oschina.net/p/gocui) 开发。 #### **特点** * 可以清楚地查看 docker 或 docker-compose 容器环境的状态 * 查看容器/服务的日志 * 查看容器度量的 ascii 图 * 可以自定义图来测量任何想要测量的 * 重新启动、移除、重建容器和服务 * 查看给定图像的祖先层 * 清理占用磁盘空间的容器、图像或容量 ![image](https://static.oschina.net/uploads/space/2019/0630/1...阅读全文

go 链表反

链表操作是数据结构中基本的操作,下面用golang实现一下链表的基本操作,包括增、删、查以及单链表的反转操作。package linkimport ( "fmt" "github.com/pkg/errors")//链表结构type ListNode struct { data int next *ListNode}//初始化链表头,下面的所有操作都是基于带头链表func NewListNode() *ListNode { return &ListNode{next: nil}}//获取链表的长度func (l *ListNode)Length() int { len :=0 for l.next != nil { len++ l = l.next } return len}//插入节点fu...阅读全文

博文 2018-10-15 12:34:41 GoSnail

深入理解go的slice和到底什么时候该用slice

# 深入理解go的slice和到底什么时候该用slice ## 前言 用过go语言的亲们都知道,slice(中文翻译为切片)在编程中经常用到,它代表变长的序列,序列中每个元素都有相同的类型,类似一个动态数组,利用append可以实现动态增长,利用slice的特性可以很容易的切割slice,它们是怎么实现这些特性的呢?现在我们来探究一下这些特性的本质是什么。 ## 先了解一下slice的特性 * 定义一个slice ```go s := []int{1,2,3,4,5} fmt.Println(s) // [1 2 3 4 5] ``` 一个slice类型一般写作[]T,其中T代表slice中元素的类型;slice的语法和数组很像,只是没有固定长度而已。...阅读全文

go语言内存分配之TCMalloc

tcmalloc tcmalloc 优点 速度更快,比glicbc 2.3 快 占用更少的内存空间,8倍8-byte的对象内存分配中占用大约8N*1.01byte的头空间,而ptmalloc则会占用16N*byte的头空间 使用 在程序中只需使用“-ltmalloc”连接标识将其链接到程序中 综述 TCMalloc为每一个线程分配本地缓存,以满足小对象分配的需求,当需要时候,对象从中央数据结构移动到本地缓存,周期性的垃圾回收则将内存从各个线程的本地缓存收回中央数据结构。 小对象分配 每个小对象映射到170个不同的大小空间。每个空间间隔8byte,0-8byte(8),8-24byte(16),24-48byte(24),最大间隔为256byte。大对象和小对象的界限为32kb。每个线程的缓存...阅读全文

博文 2016-04-16 19:00:02 tanghui_lin

编译更小的 Golang 程序

go build -ldflags "-s -w" x.go (go install类似) -s 去掉符号表,然后 panic 的时候 stack trace 就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果。不推荐使用。 -w 去掉 DWARF 调试信息,得到的程序就不能用 gdb 调试了,如果不打算用 gdb 调试,基本没啥损失。 示例: # go build main.go && ls -l main -rwxr-xr-x 1 Bing.L Bing.L 15054336 Nov 4 08:39 main # go build -ldflags "-s -w" main.go && ls -l main -rwxr-xr-x 1 Bing.L Bing.L ...阅读全文

博文 2014-11-05 03:00:01 bing-l

简单易用的密码管理工具

## 摘要 本文介绍一款开源密码管理工具[**onepw**](https://github.com/mkideal/onepw)。 在密码管理器中`1Password`,`KeePass`都是大名顶顶,都有UI界面,而这里要讲的`onepw`则是一款命令行下的密码管理器。`onepw`仅仅只有几个命令: `init`,`add`,`rm`,`ls`,`find`。`onepw` 使用AES-256加密算法和CFB加密模式对密码和帐号进行加密,为每个帐号和密码随机一个初始化向量(IV)。 ![screenshot.png](http://www.mkideal.com/images/onepw-screenshot.png) ## 工作原理 1) 生成AES加密算法...阅读全文

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 学生黄哲

Go Hashmap内存布局和实现

想了解Go内置类型的内存布局的契机,是一次在调试“不同类型的小对象频繁创建对gc性能的影响”时发现map的gc性能不佳,而作为对比的包含slice的struct却很好。这里总结Go runtime里map的实现,可以解释这个问题。 hash table内部结构Go的map就是hashmap,源码在src/runtime/hashmap.go。对比C++用红黑树实现的map,Go的map是unordered map,即无法对key值排序遍历。跟传统的hashmap的实现方法一样,它通过一个buckets数组实现,所有元素被hash到数组的bucket中,buckets就是指向了这个内存连续分配的数组。B字段说明hash表大小是2的指数,即2^B。每次扩容会增加到上次大小的两倍,即2^(B+1)...阅读全文

博文 2017-12-18 13:58:29 nino's blog

双向链表的GO语言实现

一、什么是双向链表​和单链表比较,双向链表的元素不但知道自己的下线,还知道自己的上线(越来越像传销组织了)。小煤车开起来,图里面可以看出,每个车厢除了一个指向后面车厢的箭头外,还有一个指向前面车厢的箭头(车头、车尾除外)。车头只有指向后面车厢的箭头,车尾只有指向前面车厢的箭头。二、双向链表与Go的对应结构1、节点​我们先把车厢分解开来。每节车厢都由煤炭、车体、拉前车厢绳索、拉后车厢绳索这4部分组成。车体是我们的运输工具,在Go语言里我们用结构提DNode表示;煤炭代表运的货物,用data变量表示;拉前车厢绳索和拉后车厢绳索我们分别用指针prev和next表示。这样一节车厢,用Go语言描述如下:type DNode struct { data Object prev *DNode next *...阅读全文

博文 2017-11-10 03:13:55 rhan-zz

golang的reflect

编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 Golang的gRPC,json包都是通过反射实现的。 interface 和 反射 interface的wiki计划整理到这里: golang的interface golang的变量分为两部分,type和va...阅读全文

博文 2019-03-11 19:34:46 黑魔术师

history.back()和history.go()的区别

Javascript:history.go()和history.back()的用法和区别 go(-1): 返回上一页,原页面表单中的内容会丢失;history.go(-1):后退+刷新;history.go(1) :前进 back(): 返回上一页,原页表表单中的内容会保留; history.back():后退 ; history.back(0) 刷新; history.back(1):前进 不同的浏览器的后退行为也是有区别的,而区别就跟Javascript:history.go()和history.back()的区别类似。 chrome和ff浏览器后退页面,会刷新后退的页面,若有数据请求也会提交数据申请。类似于 history.go(-1) 而safari(包括桌面版和ipad版本)的后退...阅读全文

博文 2016-09-11 17:00:01 yuan1013922969

《Go源码解读篇》之常见数据结构(list)

本打算用Go实现Java中常见的集合,简单实现ArrayList后,之后翻官网的package,发现了container/list,发现其实现十分的简洁,所以学习记录如下: List实现准备工作 如果想实现一个list,首先想到解决问题: 数据类型怎么处理? Go中有没有像Java中Object似的,万能的数据类型呢? 多亏Go中存在interface{}这样万能的数据类型,问题就迎刃而解啦! 来看看我的ArrayList实现设计: type ArrayList struct { size int32 data []interface{} } 我利用slice来实现简单的list(单向链表)操作,再看看官网的实现: type Element struct { prev, next *Elem...阅读全文

博文 2017-09-01 13:23:31 x_zhaohu

gf框架之路由控制 - 强大、灵活、高效

文章来源:http://gf.johng.cn/494375 gf框架提供了自建的非常强大的路由控制功能,支持流行的命名匹配规则及模糊匹配规则,并提供了优秀的优先级管理机制。以下是一个服务注册中使用路由控制的示例: package main import "gitee.com/johng/gf/g/net/ghttp" func main() { s := ghttp.GetServer() s.BindHandler("/:name", func(r *ghttp.Request){ r.Response.Writeln("pattern: /:name match") r.Response.Writeln(r.Get("name")) }) s.BindHandler("/:name/:...阅读全文

博文 2018-04-16 14:34:42 John

避免诸如 base、util、common 之类的包名

写一个好的 Go 语言包的开端是起一个好名字。将你的包名视为一个 elevator pitch,你必须用一个单词来说明。 包名不好的一个普遍的原因是被命名为 *utility*,这些包混合了 helpers 和 utility 代码,还包含了各种各样不相关的函数,因此根据它们提供的内容很难描述其作用。这经常导致一个包的名字取决于它所包含内容:实用工具(utilities)。 在开发一些深层次包结构的项目时,为了避免出现循环引用,同时复用辅助函数,通常会出现类似 *utils* 或 *helpers* 的包名。提取通用型方法到一个新的包里将打破循环引用,但是由于这个包是因为项目设计问题创建的,所以它的名字不能反应出它的目的,只能反应出它打破循环引用的功能。 > *[A little] dupl...阅读全文

博文 2019-09-04 23:36:44 alihanniba

弄懂goroutine调度原理

[原文地址:https://bingjian-zhu.github.io/2019/09/12/%E5%BC%84%E6%87%82goroutine%E8%B0%83%E5%BA%A6%E5%8E%9F%E7%90%86/](https://bingjian-zhu.github.io/2019/09/12/%E5%BC%84%E6%87%82goroutine%E8%B0%83%E5%BA%A6%E5%8E%9F%E7%90%86/) ### goroutine简介 >golang语言作者Rob Pike说,**“Goroutine是一个与其他goroutines 并发运行在同一地址空间的Go函数或方法。一个运行的程序由一个或更多个goroutine组成。它与线程、协程、进程等不同。它是...阅读全文

博文 2019-09-12 19:35:26 939496716

内部排序算法(Golang版本)

package main import ( "fmt" ) func main() { //保存需要排序的Slice arr := []int{9, 3, 4, 7, 2, 1, 0, 11, 12, 11, 13, 4, 7, 2, 1, 0, 11, 12, 11} //实际用于排序的Slice list := make([]int, len(arr)) copy(list, arr) BubbleSortX(list) fmt.Println("冒泡排序:\t", list) copy(list, arr) QuickSort(list, 0, len(arr)-1) fmt.Println("快速排序:\t", list) copy(list, arr) //将arr的数据覆盖到li...阅读全文

博文 2015-11-23 03:00:00 achst

IMT星际云每周资讯 - 20181207

1.每周资讯20180726.png imWallet 钱包 区块链钱包也是目前区块链产品的一大类别,是存储数字货币的工具,其主要功能是存储,转账,交易等。imWallet是一款去中心化的多币种钱包,支持所有以太坊货币标准 ERC20 的币种。 去中心化钱包的特点是:私钥由用户自持保管,资产存储在区块链上。 若私钥遗失,钱包将无法帮用户恢复,也就是说如果您一旦忘记钱包密钥,无论谁(哪怕是钱包开发者)也无法找回钱包,数字资产将永久遗失。当然,去中心化钱包很难遭受黑客的集中攻击,用户更不用担心钱包服务商出现监守自盗的情况。 是的,您的区块链钱包安全就掌握在您的手中!那就马上开始对 imWallet 钱包的使用体验吧! imWallet钱包下载地址: https://res.imwallet.co...阅读全文

博文 2018-12-07 20:34:42 IMTOfficial

参考leveldb的cache实现

前言 对LevelDB比较了解应该知道其中一块cache实现:LRU Cache是采用双向链表 + HashTable,其中HashTable是为了解决双向链表的查找性能缺陷才引入的。接下来看一下采用golang如何实现LRU Cache。 实现 1、定义cache接口【thread-safe的cache】 import ( "io" ) // 参考:https://sourcegraph.com/github.com/google/leveldb/-/blob/include/leveldb/cache.h type Cache interface{ // 在multiple clients下共享相同的cache来划分key空间 // 当启动是会被分配一个新id NewId() uint6...阅读全文

博文 2018-09-26 18:34:44 一只躺在夕阳下的koala

golang 依赖管理

依赖管理是一个语言非常重要的特性,很大程度上决定着一个语言的流行程度,流行的语言大多都有非常成熟的依赖管理工具,java 的 maven 和 gradle,javascript 的 npm,python 的 pip,这些工具极大地降低了我们使用第三方库的成本,提高了生产效率,而 c++ 比较奇葩,并没有这样统一的依赖管理工具,大公司好一点,有专门的团队去做这样的工具解决依赖的问题,小公司就只能自己把源码拉下来,放到固定的目录,然后编译成二进制,运气不好的话,还要自己解决各种兼容性的问题,如果有版本更新,这个过程还得重复一遍,第三方库的使用和维护成本之高,让人简直就想放弃…… Golang 是自带依赖管理工具的,直接 go get 就可以把依赖拉下来,但是这种方式有个缺陷...阅读全文

博文 2018-01-27 18:34:36 hatlonely