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

golang语言中map的初始化及使用

// 先声明map var m1 map[string]string // 再使用make函数创建一个非nil的map,nil map不能赋值 m1 = make(map[string]string) // 最后给已声明的map赋值 m1["a"] = "aa" m1["b"] = "bb" // 直接创建 m2 := make(map[string]string) // 然后赋值 m2["a"] = "aa" m2["b"] = "bb" // 初始化 + 赋值一体化 m3 := map[string]string{ "a": "aa", "b": "bb", } // ========================================== // 查找键值是否存在 if v,...阅读全文

博文 2015-02-13 15:00:02 YanJiangbo

Go学习笔记之:range函数

range函数是个神奇而有趣的内置函数,你可以使用它来遍历数组,切片和字典。 当用于遍历数组和切片的时候,range函数返回索引和元素; 当用于遍历字典的时候,range函数返回字典的键和值。 package main import "fmt" func main() { // 这里我们使用range来计算一个切片的所有元素和 // 这种方法对数组也适用 nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) // range 用来遍历数组和切片的时候返回索引和元素值 // 如果我们不要关心索引可以使用一个下划线(_)来忽略这个返回值 // 当然我们有的时...阅读全文

博文 2014-11-27 23:00:02 Goopand

golang json 处理的一些例子代码

json 处理的例子代码, 解析结果看后面注释。 package main import "encoding/json" import "fmt" import "os" type Response1 struct { Page int Fruits []string } type Response2 struct { Page int `json:"page"` Fruits []string `json:"fruits"` } type CommonArg struct { SessionId int64 `json:",string"` Op string `json:"Op,omitempty"` AppId string `json:"appId,omitempty"` Onlin...阅读全文

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

golang微信支付服务端

一般来说,使用golang主要还是写服务端。所以本文主要讲golang在处理微信移动支付的服务端时的统一下单接口和支付回调接口,以及查询接口。 微信支付流程 下图是微信官网的支付流程描述: 图中红色部分就是微信支付中,我们的系统包括app,后台需要参与的流程。 其中需要后台也就是Server需要参与的流程有三个: 1. 统一下单并返回客户端 2. 异步通知结果回调处理 3. 调用微信支付查询接口 微信所有的接口都是以http RESTFul的API来提供,所以对于server而言其实就是call这些接口并处理返回值。 golang的服务端实现 1,调用统一下单接口 首先需要呼叫:https://api.mch.weixin.qq.com/pay/unifiedorder 这是微信的api,呼...阅读全文

博文 2015-12-23 14:00:01 xyzhaopeng

Go学习笔记之:字典

字典是Go语言内置的关联数据类型。因为数组是索引对应数组元素,而字典是键对应值。 package main import "fmt" func main() { // 创建一个字典可以使用内置函数make // "make(map[键类型]值类型)" m := make(map[string]int) // 使用经典的"name[key]=value"来为键设置值 m["k1"] = 7 m["k2"] = 13 // 用Println输出字典,会输出所有的键值对 fmt.Println("map:", m) // 获取一个键的值 "name[key]". v1 := m["k1"] fmt.Println("v1: ", v1) // 内置函数返回字典的元素个数 fmt.Println("...阅读全文

博文 2014-11-27 23:00:02 Goopand

Go中map的创建和初始化

// code_014_map_usage project main.go package main import ( "fmt" ) func main() { /*Go语言中的map(映射,字典)是一种内置的数据结构,它是一个无序的key-value对的集合。 1)键的约束: 在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型 2)切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键 err, invalid map key type []string 3)map值: 可以是任意类型,没有限制。 4)键值的数据类型: map里所有键的数据类型必须是相同的,值也必须如何,但键和值的数据类型可以不相同。 5)注意:map是无序的,我们无法决定它的返回...阅读全文

博文 2018-10-05 01:35:15 ck_god

Golang中JSON的运用解析

本篇文章翻译自Elliot Chance的"Working With JSON in Go",原文地址“http://elliot.land/working-with-json-in-go” 。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 在强类型语言中使用JSON是需要一些技巧的。技巧的意思是数据从JSON数据结构到语言支持的数据结构的转换可以灵活的进行,反之亦然。从而避免在操作数组和字典的时候产生类型检查和运行时类型转换的冗余代码。Go在这方面做了很多杰出的工作,正如Go在其他方面做出的努力一样。 Go...阅读全文

Golang库集合

golang用于创建和发送电子邮件的库 douceur - HTML 邮件中的内联 CSS email - 一个健壮的、灵活的 email 库 Go-dkim - DKIM 库,用于对 email 进行签名和验证 Go-imap - IMAP 库,用于客户端和服务器 Go-message - 用于触雷互联网消息格式和邮件的库 Gomail - Gomail 是一个非常简单且强大的库,用于发送电子邮件 Hectane - 轻量级 SMTP 客户端,提供 HTTP API hermes - 一个用于生成干净、响应式 HTML e-mail 的包 MailHog - Email 及 SMTP 测试工具,具有 web 及 API 接口 SendGrid - SendGrid 的 Go 语言库,用于发...阅读全文

博文 2018-09-14 11:34:43 大胡子商人

Go 语言中的 Array,Slice,Map 和 Set

文章目录 1. Array(数组)1.1. 内部机制1.2. 数组声明和初始化1.3. 使用数组1.4. 多维数组1.5. 在函数中传递数组2. Slice(切片)2.1. 内部机制和基础2.2. 创建和初始化2.3. nil 和 empty slice2.4. 使用 slice2.5. slice 增长2.6. slice 的第三个索引参数2.7. 迭代 slice2.8. 多维 slice2.9. 在函数间传递 slice3. Map3.1. 内部机制3.2. 创建和初始化3.3. 使用 map3.4. 在函数间传递 map4. Set5. 总结 Array(数组) 内部机制 在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也...阅读全文

博文 2015-02-05 10:32:26 Damon Zhao

【翻译】go语言中的map实战

业余时间翻译,水平很差,如有瑕疵,纯属无能。 原文链接 http://blog.golang.org/go-maps-in-action go语言中的map实战 1. 简介 哈希表是计算机科学中最重要的数据结构之一。许多哈希表的实现有着千差万别的特性,但是总体上他们都提供了快速查询,添加和删除功能。go语言提供了内置数据类型map。 2. 声明和初始化 map的声明格式如下: map[KeyType] ValueType KeyType类型必须是可以比较的,而ValueType可以是任意类型,甚至是另一个map。 以下这个m是一个键值为string,值为int的哈希表: var m map[string]int 哈希表类型是引用类型,像指针或者切片m指向的值是nil;它没有指向一个初始化了的...阅读全文

博文 2014-10-04 19:26:37 igloo1986

『Golang』跨平台TUI(基于文字的用户界面)库Terbox-Go文档翻译

文 package termbox import "github.com/nsf/termbox-go" termbox-go 是一个用于创建跨平台TUI(基于文本的用户界面)的库。 索引 Variables func CellBuffer() []Cell func Clear(fg, bg Attribute) error func Close() func Flush() error func HideCursor() func Init() error func Interrupt() func SetCell(x, y int, ch rune, fg, bg Attribute) func SetCursor(x, y int) func Size() (int, int) fu...阅读全文

博文 2015-02-10 03:00:01 sitemanager

金融领域的区块链项目 Chain

Chain是由一家刚成立两年的美国创业公司Chain推出,是一个企业级的区块链平台架构,可以让机构构造从零开始更好的金融服务。 作为区块链供应商,Chain在过去的两年多时间中获得了极好的信用。Chain通过将专属区块链和分布式总账的源代码进行开放,可以让更多的人在其软件上增加应用或是建立专属网络。Chain核心开发者版本的创建花费了数年时间,它是区块链供应商和金融机构合作的直接产物。由于这个开源软件针对的是金融领域,因此它允许用户创建和发行他们自己认为合适的数字资产。 Chain 开放标准在以下方面实现突破: • 全新的共识模型在不到一秒的时间里实现交易的最终完成,即便是交易量非常大也能支持 • 私密解决方案对区块链数据进行加密,并让相关对手方和监管者进行有选择的读...阅读全文

使用golang快速开发微信公众平台(五):公众号支付

微信又TMD改版了 2个月前我做的一个微信公众号商城支付是正常的,但是同样的设置,目前做的这个却不正常了,老给我报invalid url domain,试遍了所有能找到的法子依然不行,卧槽他大爷,连写博客的欲望都没了,此坑待填。 跨过该死的设置,说下之前解决掉的2个问题: 微信安全设置要求服务器在你填写业务域名或js安全域名的位置,可以访问到一个MP_verify_xxxx.txt(之前无此硬性要求 我CNNND) 支付 而支付又分页面和后台 先说这个MP_verify_xxxx.txt咋办 直接说结果,beego框架有个缺点,不支持这么搞。比如我的域名是www.baidu.com,微信要求你,如果你这么填,就要求www.baidu.com/MP_verify_xxxx.txt能访问到,太悲...阅读全文

博文 2016-10-22 06:00:04 u012210379

Golang的Tag语法

我们可以通过Tag来增强结构体的定义,Tag会带上一些meta信息,在本文中我们将通过几个例子来深入了解Tag的用法。 结构 Struct是由一组field组成,每个field包括了名字(可选)和字段类型 package main import "fmt" type T1 struct { f1 string } type T2 struct { T1 f2 int64 f3, f4 float64 } func main() { t := T2{T1{"foo"}, 1, 2, 3} fmt.Println(t.f1) // foo fmt.Println(t.T1.f1) // foo fmt.Println(t.f2) // 1 } field T1是一个嵌入型field, 它并没有字...阅读全文

博文 2018-08-27 15:35:22 OhBonsai

Go语言中的复合类型及面向对象思想

1、结构体 struct 定义格式: type 结构体名称 struct { 属性1 类型 属性2 类型 ... } 结构体的初始化可以使用new关键词和var关键词,不同的是如果使用new,则返回类型是一个指针,使用var,则是结构体自身。 type User struct { name string age int } user := new(User) user.name = "tom" user.age = 20 fmt.Println(user) //输出&{tom 20} 上例中使用new来初始化一个结构体,user的类型就是*User,在输出内容中的&字符号也表现了这点。接下来看下使用var的情况: type User struct { name string age int ...阅读全文

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

golang的反射-Value

value.go中的函数 func Append(s Value, x ...Value) Valuefunc AppendSlice(s, t Value) Valuefunc Indirect(v Value) Valuefunc MakeChan(typ Type, buffer int) Valuefunc MakeFunc(typ Type, fn func(args []Value) (results []Value)) Valuefunc MakeMap(typ Type) Valuefunc MakeSlice(typ Type, len, cap int) Valuefunc New(typ Type) Valuefunc NewAt(typ Type, p unsafe....阅读全文

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

go map用法

本文实例讲述了GO语言映射(Map)用法。分享给大家供大家参考。具体如下: 映射是一种内置的数据结构,用来保存键值对的无序集合。 (1)映射的创建 make ( map [KeyType] ValueType, initialCapacity ) make ( map [KeyType] ValueType ) map [KeyType ] ValueType {} map [KeyType ] ValueType { key1 : value1, key2: value2, ... , keyN : valueN} 如下,用4种方式分别创建数组,其中第一种和第二种的区别在于,有没有指定初始容量,不过使用的时候则无需在意这些,因为map的本质决定了,一旦容量不够,它会自动扩容: 复制代码代码...阅读全文

博文 2015-10-14 11:00:02 徐学良

Golang,用map写个单词统计器

Golang中也有实用的泛型编程模板。如map。据Go官方团队称,其实现为Hash表,而非类似cpp或Java的红黑树。所以理论上速度更能快上几个等级(Hash与红黑树的效率对比可以看我的文章C++中各种关联方式的速度对比,效率比约为3:1),但有一些区别,就是遍历时,数据是无需且随机的(当然,后文会讲到有序化的方法)。接下来,我们先创建一个map对象。 dict:=make(map[string]int); 由于map的强类型,所以一切类型是静态的,map也不例外。从make函数中可以看出,本map的索引(键)值是一个string类型,而数据值是一个整数。下面,我们向其中插入一个键值对。 dict["is"]:=1; 很简单,没有必要用其他成员函数,直接用与数组一样的访...阅读全文

博文 2015-07-21 03:00:01 Darksun

go-map

package main import "fmt" /** 声明 var m map[int]string var b a := 赋值 map[int]string{} map[int]string{1: "a", 2: "b", 4: "c"} make(map[int]string) */ func main() { var m map[int]string m = map[int]string{} fmt.Println(m) var n map[int]string n = make(map[int]string) fmt.Println(n) var b = make(map[int]string) fmt.Println(b) a := make(map[int]string) ...阅读全文

博文 2016-08-14 12:00:00 u013210620

Golang 语言基础之四: map, range

Golang 语言基础之四: map, range Golang 语言基础系列: Golang 语言基础之一: type, variable, constant Golang 语言基础之二: for, ifelse, switch Golang 语言基础之三: array, slice Golang 语言基础之四: map, range Golang 语言基础之五: function Golang 语言基础之六: string, pointer Golang 语言基础之七: struct, method Golang 语言基础之八: interface Golang 语言基础之九: error, panic, recover Golang 语言基础之十: goroutine, channel...阅读全文

博文 2017-02-10 13:39:41 Xiaohui Wang

go原生 req *http.Request 接受 post请求的data数据获取不到?

$curl -XPOST -d '{"sex":"男"}' “http://localhost:8080/updateSex” 我这个模拟post请求到 updateSex 这个函数,在这个方法里,我怎么才能获取到 {"sex":"男"} 这个json啊(就光传递了数据,不像URL里传递key value那种键值对方式) ```go func RelationPut(rw http.ResponseWriter, req *http.Request) { body, err := ioutil.ReadAll(req.Body)//一直是nil } ``...阅读全文

GoLang structTag说明

在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容。形如 type User struct { UserId int `json:"user_id" bson:"user_id"` UserName string `json:"user_name" bson:"user_name"` } struct成员变量标签(Tag)说明 要比较详细的了解这个,要先了解一下golang的基础,在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是由经常需要和其它的系统进行数据交互,例如转成json格式,存储到mongodb啊等等。这个时候如果用属性名来作为键值可能不一定会符合项目要求。 所以呢就多了小米点的...阅读全文

博文 2017-12-18 23:00:01 faunjoe88

Go字典

字典(map)是Go语言内置的数据结构,一组键值对的无序集合。 看代码: package main import "fmt" func main() { //使用make申请一个map,键为string类型,值为int类型 m := make(map[string]int) //设置值 m["k1"] = 7 m["k2"] = 13 //取指定键的值 v1 := m["k1"] fmt.Println("v1: ", v1) //取长度 fmt.Println("len:", len(m)) //遍历 for key, value := range m { fmt.Println(key, ":" , value) } //删除 delete(m, "k2") fmt.Println("m...阅读全文

博文 2015-03-20 03:00:01 baiyuxiong

yaml语法-yaml转golang

基本规则YAML有以下基本规则: 1、大小写敏感 2、使用缩进表示层级关系 3、禁止使用tab缩进,只能使用空格键 4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。 5、使用#表示注释 6、字符串可以不用引号标注1、map,散列表 使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,示例:# YAML表示age : 12name : huang# 对应的Json表示{'age':12,'name':'huang'}也可以将一个map写在一行:# YAML表示{"age":12,name:huang} #"age"表示字符串# 对应的Json表示{'age':12,'name':'huang'}2、list,数组 使用连字符(-)表示:# YAML表示- a- b- 1...阅读全文

博文 2018-06-27 12:34:47 々菰單

iOS中键值编码KVC及键值监听KVO的操作方法

![one_20140630080614003.jpg](http://studygolang.qiniudn.com/151225/d6447da995f86fff419b50ed0237d7dd.jpg) 在iOS开发中,我们常常用到键值编码KVC和键值监听KVO两个东东,今天小编和大家分享的就是这两个东东在应用开发中的具体用法。下面是小编在网上看到的一位大牛写的,灰常不错的有关KVC和KVO 的介绍,既然大牛都写得这么详细了,我们就直接借鉴借鉴吧。 键值编码KVC KVC的操作方法由NSKeyValueCoding协议提供,而NSObject就实现了这个协议,也就是说objective-c语言中几乎所有的对象都支持KVC操作,常用的KVC操作方法如下: 1、动态...阅读全文

Go 语言Map(集合)

Go 语言Map(集合)Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。定义 Map可以使用内建函数 make 也可以使用 map 关键字来定义 Map:/* 声明变量,默认 map 是 nil */ var map_variable map[key_data_type]value_data_type /* 使用 make 函数 */ map_variable = make(map[key_data_type]value_data_type)如果不初始化 map,那...阅读全文

博文 2015-12-16 17:00:30 u011225629

学习Golang语言(7):类型--字典

跟着码术一起学习Golang语言。今天学习的是Go语言内置的数据结构:字典(map)。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 字典(Map) 字典(map)是Go语言内置的数据结构,一组键值对的无序集合。 有些地方称之为映射。本文中一律成为字典(map)。 字典(map)也叫做关联数组。因为数组通过索引来查找元素,而字典通过键(key)来查找元素。 字典(map)的容量只受到内存的限制。在...阅读全文

博文 2014-12-04 19:00:02 codemanship

go 语言 sublime Text 2 编译设置

现在go语言ms经常被人提,我去凑热闹看了看~~ go 语言 windows 下 的编译器可以去http://code.google.com/p/gomingw/downloads/list 下载 下载解压配置环境变量“环境变量”(我的电脑->高级系统设置->环境变量),在系统变量的标签下,依次新建编辑如下几个键值对: (1). 新建 变量名:GOBIN 变量值 :c:\go\bin (2). 新建 变量名:GOARCH 变量值:386 (3). 新建 变量名:GOOS 变量值:windows (4). 新建 变量名: GOROOT 变量值:c:\go (5). 编辑 Path 在Path的变量值的最后加上 %GOBIN% 编辑器选择 sublime Text 2 好像也是最近挺火的编辑器 ...阅读全文

博文 2014-10-04 19:26:34 qiezi

求教,用"github.com/gin-contrib/sessions" 插件,只是一个简直的在session里存个键值对,但是在另一个方法里读这个键,却得不到值

var store = sessions.NewCookieStore([]byte("secret")) ... ... router.Use(sessions.Sessions("gosession", store)) { router.GET("login", (&controllers.OauthController{}).LoginByAuth) router.GET("auth", (&controllers.OauthController{}).AuthorizationCodeMethod) } 上面是初始化session的代码, 我作用于两个方法,在`LoginByAuth` 中是 state := randToke...阅读全文

微信支付-golang后端处理

一、支付流程 微信开放平台H5支付接入相关链接:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4 相应的支付流程: 二、相关代码 1、统一下单 p,li { white-space: pre-wrap } //首先定义一个UnifyOrderReq用于填入我们要传入的参数。 type UnifyOrderReq struct { Appid string `xml:"appid"` Body string `xml:"body"` Mch_id string `xml:"mch_id"` Nonce_str string `xml:"nonce_str"` Notify_url string `xml:"notify_url...阅读全文

博文 2017-07-01 20:00:01 kaka7518

老司机带你用 Go 语言实现 MapReduce 框架

老司机带你用 Go 语言实现 MapReduce 框架  MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。简而言之,就是将任务切分成很小的任务然后一个一个区的执行最后汇总,这就像小时候我们老师经常教育我们一样,大事化小,小事化了(瞬间感觉那时候老师好言简意赅啊!!!)思想就这么一个思想,那么按照这个思想在现代软件定义一切的世界里面,我们怎么运用这样的方式来解决海量数据的处理,这篇就告诉你一个这样的一个简单的实现使用 Go 语言。 上车了  简单介绍一下几个概念:   概念“Map(映射)”和“Reduce(归纳)”,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。当前的软件实现是指定一个 Map(映射)函数,用来...阅读全文

博文 2017-03-23 08:25:26 chauncy

GO json数据解析

json 是现在非常常见的数据传递方式, go本身也集成了json的生成和解析 引入包 import { "bytes" "encoding/json" } 解析 定义 json 对应的实体类, 准确的说是结构体 type GoAccessToken struct { AccessToken string ExpiresIn int } 创建该结构体的引用 goAccessToken := &GoAccessToken{} 通过Unmarshal去解析json字符串 err := json.Unmarshal(str, goAccessToken) 最终的 goAcessToken 为解析后的对象 如果发现对象中的成员变量没有值, 请检查成员变量的首字母是否大写, 注意, json 字符串的...阅读全文

博文 2017-02-10 14:44:35 yin32167

Go基础-map

// xuhh_go_map project /* 1.map的特点: a.map是go语言的内置引用类型,所以多个map指向同一个底层的情况下,一个值发生变化,全部发生变化 b.map是无序的,每次迭代的顺序都是不确定的。 c.map只有 len 没有 cap。 d.map不是线程安全的,在多个go-routine中使用的时候,要加锁。 e.map[key]value key 必须支持 运算符(== 、!= )的操作,例如 number/string/pointer/array/struct/interface value 可以是任意类型。 2.map的创建: a. new 进行创建 mapA := new(map[int]string) *mapA = map[int]string{} ...阅读全文

博文 2015-06-17 23:08:20 xuheazx

Go 性能优化技巧 3/10

内置 map 类型是必须的。首先,该类型使用频率很高;其次,可借助 runtime 实现深层次优化(比如说字符串转换,以及 GC 扫描等)。可尽管如此,也不意味着万事大吉,依旧有很多需特别注意的地方。 ### 1、预设容量 map 会按需扩张,但须付出数据拷贝和重新哈希成本。如有可能,应尽可能预设足够容量空间,避免此类行为发生。 ![预设容量](http://studygolang.qiniudn.com/160531/ca4949649cd8bc36851fd04a04e48e8c.jpg) ![结果](http://studygolang.qiniudn.com/160531/c24756b385183e7c120d3d6a83e267a4.jpg) 从结果看...阅读全文

go语言Arrays、Maps、Slices操作

Arrays:数组 在go语言中数组array是一组特定长度的有序的元素集合,元素类型可以是任意的原始类型例如整形、字符串或者自定义类型,通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推 array.go package main import "fmt" func main() { //这里我们创建了一个长度为5的数组. 这一组数组的初值是zero-valued。整型就是0 var a [5]int fmt.Println("emp:", a) //可以通过array[index] = value语法赋值 a[4] = 100 fmt.Println("set:", a) fmt.Println("get:", a[4]) //内置的len...阅读全文

博文 2017-02-19 04:00:17 nuli888

Go语言实战_自定义OrderedMap

一、 自定义OrderedMap 在Go语言中,字典类型的元素值的迭代顺序是不确定的。想要实现有固定顺序的Map就需要让自定义的 OrderedMap 实现 sort.Interface 接口类型。该接口类型中的方法 Len 、Less 和 Swap 的含义分别是获取元素的数量、比较相邻元素的大小以及交换它们的位置。 1.定义 OrderedMap 想要实现自定义一个有序字典类型,仅仅基于字典类型是不够的,需要使用一个元素有序的数据类型值作为辅助。如下声明了一个名为 OrderedMap 的结构体类型: type OrderedMap struct { keys []interface{} m map[interface{}]interface{} } 如上在 OrderedMap 类型中,...阅读全文

博文 2016-08-18 01:00:04 u012855229

【golang】HashMap原理和实现

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

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

深入理解Go 1.9 sync.Map

Go官方的faq已经提到内建的map不是线程(goroutine)安全的。在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。另外笔者在go 1.9之前通常是使用concurrent-map来解决这类问题,但是不是所有的第三方库都以此来解决问题。 我们先来看看这个代码样例:程序中一个goroutine一直读,一个goroutine一直写同一个键值,即使读写的键不相同,而且map也没有"扩容"等操作,代码还是会报错的,错误信息是: fatal error: co...阅读全文

博文 2017-12-19 12:01:01 终于19岁

NoSQL数据库gkvdb

Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能Key-Value嵌入式数据库。 ## 特点 1. 基于纯Go语言实现,具有优异的跨平台性; 1. 数据库文件采用DRH算法设计,提升对随机数据的操作性能; 1. 良好的IO复用设计,提升对底层数据库文件的操作性能; 1. 良好的高可用设计,保证在任何异常情况下数据的完整性; 1. 提供的基本操作接口:Set()、Get()、Remove(); 1. 提供的事务操作接口:Begin()、Commit()、Rollback(); 1. 提供的多表操作接口:Table()、SetTo()、GetFrom()、RemoveFrom(); 1. 支持原子操作、批量操作、事务操作、多表操作、多表事务、随机...阅读全文

开源项目 2017-11-23 07:07:16 john

golang中struct成员变量的标签(Tag)说明和获取方式

在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容。形如: 1 2 3 4 type User struct { UserId int `json:"user_id" bson:"user_id"` UserName string `json:"user_name" bson:"user_name"` } 这个小米点里的内容是用来干什么的呢? struct成员变量标签(Tag)说明 要比较详细的了解这个,要先了解一下golang的基础,在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是由经常需要和其它的系统进行数据交互,例如转成json格式,存储到mongodb啊等等。这个时候如果用属性名来...阅读全文

博文 2018-01-16 18:33:05 老汉-憨憨

map键值的疑问

在effective_go文档中,关于map类型key的取值上说接口类型也可以做key,但是附加条件是只要动态的类型支持即可。 不知道martini中使用的函数 func InterfaceOf(value interface{}) reflect.Type 最终返回的是不是反射包里的以下struct: ``` // interfaceType represents an interface type. type interfaceType struct { rtype `reflect:"interface"` methods []imethod // sorted by hash } ``` 如果是,但文档中指出struct带有slice字段是能不做为ma...阅读全文

go - 复合类型 array, slice, map

Go 语言支持复合类型: 数组:array 切片:slice 指针:pointer 字典:map 通道:chan 结构体:struct 接口:interface 1. array 同一类型数据的集合 var arr [n]type //声明type类型一维数组 var arr [m][n]type //声明type类型二维数组 多维数组以此类推 也可以用 := 声明 arr := [n]type{元素1[,元素2, ...]} 其中n可以用 "..." 三个点表示,系统会根据元素个数来确定 下标只能为 int 类型,而 php 还支持 string 类型的下标 1.1 数组长度 len(arr) 注:数组长度在定义后就不可变 1.2 遍历: a. 循环通过过数组下标访问 arr[0] ~ a...阅读全文

博文 2015-06-17 23:08:21 chuangrain

Go语言学习(一):初识Golang

前言 最近一段时间接触了下go语言,很有兴趣,花时间研究了下,觉得可以学一学,然后就不多说了。Ubuntu下配置Go环境的可以参考下博文《Ubuntu 配置 Go 语言开发环境(Sublime Text+GoSublime)》,亲测可用。 初识Golang 关于关键字、类型和变量: 1,Go在语法上类C,如果希望将两个(或更多)语句放在一行书写,必须用分号(“;”)隔开。一般情况下,不需要分号。 eg. for init; condition; post { ... }2, 定义一个变量,默认赋值为其类型null值。引入“:=”符号在一步内完成声明与赋值(只用于函数内,此情况下,变量类型由赋值内容自动推演) 3, 特殊变量_(下划线),任何赋给它的值将被丢弃。 4,GO编译器对声明却未使用的...阅读全文

博文 2014-10-21 18:00:01 fzy0201

golang mgo 查询和更新内嵌文档

在mongoDB的shell中查找并显示特定的键值对的语法是: > db.logs.find({},{"log":1}) { "_id" : "3a06384a40a8e587806f194c6c80253e", "log" : "这是一个测试日志" } { "_id" : "36bb718040a4362b8035ebd822125dba", "log" : "这是一个测试日志" } 上面这条指令是查找所有文档,显示 键为“log"的键值对”。 如果需要不显示“_id”键值对,可以这么写 > db.logs.find({},{"_id":0,"log":1}) { "log" : "这是一个测试日志" } { "log" : "这是一个测试日志" } 在golang中的mgo写法却需要借助...阅读全文

博文 2016-08-30 22:00:02 su_sai

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和值两个变量。上面那个例子我们不需要使用该元素的序号,所...阅读全文

博文 2016-02-23 16:00:11 u011225629

分布式集群管理软件gluster

gluster 是一款轻量级高性能的分布式集群管理软件,实现了分布式软件架构中的常用核心组件,包括: 服务配置管理中心 服务注册与发现 服务健康检查 服务负载均衡 gluster 的灵感来源于 ZooKeeper 及 Consul ,它们都实现了类似的分布式组件,但是 gluster 更加的轻量级、低成本、易维护、架构清晰、简单实用、性能高效,这也是 gluster 设计的初衷。 开源、免费、跨平台; 使用 RAFT 算法实现分布式一致性; 使用通用的 REST 协议提供 API 操作; 使用分布式 KV 键值存储实现服务的配置管理; 超高读写性能,适合各种高并发的应用场景; 支持集群分组,不同的集群之间数据相互隔离; 配置管理简单,且仅提供实用的API接口以及终端管...阅读全文

Go 语言中的 Array,Slice,Map 和 Set

http://se77en.cc/2014/06/30/array-slice-map-and-set-in-golang/#Map Array(数组) 内部机制 在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型,元素可以通过唯一的索引值访问,从 0 开始。 数组是很有价值的数据结构,因为它的内存分配是连续的,内存连续意味着可是让它在 CPU 缓存中待更久,所以迭代数组和移动元素都会非常迅速。 数组声明和初始化 通过指定数据类型和元素个数(数组长度)来声明数组。 12 // 声明一个长度为5的整数数组var array [5]int 一旦数组被声明了,那么它的数据类型跟长度都不能再被改变。如果你需要更多的元素,那么...阅读全文

博文 2015-04-19 16:00:02 leonpengweicn

实现有序map之go

Go Map介绍 Go 中 Map是一种无序的键值对的集合。Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。Map是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map是无序的,我们无法决定它的返回顺序,这是因为Map是使用链式hash表来实现的。 c++中的实现 在C++ STL 中map 采用红黑树实现,可以实现有序的Map. Go 中实现 实现原理 这个实现方法的主要的方法是用空间换取时间。通过list 和 map 两种数据结构,保存相同的一份数据。list 用来做顺序遍历,map 用来做查找,删除操作 实现代码 package main import ( "container/list" "fmt" ) type Keyer interface...阅读全文

博文 2017-11-06 05:04:41 因心而来