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

Golang 优化之路——bitset

写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现。但是如果要应对大量数据,例如,存放大量电话号码,使用map占用内存大的问题就会凸显出来。内存占用高又会带来一些列的问题,这里就不展开说了。还有就是,大量数据存放于map,查找的哈希算法消耗也会很高。这时就该考虑对数据结构进行优化。之前浏览awesome-go时发现了一种叫bitset的数据结构,今天就介绍一下它。 bitset 简介 首先这是一个数据结构。从名字set不难发现,这是一个集合的数据结构。bit的含义也比较好懂,通过set是通过bit实现的。如果你需要一个集合,正好集合内的元素都是正整数,那么用这个就没错了。 注:biset 有时也会被叫做 Bitmap。 Example import "g...阅读全文

程序员修仙之路-数据结构之 CXO让我做一个计算器!

CXO的需求果然还在继续,深呼吸,深呼吸 ....... 有人说数据结构是为算法服务的,我还要在加一句:数据结构和算法都是为业务服务的!! CXO的需求果然不同凡响,又让菜菜想到了新的数据结构:栈 栈的特性 定义 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 栈作为一种数据结构,其中有几个特性需要提起大家注意: 操作受限:何为操作受限?在栈的操作中,一般语言中针对栈的操作只有两种:入栈和出栈。并且操作只发生在栈的顶部...阅读全文

GO语言程序结构

