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

Golang的一些基础语法范式

主要记录一些Golang里面的基本语法范式,因为Golang这玩意实在语法和一般编程语言太特么不一样了... 数组和切片的初始化 切片是Golang中关于数组的一个概念,它很类似于SQL语言中的视图概念,即它类似一个实体数据的镜像或快照,同时一般情况下在Golang实际项目中我们也更多的会去使用切片而不是数组本体 // 数组的初始化 var array = [5]int // 仅声明 array := [5]int // 另外一种写法,也是一般函数体中用的更多的写法 array := [5]int{1, 2, 3, 4, 5} // 定长数组声明且赋值 array := [...]int{1, 2, 3, 4, 5} // 不定长数组声明且赋值 // 切片的初始化 slice := []in...阅读全文

博文 2019-02-24 11:34:42 Congroo_027c

Golang:map

map golang 中提供映射关系容器为map,其内部使用散列表(hash)实现 map 是一种无序的基于key-value的数据结构,Golang中的map是引用类型,必须初始化后才能使用 map定义 语法: map[KeyType]ValueType KeyType:表示键的类型 ValueType:表示键对应的值得类型 map类型的变量默认初始值为nil,需要用make函数来分配内存 make(map[KeyType]ValueType,[cap]) 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。 map的基本使用 基本使用: func main() { scoreMap := make(map[string]int, 8...阅读全文

redis快速理解

## 基础 redis是可基于内存亦可持久化的日志型、Key-Value数据库. 类似于memcached,但是支持更复杂的数据结构List、Set、Sorted Set等,并且有持久化的功能 ### 特性 1. 单进程单线程模型,redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 2. 操作具有原子性 3. 其数据库完全保存在内存中,仅使用磁盘进行持久化 4. 丰富的数据类型 5. 支持分布式,可以将数据复制到任意数量的从机(slave)中 6. 支持事务 单个步骤处理一组命令,原子意味着要么处理所有命令,要么都不处理 命令序列化,按顺序执行 原子性 三阶段: 开始事务 - 命令入队 - 执行事务 - 取消事务 命令:MULTI/EXEC/DISCARD 7. 发...阅读全文

博文 2019-12-03 18:33:38 bytemode

etcd常用操作介绍

安装 最简单的安装方法是直接去etcd GitHub的Release页下载预编译好的二进制文件。etcd官方为各个系统提供了不同的二进制文件,供开发者根据自己的系统去下载。 下载地址:https://github.com/etcd-io/et... 下载完成解压后,目录中有两个二进制文件,etcd以及etcdctl。其中etcd就是运行etcd服务的二进制文件,etcdctl是官方提供的命令行etcd客户端,使用etcdctl可以在命令行中访问etcd服务。 将etcd和etcdctl这两个文件软链到系统环境变量$PATH对应的目录下,方便服务启动,当然试验目的直接把工作目录切换到刚才下载的目录直接运行两个文件即可。 我从GitHub上下载了MacOS对应的etcd文件,执行下面的命令可以看...阅读全文

博文 2019-10-24 13:32:42 KevinYan

阿里Redis最全面试全攻略,读完这个就可以和阿里面试官好好聊聊

什么是Redis及其重要性?Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久化的高性能键值对数据库。Redis的之父是来自意大利的西西里岛的Salvatore Sanfilippo,Github网名antirez,笔者找了作者的一些简要信息并翻译了一下,如图: 从2009年第一个版本起Redis已经走过了10个年头,目前Redis仍然是最流行的key-value型内存数据库的之一。优秀的开源项目离不开大公司的支持,在2013年5月之前,其开发由VMware赞助,而2013年5月至2015年6月期间,其开发由毕威拓赞助,从2015年6月开始,Redis的开发由Redis Labs赞助。 笔者也使用过一些其他的NoSQL,有的支持的value类型非常单一,因此很多操作都必...阅读全文

博文 2020-05-06 19:33:00 Java高级架构

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-09-29 04:30:01 WayneZeng

Tags in Golang

type People struct { Name string `json:"name"` Age int8 `json:"age"` } 在学习过程中,看到类似上面的代码,一下子懵了个逼😳。。。大概一查,这是 Golang 中的 Tags 语法,官方解释是这样的: A field declaration may be followed by an optional string literal tag, which becomes an attribute for all the fields in the corresponding field declaration. The tags are made visible through a reflection interface b...阅读全文

博文 2018-06-27 21:34:40 X1nFLY

golang集合map

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

博文 2019-12-30 21:32:42 程序小白菜

MongoDB基础

在此之前要了解关系型数据库与非关系型数据库 关系型数据库(mysql , oracle, sqlserver,db2) 大部分收费 支持关系关联 支持SQL语句查询 更好的对事务支持 存储过程 函数 视图。。。 非关系型数据库 NOSQL : (NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。 NoSQL数据库的四大分类 键值([Key-Value]*)存储数据库 关系型数据库与非关系型数据库区别 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点...阅读全文

博文 2019-09-26 14:33:11 aside section ._1OhGeD

Go语言==Struct

结构体(Struct) Go语言通过自定义方式形成新的类型,而结构体是类型中带有成员的复合类型。Go语言使用结构体和结构成员描述真实世界的实体和实体对应的各种属性。 类型可以被实例化,使用new或&,构造的实例的类型是类型的指针。 结构体成员是由一系列成员变量构成,也成为‘字段’ 字段特性 拥有自己的类型和值 字段名必须是唯一的 字段类型可以也是结构体,甚至是字段所在结构体的类型 Go语言中不支持“类”的概念,但结构体与类都是复合结构体,但Go语言中结构体的内嵌配合接口比面向对象具有更高的扩展性和灵活性。 Go中不仅结构体可以拥有方法,每种自定义的类型也可以拥有方法 1.定义结构体 type structName struct { name1 name1Type name2 name2Typ...阅读全文

博文 2019-09-26 00:02:40 默之

深入理解 Go map:初始化和访问元素

从本文开始咱们一起探索 Go map 里面的奥妙吧,看看它的内在是怎么构成的,又分别有什么值得留意的地方? 第一篇将探讨初始化和访问元素相关板块,咱们带着疑问去学习,例如: 初始化的时候会马上分配内存吗? 底层数据是如何存储的? 底层是如何使用 key 去寻找数据的? 底层是用什么方式解决哈希冲突的? 数据类型那么多,底层又是怎么处理的呢? ... 原文地址:深入理解 Go map:初始化和访问元素 数据结构 首先我们一起看看 Go map 的基础数据结构,先有一个大致的印象 hmap type hmap struct { count int flags uint8 B uint8 noverflow uint16 hash0 uint32 buckets unsafe.Pointer ol...阅读全文

博文 2019-03-05 21:34:46 煎鱼

Java面试中总被问到集合框架怎么办?只要掌握要点轻松录用!

Java的集合类是一些非常实用的工具类,主要用于存储和装载数据 (包括对象),因此,Java的集合类也被称为容器。在Java中,所有的集合类都位于java.util包下,这些集合类主要是基于两个根接口派生而来,它们就是 Collection和 Map。所以集合框架在面试中总会被问到,只要掌握要点轻松录用!小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料! ​​​​![image.png](https://static.studygolang.com/190107/0ad34bd72a31d3eb4c70fdafd5d5888...阅读全文

博文 2019-01-07 15:10:37 javaGO007

Golang笔记: 结构体(struct)

结构体定义 go语言的关键字 type 可以将各种基本类型定义为自定义类型,包括整型、字符串、布尔等。结构体是一种复合的基本类型,通过 type 自定义类型进行定义。 结构体的定义格式如下: type 类型名 struct { 字段1 字段1类型, 字段2 字段2类型, ... } 说明: 类型名:标识自定义结构体的名称,在同一个包内不能重复。 struct{}:表示结构体类型,type 类型名 struct{} 可以理解为将 struct{} 结构体定义为类型名的类型。 字段1、字段2……:表示结构体字段名。结构体中的字段名必须唯一。 字段1类型、字段2类型……:表示结构体字段的类型。结构体实例化 1:基本的实例化形式;结构体本身也是一种类型,可以像基本类型一样以 var 方式声明结构体来...阅读全文

博文 2019-06-30 23:32:48 Boston199834

【Golang 基础】Go 语言的 Map

Go 语言中的Map   Map 是一个无序的键值对数据集合,通过 key 快速检索数据。 通过 map[keyType]valueType 格式声明 Map; package basic import "fmt" func DeclaratMap(){ // 声明一个空的 map m1 := map[int]string{} fmt.Println(m1) // map[] // 声明一个 map 并赋初始值 m2 := map[int]string{ 0: "Java", 1: "C#", 2: "Python", 3: "Golang" } fmt.Println(m2) // map[3:Golang 0:Java 1:C# 2:Python] } 通过 make(map[keyTy...阅读全文

博文 2019-03-28 02:34:38 爱写作的程序猿

Learn Golang in Days - Day 12

Learn Golang in Days - Day 12 要点 Map是一种无序的键值对的集合。Map最重要的一点是通过Key可以检索到Valu. Map是使用hash表来实现的 定义map 使用map关键字定义 使用make函数定义 // 声明变量,默认map是nil var map_variable map[key_data_type]value_data_type var countryMap map[string]string // 使用make函数来定义 map_variable := make(map[key_data_type]value_data_type) countryMap := make(map[string]string) //定义并初始化 var country...阅读全文

博文 2019-02-06 18:34:43 笑吧小鸟

go语言映射(map)要点总结

1. 定义 Go语言中映射是一种字典类型的数据结构,类似于c++和java中的hashmap,用于存储一系列无序的键值对。 映射是基于键来存储值。映射的优势是能够基于键快速索引数据。键就像索引一样,指向与该键关联的值,在内存中键值对的关系如下图所示。 和切片类似,映射维护的是底层数组的指针,属于引用类型。 2. 内部实现 映射是一个集合,可以使用类似处理数组和切片的方式迭代映射中的元素。但映射是无序的,不能对键值对进行排序。即使按顺序保存,每次迭代的时候顺序也不一样。无序的原因是映射的实现使用了散列表。 这个散列表是由hmap实现的,hmap中维护着存储键值对的bucket数组,hmap和bucket数组的关系如下图所示。 bucket是一个链表结构,每一个bucket后面连接的bucket...阅读全文

博文 2020-01-14 19:32:40 lioney

如何快速的随机从 map 中返回一个值

前言 本文翻译自 lukechampine.com/hackmap.htm… go 的 map 源码解析都会引用的一片文章。 第一部分:问题 从一个切片中随机的获取一个值是非常简单的,可以使用map.Int(n),这样就可以从[0,n)中随机的返回一个值,从而可以从切片中随机的返回一个元素 func randSliceValue(xs []string) string { return xs[rand.Intn(len(xs))] } 复制代码这个方法是非常好的,因为耗费的时间和内存都是O(1)的。但是呢,对于 map 而言,没有简单并且等效的方式来做到随机从 map 中获取一个值。我们获取 map 中的数据有两种方式,取值(e.g. m["foo"])或者range。所以,如何根据这两种方...阅读全文

博文 2020-05-05 23:34:25 胡大海

Go语言中映射表map的使用

1 概述 Go语言中的键值对(key->value)集合,称之为映射map。映射map是变长类型,定义时不需要指定长度。映射map是无序的,遍历是的顺序不可期,原因是底层由hash表实现。逻辑结构表示为: 2 创建语法 var m = map[key_type]value_type{key1: value1, key2: value2} var m = make(map[key_type]value_type) // 示例,字符串型下标,字符串型值: var m = make(map[string]string) //make()会分配内存空间,初始化。 m["east"] = "东" m["west"] = "西" // 直接初始化 var m = map[string]string{"e...阅读全文

博文 2018-10-31 16:35:28 小韩说课

6.Go语言基础之map

1.map 1.1map介绍 Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化后才能使用。 1.2map定义 map定义语法如下: map[KeyType]ValueType 其中, KeyType表示键的类型。 ValueType表示键对应的值的类型。 map类型的变量,默认初始值为nil,需要使用make()函数来分配内存。语法为: make(map[KeyType]ValueType, [cap]) 其中cap表示map的容量,该参数虽然不是必须的,但是我们需要在初始化map的时候为其指定一个合适的容量。 1.3map的基本使用 package main import ...阅读全文

博文 2019-12-12 10:33:13 DevOperater

深入理解 Go map:赋值和扩容迁移

深入理解 Go map:赋值和扩容迁移 概要 在 上一章节 中,数据结构小节里讲解了大量基础字段,可能你会疑惑需要 #&(!……#(!¥! 来干嘛?接下来我们一起简单了解一下基础概念。再开始研讨今天文章的重点内容。我相信这样你能更好的读懂这篇文章 哈希函数 哈希函数,又称散列算法、散列函数。主要作用是通过特定算法将数据根据一定规则组合重新生成得到一个散列值 而在哈希表中,其生成的散列值常用于寻找其键映射到哪一个桶上。而一个好的哈希函数,应当尽量少的出现哈希冲突,以此保证操作哈希表的时间复杂度(但是哈希冲突在目前来讲,是无法避免的。我们需要 “解决” 它) 链地址法 在哈希操作中,相当核心的一个处理动作就是 “哈希冲突” 的解决。而在 Go map 中采用的就是 "链地址法 " 去解决哈希冲突...阅读全文

博文 2019-03-26 09:29:56 EDDYCJY

Golang学习笔记-map

map是一些键值对的集合,默认值为nil,使用内置函数make创建map: var map_variable map[key_data_type]value_data_type map_variable := make(map[key_data_type]value_data_type) func main() { var numberMap map[string] int numberMap=make(map[string]int) println(len(numberMap)) } map可以使用大括号来初始化: var numberMap =map[string] int{"one":1,"two":2,"three":3} 判断元素是否存在: func main() { var nu...阅读全文

博文 2019-09-27 23:32:44 aside section ._1OhGeD

2019-01-20

最小堆和最大堆 golang实现 二叉堆是一种特殊的堆,它满足两个性质:结构性和堆序性 结构性:二叉堆是一颗完全二叉树,完全二叉树可以用一个数组表示,不需要指针,所以效率更高。当用数组表示时,数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在位置(2i+ 1)上,其父节点在位置(i/2)上。 堆序性质:堆的最小值或最大值在根节点上,所以可以快速找到最大值或最小值。 最大堆和最小堆是二叉堆的两种形式。 -最大堆:根结点的键值是所有堆结点键值中最大者的堆。 -最小堆:根结点的键值是所有堆结点键值中最小者的堆。 1. 最小堆实现,不使用container/heap type MinHeap struct { Element []int } 定义构造方法 数组中第一个元素不使用,存放一个小于堆...阅读全文

博文 2019-01-20 18:34:44 一线曙光_

Docker ps常用命令

查看 docker 容器,必然要用到 docker ps 命令。其基本格式为: docker ps [OPTIONS] 关键在于 OPTIONS(选项): image 1 常见用法 1. 最常见的用法 $ docker ps 显示当前正在运行的容器。 在 PORTS 一列,如果暴露的端口是连续的,还会被合并在一起,例如一个容器暴露了3个 TCP 端口:100,101,102,则会显示为 100-102/tcp。 2. 显示所有状态的容器 $ docker ps -a 容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。 3. 显示最后被创建的 n 个容器 $ docker ps -n 3 注意,这里不限状态。 ...阅读全文

Tourist with Data Structure Third Week

探索哈希表 概念 哈希集合:哈希集合是集合数据结构的实现之一,用于存储非重复值。 哈希映射 :哈希映射是映射数据结构的实现之一,用于存储(key, value)键值对。 设计哈希集合 type MyHashSet struct { hash map[int]int } /** Initialize your data structure here. */ func Constructor() MyHashSet { temp := make(map[int]int) hash := MyHashSet{temp} return hash } func (this *MyHashSet) Add(key int) { this.hash[key] = 1 } func (this *MyHas...阅读全文

博文 2019-05-31 13:34:39 Jiawei_84a5

以太坊数据结构MPT

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 MPT(Merkle Patricia Tries)是以太坊存储数据的核心数据结构,它是由Merkle Tree和Patricia Tree结合的一种树形结构,理解MPT有助于我们更好的理解以太坊的数据存储。在了解MPT数据结构之前,我们需要先来看看基本的Tree结构和Merkle Tree、Patricia Tree。 Trie字典树  Trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。 上图是一棵Trie树,表示了字符串集合{“a”, “to”, “tea”, “ted”, “ten”, “...阅读全文

博文 2019-09-24 13:32:48 链客

golang中的映射

1. Map 概念:map是一种特殊的数据结构,一种键值对的无序集合。相当于python中的字典 2. 创建和初始化map 使用make声明map dict := make(map[string]int) 使用map字面量的方式声明map dict := map[string]string {"key1": "value1", "key2": "value2"} dict := map[int][]string{} 声明了一个存储字符串切片的map 从map中删除一项 delete(dict, "key1") 删除键为key1的键值对 map在函数间传递是并不会制造该map的一个副本。实际上,当传入一个map给函数时,并对这个map进行修改时,所有对这个map的引用都会察觉到这个修改。 No...阅读全文

博文 2019-04-03 15:34:42 孤风追影

go匿名函数实现操作封装

/** * 使用匿名函数实现操作封装 * 将匿名函数作为 map 的键值,通过命令行参数动态调用匿名函数 * 运行命令 go run src/hh/main.go --skill=fly */ package main import ( "flag" "fmt" ) var skillParam = flag.String("skill", "", "skill to perform") func main() { flag.Parse() var skill = map[string]func(){ "fire": func() { fmt.Println("chicken fire") }, "run": func() { fmt.Println("soldier run") }, "f...阅读全文

博文 2019-12-19 11:34:13 huang_he_87

golang mgo使用

golang对MongoDB的操作使用gopkg.in/mgo.v2库操作。如下是基本的一些用法 连接 package main import ( "log" "time" "gopkg.in/mgo.v2" ) const ( MongoDBHosts = "172.17.84.205:27017" AuthDatabase = "test" AuthUserName = "test" AuthPassword = "123456" MaxCon = 300 ) func main() { mongoDBDialInfo := &mgo.DialInfo{ Addrs: []string{MongoDBHosts}, Timeout: 60 * time.Second, Database:...阅读全文

博文 2019-11-12 18:02:41 麦穗儿

Go 每日一库之 buntdb

简介 buntdb是一个完全用 Go 语言编写的内存键值数据库。它支持 ACID、并发读、自定义索引和空间信息数据。buntdb只用一个源码文件就实现了这些功能,对于想要学习数据库底层知识的童鞋更是不容错过。 感谢@kiyonlin推荐! 快速使用 先安装: $ go get github.com/tidwall/buntdb 后使用: package main import ( "fmt" "log" "github.com/tidwall/buntdb" ) func main() { db, err := buntdb.Open(":memory:") if err != nil { log.Fatal(err) } defer db.Close() db.Update(func(tx...阅读全文

博文 2020-03-22 15:32:40 darjun

我可能并不会使用golang map

package main import ( "fmt" ) func main(){ mapa:= make(map[string]int, 10) // var mapa map[string]int mapa["zhao"] = 1 mapa["qian"] = 2 fmt.Println(mapa["li"]) } 复制代码看上面的例子,我们可能存在的疑问有以下几个: 1.make进行map的创建,后面的参数10是干啥的,不同的值,有啥区别?不提供行不行? 2.注释掉的var申明的map能不能直接进行赋值操作? 3.我获取不存在的key,结果是怎样的? 4.最后一个终极问题,分配的底层数组用完之后,啥时候扩容? 等等,或许你还有其他的疑问,我们首先看看上面的几个疑问吧 先看看在make...阅读全文

博文 2020-05-20 14:34:25 第八共同体

# golang 数据结构 2

golang 数据结构1 channel atomic sync.Mutex sync.WaitGroup sync.Pool sync.Map channel Go 教程系列笔记 Channel 通道 The way to go 协程间的通信2 基本用法 var ch chan int ch := make(chan int) ch := make(chan int, 2) // 带缓存 chan ch <- value // 给 channel 发送值 value := <- ch // 从 channel 接收值 // for range channel for value := range ch { } // 函数中使用 func run(ch chan int){} func ru...阅读全文

博文 2019-08-12 18:47:26 xfstart07

golang学习笔记-map类型

在刚刚接触go语言的时候,就看到很多地方出现了map。就对这个map很困惑,那么这个map究竟是什么呢。让我们一起来看一看吧。 map (映射)是一个种数据结构,用于存储一些无序的键值对。映射使用了两个数据结构来存储数据。第一个数据结构是数组,内部存储的是用户选择桶的散列值。第二个数据结构是一个字节数组,用于存储键值对。映射是一个存储键值对的无序集合。 创建和初始化 go语言中可以使用make函数,也可以使用使用字面量的方法来创建映射(map)。如下所示 //通过make函数 创建一个映射,键类型是string ,值是int list := make(map[string]int) list["test"]= 1 fmt.Println(list["test"]) //创建一个映射,键值都是...阅读全文

博文 2019-09-03 17:02:45 旧梦发癫

redis 基础数据结构

1 前言 Redis的5种数据类型(String,Hash,List,Set,Sorted Set),每种数据类型都提供了最少两种内部的编码格式,而且每个数据类型内部编码方式的选择对用户是完全透明的,Redis会根据数据量自适应地选择较优化的内部编码格式。 查看某个键的内部编码格式,使用命令object encoding keyname Reids的每个键值内部都是使用叫redisObject这个C语言结构体保存的,代码如下: type:表示键值的数据类型,也就是那5种基本数据类型。 encoding:表示键值的内部编码方式, #define OBJ_ENCODING_RAW 0 /* Raw representation */ #define OBJ_ENCODING_INT 1 /* E...阅读全文

博文 2019-12-17 18:32:48 LZhan

session 和 cookie 到底是什么

cookie 大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录;再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和 cookie 有关。如果你明白了服务器后端对于 cookie 和 session 的处理逻辑,就可以解释这些现象,甚至钻一些空子无限白嫖,待我慢慢道来。 一、session 和 cookie 简介 cookie 的出现是因为 HTTP 是无状态的一种协议,换句话说,服务器记不住你,可能你每刷新一次网页,就要重新输入一次账号密码进行登录。这显然是让人无法接受的,cookie 的作用就好比服务器给你贴个标签,然后你每次向服务器再发请求时,服务器就能够 cookie 认出你。 抽象地概括一下:一个 cookie 可以认为是一个「变量」,形如 na...阅读全文

博文 2020-02-08 21:32:42 labuladong

【JavaScript】请不要把Object和JSON混为一谈

什么是JSON { "name": "小徐", "experience": 2.5, "hobbit": ["唱歌","跳舞","打球","说唱"] } 什么是Object var o = { name: '小吴', age: 22, height: 185 } 为什么会被混为一谈 原因很简单:这两个东西长得很像啊,都有花括号/键值对,而且JSON就是由JavaScript衍生出来的格式,难免会傻傻分不清楚 然而作为一个较真的切图仔,不能这么马马虎虎地对待这方面的知识。我们把Object写成这样: const o = { name: '小吴', age: Math.floor(Math.random()*10) + 20, height: 3*60+5, // 每涨一岁,就skr一次 [Sy...阅读全文

博文 2020-02-02 11:32:39 Kagashino

深入理解Golang之context

context是Go并发编程中常用到一种编程模式。本文将从为什么需要context,深入了解context的实现原理,以了解如何使用context。 作者:Turling_hu来源: 掘金 原文链接: https://juejin.im/post/5e5268... 前言 这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用context。 为什么需要context 在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。熟悉channel的朋友应该都见过使用done channel来处理此类问题。比如以下这个例子: func main() { mess...阅读全文

博文 2020-03-01 12:32:41 Kevin

深入学习 GRPC - 1. 非加密协议

本文基于以下版本: github.com/golang/protobuf v1.3.2 google.golang.org/grpc v1.25.1 openresty v1.15.8.2 本篇主要进行非加密 GRPC 的通信在字节层面的讨论,假设读者对 GRPC、HTTP/2 等已有基本的了解。 本篇使用一个简单的 proto: syntax = "proto3"; package pb; service Hot { rpc Inc (IntReq) returns (IntResp); } message IntReq { int32 i = 1; } message IntResp { int32 i = 1; } 以及如下的 golang 代码: package main impor...阅读全文

博文 2019-12-04 03:32:38

ngx 配置解析

一 ngx配置解析框架 1.1 配置解析流程 配置解析源码在 ngx_conf_file.c文件中实现, 函数 ngx_conf_parse. image.png 如上图所示, 配置解析采用递归的方式进行解析配置. 每次配置文件读取会读取一组数据, 其中第一个为配置项名称, 后面根据配置类型有不同数量的值. 示例 error_log /var/log/nginx/error.log; 其中键为 error_log 值为 /var/log/nginx/error.log. 除了普通的键值对类型, 还有递归类型 如: image.png 当遇到递归类型配置时, 处理函数将会1.先保存配置解析的上下文. 2.递归调用配置解析函数. 3.恢复上下文. 1.2 配置文件读取 源码在 ngx_conf_...阅读全文

博文 2019-10-29 21:32:54 aside section._1OhGeD

golang-101-hacks(18)——map类型访问

Map是一种指向哈希表的引用类型,可以使用map构造一个“键值”类型的数据库,这在实际编程中非常高效。例如,下面的代码是统计切片中每个元素的总数: package main import ( "fmt" ) func main() { s := []int{1, 1, 2, 2, 3, 3, 3} m := make(map[int]int) for _, v := range s { m[v]++ } for key, value := range m { fmt.Printf("%d occurs %d times\n", key, value) } } 运行结果 3 occurs 3 times 1 occurs 2 times 2 occurs 2 times 此外,根据Go spe...阅读全文

博文 2019-06-09 11:02:40 羊羽share

海量数据展示(二)-性能优化

背景     之前做的海量数据数据展示,在预处理速度和在线渲染上还有有所欠缺,本文中进行一些优化工作,使得九分钟处理完一千多万面数据的3-12级矢量切片,在线浏览数据请求时间控制在10s左右。 准备     软件环境:PostGIS(3.0.0rc2 r17909)和 PostgreSQL( 12.0, compiled by Visual C++ build 1914, 64-bit),数据是微软开源的部分房屋数据public.california20191107(10988317条)。 预处理     预处理就是将3级到12级的矢量切片事先切好。首先获取数据12级的最大最小xyz,通过这个范围生成网格,然后和数据相交得到一一对应的网格表public.ca_xyz 。 --经度转切片x C...阅读全文

博文 2019-11-10 22:34:58 更多精彩内容海量数据展示polong面向对象的用电信息数据交换协议庭说第六章 查询性能优化 高性能MySql阅读总结好好学习Sun海量空间业务数据快速显示解决方案研究moaistoneLayer types described(图层类型描述)falcon

MapReduce:在大型集群上简化数据处理(1)

特别说明 这是一个由simviso团队所组织进行的基于mit分布式系统课程翻译的系列,由知秋带领和其他成员一起翻译的课程以及课程当中涉及的论文翻译。本文章参与人员 参与人员 参与范围 知秋 审校 虚生花 翻译 概要 MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用来合并所有的具有相同中间key的中间value 。现实生活中有许多任务可以通过该模型进行表达,具体案例会在论文中展现出来。 以这种函数式风格编写的程序能够在一个大型商用机器集群上自动并行执行。这个系统在运行时只关心:如何分割输入数据,在大量计算机所组成的集群上的调度问题,集群中计...阅读全文

博文 2020-03-06 10:32:48 知秋o

Go 每日一库之 nutsdb

简介 nutsdb是一个完全由 Go 编写的简单、快速、可嵌入的持久化存储。nutsdb与我们之前介绍过的buntdb有些类似,但是支持List、Set、Sorted Set这些数据结构。 快速使用 先安装: $ go get github.com/xujiajun/nutsdb 后使用: package main import ( "fmt" "log" "github.com/xujiajun/nutsdb" ) func main() { opt := nutsdb.DefaultOptions opt.Dir = "./nutsdb" db, err := nutsdb.Open(opt) if err != nil { log.Fatal(err) } defer db.Close...阅读全文

博文 2020-04-28 00:32:45 darjun

Go 每日一库之 buntdb

简介 buntdb是一个完全用 Go 语言编写的内存键值数据库。它支持 ACID、并发读、自定义索引和空间信息数据。buntdb只用一个源码文件就实现了这些功能,对于想要学习数据库底层知识的童鞋更是不容错过。 感谢@kiyonlin推荐! 快速使用 先安装: $ go get github.com/tidwall/buntdb 复制代码后使用: package main import ( "fmt" "log" "github.com/tidwall/buntdb" ) func main() { db, err := buntdb.Open(":memory:") if err != nil { log.Fatal(err) } defer db.Close() db.Update(fun...阅读全文

博文 2020-03-22 22:34:26 darjun

Go 每日一库之 nutsdb

简介 nutsdb是一个完全由 Go 编写的简单、快速、可嵌入的持久化存储。nutsdb与我们之前介绍过的buntdb有些类似,但是支持List、Set、Sorted Set这些数据结构。 快速使用 先安装: $ go get github.com/xujiajun/nutsdb 复制代码后使用: package main import ( "fmt" "log" "github.com/xujiajun/nutsdb" ) func main() { opt := nutsdb.DefaultOptions opt.Dir = "./nutsdb" db, err := nutsdb.Open(opt) if err != nil { log.Fatal(err) } defer db.C...阅读全文

博文 2020-04-28 11:34:31 darjun

实现Raft协议:Part 0 - 介绍

翻译自Eli Bendersky的系列博客,已获得原作者授权。 本文是系列文章中的序言,本系列文章旨在介绍Raft分布式一致性协议及其Go语言实现。文章的完整列表如下: 序言:介绍(本文) 第一部分:选主 第二部分:指令和日志复制 第三部分:持久性和优化 Raft是一个相对较新的算法(2014),但是已经在业界取到了广泛的应用。最知名的案例应该就是Kubernetes,其中的分布式键值存储组件etcd就依赖了Raft协议。 本系列文章的写作目的,在于描述Raft协议的一个功能完备且经过严格测试的实现方式,并提供一些Raft工作方式的直观理解。这并不是您学习Raft协议的唯一途径。我假定您至少读过Raft论文; 此外,也强烈建议您花时间仔细研究Raft网站上的资源——观看创作者的一两次演讲,鼓...阅读全文

博文 2020-05-06 14:36:21 GuoYaxiang

数据结构和算法(Golang实现)(26)查找算法-哈希表

哈希表:散列查找 一、线性查找 我们要通过一个键key来查找相应的值value。有一种最简单的方式,就是将键值对存放在链表里,然后遍历链表来查找是否存在key,存在则更新键对应的值,不存在则将键值对链接到链表上。 这种链表查找,最坏的时间复杂度为:O(n),因为可能遍历到链表最后也没找到。 二、散列查找 有一种算法叫散列查找,也称哈希查找,是一种空间换时间的查找算法,依赖的数据结构称为哈希表或散列表:HashTable。 Hash: 翻译为散列,哈希,主要指压缩映射,它将一个比较大的域空间映射到一个比较小的域空间。 简单的说就是把任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash 算法虽然是一种算法,但更像一种思想,没有一个固定的公式,只要符合这种思想的算法都称 Hash 算法。 散...阅读全文

博文 2020-04-07 16:32:50 陈星星

流程控制之分支循环

在编写 Go 程序的时候,我们不仅会用前面学到的数据结构来存储数据,还会用到 if、switch、for 来进行条件判断和流程控制,今天我们就来一起学习下它们。 if if 主要用于条件判断,语法为: if 条件 { # 业务代码 } 先看一个简单例子: package main import "fmt" func main() { age := 7 if age > 6 { fmt.Println("It's primary school") } } 我们可以在条件中使用 & 或 || 来进行组合判断: package main import "fmt" func main() { age := 7 if age > 6 && age <= 12 { fmt.Println("It's p...阅读全文

博文 2019-06-18 19:32:40 51reboot

3.2.8Golang的map

总目录:https://www.jianshu.com/p/e406a9bc93a9 Golang - 子目录:https://www.jianshu.com/p/8b3e5b2b4497 map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 map的定义 语法: map[键数据类型]值数据类型 map类型的变量默认初始值为nil,需要使用make()函数来分配内存。 语法: make(map[键数据类型]值数据类型, [容量]) map的基本使用 package main import "fmt" func main() { // 定义一个map 并初始化 长度最好在初始化时就设置好 scoreMap := make(map[str...阅读全文

博文 2020-03-17 23:32:46 寒暄_HX

ETCD原理和基本实现

什么是 ETCD 官方定义为:Distributed reliable key-value store for the most critical data of a distributed system 简单直直译对就是:分布式系统中最关键的数据进行可靠的键值存储 ETCD 名字含义 /etc 是linux 操作系统的配置存储目录, d durtubute 分布式缩写,简单理解为分布式配置数据库。 ETCD 特性和应用场景 ETCD主要为了存储系统关键配置数据,配置数据很少修改,符合读多写少特性,根据此特性采用MVCC(MVCC Multi-Version Concurrency Control)进行读写冲突控制(锁机制)来提高读写效率。 ETCD利用btree实现数据索引,提高数据读取效...阅读全文

博文 2020-04-07 15:32:43 王司技术谈