Go程序主要由以下几部分组成: 包声明 导入包 函数 变量 语句和表达式 注释 以上一篇文章中的Test20150525.go为例: /* 第一行定义了程序包。必须声明为Go程序运行在什么包。main包是起始点来运行程序。每个包都有一个与之关联的路径和名称。 */ package main /* import "fmt" 是告诉编译器去包含文件在包fmt的预处理命令。 */ import "fmt" /* func main()主要功能是为程序执行的开始。*/ func main(){ //注意println方法。在Go语言中,一个名字如果它用大写字母开头为导出。导出是指一个函数或变量/常访问到相应的包导入。 fmt.Printf("Hello World!\n God Bless You!...阅读全文

博文 2015-06-17 23:01:27 PrinceTerence

go的net/http包使用

网上资料有点杂,有的还掺杂中间件进去,导致使用有障碍,所以,直接上官方文档: 1,首先搞清[]byte string的相互转换,最简单的方式就是 string转[]byte:[]byte(para string) []byte转string:string([]byte) 然后还有就是io包的一些实现方式,比如: bytes.NewBuffer(para []byte).String() 2,如何从request中获取form,body,head,下面是官方的api: type Request func NewRequest(method, urlStr string, body io.Reader) (*Request, error) func ReadRequest(b *bufio.Re...阅读全文

博文 2017-07-11 11:03:27 dmwan

go第五天

go语言的循环 go里的循环比较简单只有for 1.普通for循环 for 初始化语句; 条件语句; 修饰语句 {} for i := 0; i < 5; i++ { fmt.Printf("This is the %d iteration\n", i) } 2.类似while循环 for i >= 0 { i = i - 1 fmt.Printf("The variable i is now: %d\n", i) } 3.无限循环 for{ ... } 4.for-range 结构 go特有的,它可以迭代任何一个集合(包括数组和 map)觉得和foreach循环很像 一般形式for ix, val := range coll { } 用来迭代字符串,它能够自动根据 UTF-8 规则识别 U...阅读全文

数据结构之栈go言语实现

package main import ( "fmt" "os" ) type Node struct { val int pNode *Node } type Stack struct { pTop,pBottom *Node } func initStack(pStack *Stack){ pNew:=new(Node) pNew.pNode=nil pStack.pTop=pNew pStack.pBottom=pNew if pStack.pTop==nil || pStack.pBottom==nil { fmt.Println("分配头节点内存失败,程序退出") os.Exit(-1) } } func push(pStack *Stack,val int) { pNew:=ne...阅读全文

博文 2016-11-10 04:00:01 tangguangqiang

levelDB实现原理

LevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。 Jeff Dean其人:http://research.google.com/people/jeff/index.html,Google大规模分布式平台Bigtable和MapReduce主要设计和实现者。 Sanjay Ghemawat其人:http://research.google.com/people/sanjay/index.html,Google大规模分布式平台GFS,Bigta...阅读全文

golang 函数定义及其接口实例

/有返回值 且返回一个func max(a int, b int) int { if a > b { return a } return b}//有返回值 且返回二个func multi_ret(key string) (int, bool) { m := map[string]int{"ont": 1, "two": 2, "three": 3} var err bool var val int val, err = m[key] return val, err}//多个参数,相当于传进取一个数组func sum(nums ...int) { fmt.Println(nums, " ") total := 0 for _, num := range nums { total += num ...阅读全文

博文 2016-11-23 10:00:02 u012798391

LeetCode-最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。 top() -- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2. 解法: 大概思路是使用维护两个栈,一个保存数据,一个保存最...阅读全文

博文 2019-04-13 13:34:38 xx19941215

HDOJ 3715 - Go Deeper 二分+2-sat判断

题意: 有这么一个过程: go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + x[b[dep]] != c[dep] then go(dep + 1, n, m) end 其中x[]的值为0或1...c[]的值为0或1或2....现在告诉a[],b[],c[]..问这个过程最深可能是多少? 题解 看这个过程..实际上当在m层没办法下去了.更深的层肯定也到不了了...所以满足单调性...先读入a[],b[],c[]...再二分M...构图..2-sat..tarjan判断.... Program: #include #include #inc...阅读全文

博文 2015-12-22 06:00:00 kk303

go语言第四天

5.0 控制结构 这章挺简单,程序也离不开控制和循环语句,按照每个语言的要求来就行了,没有什么特别的 ,让我们看看go的分支和循环是什么样的 关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的 if condition { // do something } if condition { // do something } else { // do something } if condition { // do something } else { // do something } if initialization;conditio...阅读全文

数据结构和算法(Golang实现)(21)排序算法-插入排序

插入排序 插入排序,一般我们指的是简单插入排序,也可以叫直接插入排序。就是说,每次把一个数插到已经排好序的数列里面形成新的排好序的数列,以此反复。 插入排序属于插入类排序算法。 除了我以外,有些人打扑克时习惯从第二张牌开始,和第一张牌比较,第二张牌如果比第一张牌小那么插入到第一张牌前面,这样前两张牌都排好序了,接着从第三张牌开始,将它插入到已排好序的前两张牌里,形成三张排好序的牌,后面第四张牌继续插入到前面已排好序的三张牌里,直至排序完。 一、算法介绍 举个简单例子,插入排序一个 4 个元素的数列:4 2 9 1: []表示排好序 第一轮: [4] 2 9 1 拿待排序的第二个数 2,插入到排好序的数列 [4] 与排好序的数列 [4] 比较 第一轮进行中:2 比 4 小,插入到 4 前 第二...阅读全文

《快学 Go 语言》第 5 课 —— 神奇的切片

切片无疑是 Go 语言中最重要的数据结构,也是最有趣的数据结构,它的英文词汇叫 slice。所有的 Go 语言开发者都津津乐道地谈论切片的内部机制,它也是 Go 语言技能面试中面试官最爱问的知识点之一。初级用户很容易滥用它,这小小的切片想要彻底的理解它是需要花费一番功夫的。在使用切片之前,我觉得很有必要将切片的内部结构做一下说明。学过 Java 语言的人会比较容易理解切片,因为它的内部结构非常类似于 ArrayList,ArrayList 的内部实现也是一个数组。当数组容量不够需要扩容时,就会换新的数组,还需要将老数组的内容拷贝到新数组。ArrayList 内部有两个非常重要的属性 capacity 和 length。capacity 表示内部数组的总长度,length 表示当前已经使用的数...阅读全文

博文 2018-12-15 20:58:02 码洞

泛编程语言学习知识结构:JavaScript、Java、Pytho、Go

泛编程语言学习知识结构:JavaScript、Java、Pytho、Go 从属于笔者的程序员成长道路上的阅读学习资料工具集锦系列,主要是对于笔者这几年编程实践中,学习各个语言的过程中总结出来的共通的知识要点与体系结构的反馈。具体的 Java、JavaScript、Python、Go 的学习笔记可以参考 Domain-of-ProgrammingLanguage 与 Web 开发基础与工程实践,另外相同类型的文章有泛前端知识图谱(Web/iOS/Android/RN)。本图是利用 ProcessOn 在线编辑的,源文件地址查看这里...阅读全文

博文 2017-05-08 09:00:57 王下邀月熊_Chevalier

Go 语言学习笔记 -第2章 程序结构

Go 语言学习笔记 -第2章 [toc] 程序结构 名称 首字母大写的一般是public方法,首字母小写不能直接调用 使用驼峰式的风格 声明 每一个文件都是以package声明开头,表明文件是属于哪个包有且只有一个main包 变量 1.变量是程序的基本组成单位 变量相当于内存中一个数据储存空间的表示你可以把变量看做一个房间的门牌号通过门牌号我们可以找到房间 同样的道理,通过变量名可以访问到变量值 2.变量使用的基本步骤:1、声明变量(定义变量)2、赋值3、使用 3.变量使用注意事项:1、变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型) 2、Go变量使用三种方式1)指定变量类型,声明后若不赋值使用默认值2)根据值自行判定变量类型3)省略var, 注意:= 左侧的变量...阅读全文

博文 2020-01-08 20:32:42 Mark110

数据结构和算法(Golang实现)(17)常见数据结构-树

树 树是一种比较高级的基础数据结构,由n个有限节点组成的具有层次关系的集合。 树的定义: 有节点间的层次关系,分为父节点和子节点。 有唯一一个根节点,该根节点没有父节点。 除了根节点,每个节点有且只有一个父节点。 每一个节点本身以及它的后代也是一棵树,是一个递归的结构。 没有后代的节点称为叶子节点,没有节点的树称为空树。 二叉树:每个节点最多只有两个儿子节点的树。 满二叉树:叶子节点与叶子节点之间的高度差为0的二叉树,即整颗树是满的,树呈满三角形结构。在国外的定义,非叶子节点儿子都是满的树就是满二叉树。我们以国内为准。 完全二叉树:叶子节点与叶子节点之间高度差不会超过1的二叉树,即一个节点的左右子树的高度不会超过一层,也称平衡二叉树。 树根据儿子节点的多寡,有二叉树,三叉树,四叉树等,我们这...阅读全文

Go json unmarshal interface{} field bind to struct

写代码时碰到这么一个需求,某个字段根据不同条件对应不同子结构体,通过interface返给前端,同时前端上传时也要通过这个字段将数据传给后端。 struct -> json这个比较好办,给interface赋值不同的子结构体即可。json -> struct时有点难搞,需要做下特殊处理。默认情况json字符串解析到interface field会是map[string]interface{}。 先上代码: type Foo struct { Type string `json:"type"` Object interface{} `json:"object"` } type A struct { A string `json:"a"` } type B struct { B string `...阅读全文

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

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

博文 2018-09-12 12:34:41 空即是色即是色即是空

golang无限树分类

1. 数据库结构 图片.png 2.数据库结构体 type Menu struct { Id int64 //id SiteId int64 //站点id MenuName string //目录名称 PmenuId int64 //父级id MenuUrl string //链接地址 IconId string //目录图标 Sorts int64 //排序 Child []*Menu //多个子级目录 } 3.查询所有菜单函数 func GetMenu() []*Menu{ //定义指针切片用来存储所有菜单 var menus []*Menu //定义指针切片返回控制器 var res []*Menu //查询所有pmenu_id为0的数据,也就是一级菜单,site_id是站点,可以忽略...阅读全文

博文 2020-04-09 00:32:52 whyme_7ac2

golang 写个栈(Stack)数据结构

golang暂未有内置的Stack数据结构,工作需要就“借鉴”他人写了个 import "container/list" type Stack struct { list *list.List } func New() *Stack { list := list.New() return &Stack{ list: list, } } func (p *Stack) Push(v interface{}) { p.list.PushBack(v) } func (p *Stack) Pop() (interface{}, bool) { e := p.list.Back() if e != nil { p.list.Remove(e) return e.Value, true } retur...阅读全文

博文 2019-04-17 03:34:40 小风吹的我乱了

Functional Go: 持久化数据结构简介

函数式编程模型因其天生对并发具备良好的支持,近些年来越来越受到重视。从这篇文章开始, 我将以一个系列的博客来记录函数式编程的一个重要组件:持久化数据结构在 Go 语言下的实现。 这篇文章是系列文章的一部分,如果还没有浏览过文章的其它部分请参考: 持久化数据结构简介 (本文) Vector Trie 的实现 Transient 及持久化 函数式编程不是新概念,像 Haskell、Clojure、Scala 等函数式/类函数式编程语言也已经出现和存在了很长时间, 很多函数式编程的概念现今已经被应用在很多其他领域,比如 Facebook 在 React 的基础上提出的 Flux 应用结构抽象就强调了引入持久化数据结构的好处。 事实上,Facebook 还开源了自己的 JavaScript 持久化数...阅读全文

Golang 数据结构之【4.5共享栈】

图片来源于《大话数据结构》 图片来源于《大话数据结构》 两栈共享空间的结构的golang代码如下: package stack import ( "fmt" "errors" ) //共享栈 const MaxDoubleSize = 20 //存储空间初始分配量 type DoubleStack struct { data [MaxDoubleSize]SElemType top1 int //栈1栈顶指针 top2 int //栈2栈顶指针 } // 初始化一个空栈 func (d *DoubleStack) InitStack () { d.top1 = -1 d.top2 = MaxDoubleSize } // 把d置为空栈 func (d *DoubleStack) ClearS...阅读全文

博文 2019-05-16 16:34:43 JiBadBoy

golang中的struct

结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体,每个值称为结构体的成员。下面分两方面介绍:一个是基础部分,一个是看一下结构体在实际内存中的内存模型。 1 基础 1.1 定义 type structName typeName {} 1.2 声明 var varName structName 1.3 初始化 type Point struct{ X, Y int } p := Point{1, 2} anim := gif.GIF{LoopCount: nframes} 此创建方式结构体成员顺序不重要。 1.4 new new(structType) new出来的是结构体指针。 1.5 特性 结构体成员相同,顺序不同不是相同结构体类型。 结构体成员以大写字母可以导出,小写的不...阅读全文

博文 2019-07-02 18:32:57 XITEHIP

Golang 优化之路——bitset

写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现。但是如果要应对大量数据,使用map占用内存大的问题就会凸显出来。内存占用高又会带来一些列的问题,这里就不展开说了。还有就是,大量数据存放于map,查找的哈希算法消耗也会很高。这时就该考虑对数据结构进行优化。之前浏览awesome-go时发现了一种叫bitset的数据结构,今天就介绍一下它。 bitset 简介 首先这是一个数据结构。从名字set不难发现,这是一个集合的数据结构。bit的含义也比较好懂,通过set是通过bit实现的。如果你需要一个集合,正好集合内的元素都是正整数,那么用这个就没错了。 Example import "github.com/willf/bitset" var b bitset...阅读全文

Go语言的程序结构

# Go语言的程序结构 # *** ## 命名规则 **Go 语言的命名规则和C语言的命令没什么不同,都是由数字,下划线,字母组成,且必须以下划线或者字母开头。大小写敏感(var a int 和 var A int是不同变量)** GO语言的关键字主要包括25个:

...阅读全文

博文 2017-08-14 14:06:16 wenxuwan

数据结构和算法(Golang实现)(27)查找算法-二叉查找树

二叉查找树 二叉查找树,又叫二叉排序树,二叉搜索树,是一种有特定规则的二叉树,定义如下: 它是一颗二叉树,或者是空树。 左子树所有节点的值都小于它的根节点,右子树所有节点的值都大于它的根节点。 左右子树也是一颗二叉查找树。 二叉查找树的特点是,一直往左儿子往下找左儿子,可以找到最小的元素,一直往右儿子找右儿子,可以找到最大的元素。 看起来,我们可以用它来实现元素排序,可是我们却使用了二叉堆来实现了堆排序,因为二叉查找树不保证是一个平衡的二叉树,最坏情况下二叉查找树会退化成一个链表,也就是所有节点都没有左子树或者没有右子树,树的层次太深导致排序性能太差。 使用二分查找,可以很快在一颗二叉查找树中找到我们需要的值。 我们来分析二叉查找树添加,删除,查找元素的方法。 一、添加元素 以下是一个二叉查...阅读全文

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

与go邂逅(二)——go当中的基本程序结构(数组 切片 map string)

前言 学习一门语言的时候,难免从最简单的程序结构学起,这些东西在掌握了一门别的开发语言的情况(如大名鼎鼎的java),就会显得如鱼得水了,下面会把我学习一些简单例子分享出来。 基本程序结构 快速为一些变量赋值 const ( NUM1 = 1 + iota NUM2 NUM3 NUM4 ) //输出结果:1,2,4,8 func TestPrint(t *testing.T) { t.Log(NUM1, NUM2, NUM3, NUM4) } 快速的实现一些数值交换 //数值交换 func TestExchange(t *testing.T) { //也可以这样定义变量:var aa int = 1 a := 1 b := 2 t.Log(a, b) //交换数值 b, a = a, b t...阅读全文

博文 2019-04-26 17:34:46 stone想静静

Go实现数据结构--线性表之顺序表

使用golang语言的interface接口类型创建顺序表 package main import "fmt" // 数据结构之线性表--顺序表 type List struct { Len int //线性表长度 Capacity int // 表容量 Prt *[]interface{} // 指向线性表空间指针 } // 初始化 func (l *List) ListInit(capacity int) { l.Capacity = capacity l.Len = 0 m := make([]interface{}, capacity) l.Prt = &m } // 判空 func (l *List) ListIsEmpty() bool { if l.Len == 0 { ret...阅读全文

博文 2020-04-09 21:32:42 阿鸠先生

go基础系列:结构struct

Go语言不是一门面向对象的语言,没有对象和继承,也没有面向对象的多态、重写相关特性。 Go所拥有的是数据结构,它可以关联方法。Go也支持简单但高效的组合(Composition),请搜索面向对象和组合。 虽然Go不支持面向对象,但Go通过定义数据结构的方式,也能实现与Class相似的功能。 一个简单的例子,定义一个Animal数据结构: type Animal struct { name string speak string } 这就像是定义了一个class,有自己的属性。 在稍后,将会介绍如何向这个数据结构中添加方法,就像为类定义方法一样。不过现在,先简单介绍下数据结构。 数据结构的定义和初始化 除了int、string等内置的数据类型,我们可以定义structure来自定义数据类型。 ...阅读全文

博文 2018-11-23 09:08:26 f-ck-need-u

golang深入源代码系列之一:AST的遍历

怎么分析golang源代码 我们拿到一个golang的工程后(通常是个微服务),怎么从词法、语法的角度来分析源代码呢?golang提供了一系列的工具供我们使用: go/scanner包提供词法分析功能,将源代码转换为一系列的token,以供go/parser使用 go/parser包提供语法分析功能,将这些token转换为AST(Abstract Syntax Tree, 抽象语法树) Scanner 任何编译器所做的第一步都是将源代码转换成token,这就是Scanner所做的事 token可以是关键字,字符串值,变量名以及函数名等等 在golang中,每个token都以它所处的位置,类型和原始字面量来表示 比如我们用如下代码扫描源代码的token: func TestScanner(t ...阅读全文

博文 2019-03-29 10:34:41 白想要起飞

数据结构和算法(Golang实现)(22)排序算法-希尔排序

希尔排序 1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机学会月刊发布了一个排序算法,从此名为希尔排序的算法诞生了。 注:ACM = Association for Computing Machinery,国际计算机学会,世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。 希尔排序是直接插入排序的改进版本。因为直接插入排序对那些几乎已经排好序的数列来说,排序效率极高,达到了O(n)的线性复杂度,但是每次只能将数据移动一位。希尔排序创造性的可以将数据移动n位,然后将n一直缩小,缩到与直接插入排序一样为1,请看下列分析...阅读全文

Learn Golang In Day 9

Learn Golang In Day 9 简介 结构体是自定义的数据结构 定义结构体 package main import "fmt" type Books struct { title string author string subject string bookid int } func main() { //创建一个结构体 fmt.Println(Books{"Golang","菜鸟教程","Go语言",6453007}) // key => value 方式赋值 fmt.Println(Books{title: "Golang112",author: "",subject: "subject 哈哈", bookid:787823}) // 字段可以省略 fmt.Println(...阅读全文

博文 2019-02-03 22:34:41 笑吧小鸟

Golang 数据结构之【4.6链栈存储】

链栈的介绍 对于链钱来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间,如 果真的发生,那时的计算机操作系统已经面临死机崩溃的情况,而不是这个栈是 否溢出的问题。 但对于空栈来说,链表原定义是头指针指向空 那么链栈的空其实就是 top=nil 的时候。 top 为栈顶指针 图片来源于《大话数据结构》 链栈的push操作 图片来源于《大话数据结构》 链栈的pop操作 图片来源于《大话数据结构》 go实现的代码如下: package main import ( "errors" "fmt" ) type SElemType int //节点数据类型 // 链栈节点结构 type LinkNode struct { data SElemType //节点数据 next *LinkNode ...阅读全文

博文 2019-05-16 14:34:48 JiBadBoy

golang生成无限树

概要 定义无限结构体.使用指针方式 List []*TreeNode,见1处代码 构建parent_id为key的map结构. 构建树的结构. 源代码 package main import ( "encoding/json" "fmt" ) // 1处 type TreeNode struct { Id int `json:"id"` PID int `json:"pid"` Name string `json:"name"` List []*TreeNode `json:"list,omitempty"` // omitempty 表示如果空的话,则忽略. } func main() { test := `[{"id":1,"pid":0,"name":"a"},{"id":2,"pid...阅读全文

博文 2020-04-09 18:32:53 百里江山

golang 系列教程(四)—— 高级数据结构

背景 golang 不像c++,已经有stl这种通用的高级数据结构。所以如果想要栈,队列,链表等数据结构需要自己实现。 下面介绍下常用的几种数据结构 链表 单链表是一种链式存取的数据结构,一个链表由一个或者多个节点组成,每个节点有一个指针指向下一个节点。 以下是一个节点为int的链表实现。 package list type List struct { Head * ListNode length int } type ListNode struct { Next *ListNode Data int } func (p *List) AddNode(data int) { if p.Head == nil { p.Head = new(ListNode) } var node = &Lis...阅读全文

博文 2019-08-18 00:04:24 叶不闻

golang 容器数据类型

container 包实现了三个复杂的数据结构:堆,链表,环(heap、list 和 ring)。当我们需要使用这些数据结构时可以直接使用而不必自己去实现一遍相关算法。 1. 堆 堆使用的数据结构是最小二叉树,即根节点比左边子树和右边子树的所有值都小。 go的堆包只是实现了一个接口,看下它的定义: type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } 可以看出,这个堆组合了 sort 包的 sort.Interface, 回顾下 sort.Interfa...阅读全文

Golang 入门系列-八怎样实现定时任务,极简版.

感谢平台分享-http://bjbsair.com/2020-04-10/tech-info/53303.html 前面讲介绍了Go 语言的基础入门及Golang的语法结构。同时也介绍Golang的接口及协程等内容。感兴趣的朋友可以先看看之前的文章。接下来说一说Golang 如何实现定时任务。 golang 实现定时服务很简单,只需要简单几步代码便可以完成,不需要配置繁琐的服务器,直接在代码中实现。 1、使用的包 github.com/robfig/cron 2、示例 1、创建最简单的最简单cron任务 package main import ( "github.com/robfig/cron" "fmt" ) func main() { i := 0 c := cron.New() spe...阅读全文

博文 2020-04-11 08:33:48 朱柿子

Go语言interface底层实现

Go的interface源码在Golang源码的runtime目录中。 Go在不同版本之间的interface结构可能会有所不同,但是,整体的结构是不会改变的,此文章用的Go版本是1.11。 Go的interface是由两种类型来实现的:iface和eface。 其中,iface表示的是包含方法的interface,例如: type Person interface { Print() } 而eface代表的是不包含方法的interface,即 type Person interface {} 或者 var person interface{} = xxxx实体 eface eface的具体结构是: 在这里插入图片描述 一共有两个属性构成,一个是类型信息_type,一个是数据信息。 其中,_...阅读全文

博文 2019-05-04 12:34:38 RyuGou

数据结构和算法(Golang实现)(25)排序算法-快速排序

快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊。 注:ACM = Association for Computing Machinery,国际计算机学会,世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。 快速排序是对冒泡排序的一种改进,也属于交换类的排序算法。 一、算法介绍 快速排序通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 步骤如下: 先从数列中取出一个...阅读全文

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

Golang 写的一个动态时间片轮转进程调度算法

现在还有一个问题,在最后一个进程运行完之后,还会再打印一次输出 package main import "fmt" type Process struct { //定义进程的数据结构 PRIORITY int CPUTIME int ALLTIME int STATE string } func main() { PR := map[int]*Process{ //初始进程 0: &Process{ PRIORITY: 9, CPUTIME: 0, ALLTIME: 3, STATE: "ready", }, 1: &Process{ PRIORITY: 38, CPUTIME: 0, ALLTIME: 2, STATE: "ready", }, 2: &Process{ PRIORITY:...阅读全文

博文 2020-04-12 06:32:41 一位路过的假面骑士丶

[golang] 数据结构-简单选择排序

理简单选择排序应该是最直观最容易理解的排序方法了。直接从头开始一个一个去比,找出最小的放到最左边。再依次完成其他位的排序。 时间复杂度比较次数固定为O(n^2),数据交换次数是0~n-1次因为会交换不同位置相同数值的数据,所以选择排序并不稳定 代码实现 package main import ( "fmt" ) func main() { var length = 10 var mm = make(map[int]int, length) var o []int // 先准备一个顺序随机的数(qie)组(pian) for i := 0; i < length; i++ { mm[i] = i } for k, _ := range mm { o = append(o, k) } fmt.P...阅读全文

博文 2018-07-10 00:35:40 NicoChen

敏感词匹配

今日去被大佬问到如何实现一个敏感词的匹配,所以写了一个简版的敏感词匹配结构,还待后期优化! **注:暂时不可以投放到生产环境使用** **有喜欢的可以提交代码给我,或者拿走自己维护** 希望各位大佬指点 谢谢~, 关键词为网上找到的所以不是很全,望大家海涵~谢谢! 源码地址:https://github.com/tianye/sensitive_words 源码实现方式: ``` package decision import ( "fmt" "strings" ) type Node struct { Word string Node [] *Node Location int IsSensitive bool } type Tree struct { TreeNode [] *Node ...阅读全文

break default func interface select
case defer go map