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

Golang实现snowflake算法(分布式唯一id生成器)

package main import ( "errors" "fmt" "sync" "time" ) const ( twepoch = int64(1417937700000) // 默认起始的时间戳 1449473700000 。计算时,减去这个值 DistrictIdBits = uint(5) //区域 所占用位置 NodeIdBits = uint(9) //节点 所占位置 sequenceBits = uint(10) //自增ID 所占用位置 /* * 1 符号位 | 39 时间戳 | 5 区域 | 9 节点 | 10 (毫秒内)自增ID * 0 | 0000000 00000000 00000000 00000000 00000000 | 00000 | 000000 0...阅读全文

博文 2017-04-25 07:00:25 路人甲777

通用链式栈代码

```go import "errors" var ( // ErrEmpty 栈为空 ErrEmpty = errors.New("stack is empty") ) // StackNode 栈节点 type StackNode struct { el interface{} next *StackNode } // LinkStack 栈空间 type LinkStack struct { top *StackNode count int } // Push 入栈 func (l *LinkStack) Push(el interface{}) (err error) { s := StackNode{el: el, next: l.top} l.top = &s l.count++...阅读全文

博文 2019-07-16 10:09:59 daymenu

golang xml marshal对应的struct两种表示方法

1.xml的节点名字就是struct成员的名字,如:Project.ItemGroup,成员的类型名不影响 //vcxproj.filters type Project struct { ToolsVersion string `xml:"ToolsVersion,attr"` Xmlns string `xml:"xmlns,attr"` ItemGroup []FilterGroup //`xml:"ItemGroup"` } type FilterGroup struct { Filter []Filter //`xml:"Filter"` } type Filter struct { Include string `xml:"Include,attr"` UniqueIdentifi...阅读全文

博文 2015-06-18 19:00:32 varding

golang实现单链表

package main import ( "sync" "fmt" ) func main() { node := Instance() node.Name = "张三" node1 := &Node{Name: "李四"} node2 := &Node{Name: "赵武"} node3 := &Node{Name: "李刘"} InsertNode(node, node1) InsertNode(node, node2) InsertNode(node, node3) ListNode(node) } type Node struct { Name string NodePtr *Node } var node *Node var once sync.Once func Instanc...阅读全文

博文 2019-07-11 11:32:42 清晨的麦田

golang 无限级树状结构

package main import( //"encoding/json" "encoding/json" "fmt" ) type Datanode struct { Id int `json:"id"` PId int `json:"pid"` Name string `json:"name"` Child []*Datanode `json:"child"` } var Jsondata []byte //存储json数据 func main(){ Data := make([]Datanode, 0) //存储所有初始化struct var a Datanode a.Id = 0 a.PId = -1 a.Name = "目录" Data = append(Data,a) a.Id...阅读全文

博文 2019-07-05 19:32:39 努力的夏目_1bbc

go 语言学习笔计之结构体

go 语言中的结构体方法 结构体名称的大小写有着不同的意义: 小写表示不能被别的包访问 package main import "fmt" type Rect struct { width,height int } func (r *Rect) area() int { return r.width*r.height; } func main() { r:=Rect{width:10,height:10} fmt.Println(r.area()); rp:=&r; fmt.Println(rp.area()); } 使用结构体来解析xml 首先我们看xml的格式,对于属性(attr)和节点使用是不一样的, 具体的使用方式如下 阅读全文

博文 2015-07-11 03:00:02 witwave

二叉搜索树实现 in Go语言

用Go实现了下二叉搜索树,还是花了不少时间,在实现中使用的是单向链表,这才算是体会到了双向链表在实现中的优势 package datastructure import ( "container/list" "fmt" ) type BSTree struct { root *Node } type Node struct { left *Node right *Node value int } // NewBSTree 创建树 func NewBSTree() *BSTree { return &BSTree{} } func (t *BSTree) Insert(value int) { var parent *Node z := &Node{value: value} x := t.ro...阅读全文

博文 2016-04-19 10:00:05 u013564276

Golang mgo驱动指定Mongo服务器读取

Replica Sets搭建 服务器采用Replica Sets搭建,可参考Deploy a Replica Set 读模式 Mongod的读模式共有五种: primary. 在主节点上进行所有的读操作 primaryPreferred. 优先在主节点上进行读操作,如果主节点不可用,再从从节点操作。 secondary.所有的读操作在从节点上进行。 secondaryPreferred.优先在从节点进行读操作,如果所有从节点都不可用,再从主节点操作。 nearest. 根据网络延迟时间 ,就近进行读操作,不考虑节点类型。 配置节点Tags Sets Tag sets 允许指定一个replica set进行读操作,其中Mongod的读模式必须是以下四种之一:primaryPreferred、s...阅读全文

博文 2017-02-09 13:31:22 icattlecoder

go beego模板嵌套list

{{range $k,$v :=.Names}} {{end}} 节点 名称 执行体 描述 状态 操作 {{.Name}} {{range $k1,$v1 :=$.List}}{{if eq $v.Name $v1.Node}} {{end}}{{end}} {{.Name}} {{.Exe}} {{.Desc}} {{.State}} 运行|停止 {{range .Categoryjieduan}} {{.Id}} {{.Title}} {{.Views}} {{range $.Categoryzhuanye}} {{.Title}} {{range $.Categorychengguo}} {{.Title}} {{end}} {{end}} {{end}...阅读全文

博文 2016-10-28 14:00:02 MR1269427885

golang实现二叉查找树

为简单起见,键值均为整型。 定义接口(tree.go): type Tree interface { Put(k, v int) //新增或修改 Get(k int) int //查询 Delete(k int) //删除 Size() int //树的大小 Min() int //最小键 DeleteMin() //删除最小键 } 二叉查找树(binary_tree.go): //二叉查找树 type BinaryTree struct { root *node n int } //创建节点 func newNode(k, v int) *node { return &node{k: k, v: v, sz: 1} } //创建二叉查找树 func NewBinaryTree() *Bin...阅读全文

博文 2017-09-03 07:05:00 imroc

Union-Find(golang实现)

quick-find、quick-union、加权quick-union(附带路径压缩优化) 本算法主要解决动态连通性一类问题,这里尽量用精炼简洁的话来阐述。 数据结构描述: 有N个节点(索引0~N-1),可以查询节点数量 可以连接两个节点 可以查询两个节点是否连通 算法大致设计思路: 每个节点初始化为不同的整数标记 通过一个辅助函数查询某个节点的标记值 如果两节点标记相同,说明两节点是连通的 用一个包专门处理union-find算法(unionfind) 定义接口和基类(union_find.go): package unionfind //union-find的quick-find实现版 type QuickFind struct { BaseUnionFind } func (qf *...阅读全文

博文 2017-09-03 06:34:50 imroc

兄弟连Go语言培训区块链共识算法(1)分布式一致性算法Raft

兄弟连Go语言培训培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 # 分布式一致性算法Raft Paxos自1990年提出以后,相当长时间内几乎已成为分布式一致性算法的代名词。 但因其难以理解和实现,目前知名实现仅有Chubby、Zookeeper、libpaxos几种,其中Zookeeper使用的ZAB对Paxos做了大量改进。 为此,2013年斯坦福的Diego Ongaro、John Ousterhout,提出了新的更易理解和实现的一致性算法,即Raft。 Raft和Paxos均只要保证n/2+1节点正常,即可服务。相比Pa...阅读全文

博文 2018-07-31 08:40:55 XDLGo

数据结构之栈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

golang 实现查看遍历zk节点

package main import ( "fmt" "github.com/samuel/go-zookeeper/zk" "time" ) func ZkStateString(s *zk.Stat) string { return fmt.Sprintf("Czxid:%d, Mzxid: %d, Ctime: %d, Mtime: %d, Version: %d, Cversion: %d, Aversion: %d, EphemeralOwner: %d, DataLength: %d, NumChildren: %d, Pzxid: %d", func ZKOperateTest() { fmt.Printf("ZKOperateTest\n") var hosts = []s...阅读全文

博文 2020-04-21 17:35:14 dwade06

小白求教,获取中国天气网天气的一个节点gojquery

package main import ( "fmt" "github.com/PuerkitoBio/goquery" ) func ExampleScrape() { doc, err := goquery.NewDocument("http://www.weather.com.cn/weather1d/101180101.shtml") if err != nil { fmt.Errorf("when create from reader error %s ", err.Error()) } // Find the review items dic := doc.Selection.Find("div.t").Html() f...阅读全文

[leetcode in golang]21、合并两个有序链表

链表分为带哨兵节点和不带哨兵节点。 加入哨兵节点有四个使用场景: 1、创建链表,需要考虑链表为空的情况。 2、遍历链表。 3、特定位置删除/插入节点,判断链表是否为空并且进行操作的节点的前一个节点的状态。 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { if l1==nil{ return l2 } if l2==nil{ return l1 } if l1.Val<=l2.Val{ l1.Next=mergeTwoLists...阅读全文

博文 2019-08-28 11:32:54 反骨奇兵

golang中用链表实现栈

node通过prev字段进行关联,stack维护栈顶节点 stack.go package stack type Stack struct { top *node length int } type node struct { value interface{} prev *node } // 创建一个栈 func New() *Stack { return &Stack{nil, 0} } // 取栈长度 func (s *Stack) Len() int { return s.length } // 查看栈顶元素 func (s *Stack) Peek() interface{} { if s.length == 0 { return nil } return s.top.value ...阅读全文

博文 2019-07-12 20:33:39 ustb80

根据输入构建完全二叉树, 并找出根到节点和为给定值的所有路径

package main import ( "fmt" "strings" "strconv" ) type Node struct { Data int Left *Node Right *Node High int } func main() { // 根据输入构建完全二叉树, 并找出根到节点和为给定值的所有路径 // 输入 // 22 // 10,5,12,4,7 // 输出 // 10,5,7 // 10,12 // // 使用栈对树进行深度优先遍历,利用树高更方便寻找判断路径 paths, err := findPath(22, "10,5,12,4,7") fmt.Println(paths, err) } // 查找路径 func findPath(sum int, nodeV...阅读全文

自己动手用golang实现双向链表

双向链表主要有链表跟节点2个结构体type Dnode struct { data interface{} prev *Dnode next *Dnode } type DList struct { head *Dnode tail *Dnode size int }特点:1、除头部、尾部2个节点外,其他任意节点都通过prev / next 分别指向前置后置节点2、头部节点前置节点为空,同理尾部节点后置节点为空主要实现的API如下:1、查询查询链表长度查询任意节点2、添加从开头插入节点从尾部插入节点从任意位置插入节点3、删除删除任意节点4、其他打印链表初始化链表具体实现如下:package main import "fmt" type Dnode struct { data interfac...阅读全文

博文 2019-12-16 02:33:41 筑梦攻城狮

go实现双向链表并使用iterater遍历

package main import ( "strings" "strconv" "fmt" ) /** 双向链表 */ type DoubleLinkedList struct { //链表头节点 head *Node //链表尾部节点 tail *Node //长度 size int } /** 遍历器接口 */ type Interater interface{ /** 是否还有下一个 */ hasNext() bool /** 下一个节点 */ next() *Node } /** 遍历器 */ type ListInterater struct { list *DoubleLinkedList currentNode *Node } /** 遍历器是否还有下一个节点 */ fun...阅读全文

博文 2019-12-17 11:33:14 wx5df0ffef01962

聊聊区块链

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 在聊区块链(Blockchain)之前,我先推荐两本书,《区块链 从数字货币到信用社会》、《区块链 技术驱动金融》。 前一本是属于概念普及型,适合概览的去了解区块链,从区块链的基础到智能合约、以及应用都全面的进行了介绍,通俗易懂。后面一本就稍微深入一些,讲解了基本技术原理、算法、生态,但读起来也没有什么门槛。建议两本结合起来读,会对区块链理解的更为深刻一些。这两本书我都读过,所以这篇文章也算是一个读书心得。 区块链技术的产生和发展是离不开比特币的。因为比特币的诞生,区块链才得以公布于众,而且到目前为止,比特币还是区块链技术最成功的应用。但需要注意的一点是,比特币里的区块链是为比特币体系所定制的,所以比特币的区块链...阅读全文

博文 2019-09-23 16:32:49 链客

【Golang 基础】Go 语言 面向对象

Go 语言的面向对象   Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。   因此 Go 语言中没有 class,而是通过 struct(结构体) 对相同类型或不同类型的数据进行封装。 通过 type struct {} 格式定义结构体; type User struct { Name string Age int IsActive bool } 定义后的结构体就可以作为类型使用; hvkcoder := User{Name: "hvkcoder", Age: 18, IsActive: true} fmt.Println(hvkcoder) // {hvkcoder 18 true} 或 hvkcoder := User{...阅读全文

博文 2019-03-30 02:34:40 爱写作的程序猿

golang堆排序

package main import "fmt" func main() {arr := []int{6, 1, 2, 7, 9, 3, 4, 5, 10, 8}heapSort(arr)fmt.Println("---")fmt.Println(arr)} //堆排序func heapSort(arr []int) {//求数组长度//根据堆的规律,假设子节点的规律,假设子节点的坐标为i//左子节点坐标为2i+1,右子节点坐标为2i+2//父节点的坐标为(i-1)/2. 此处可以计算无论最后一位数字在做左子节点,还是右子节点。父节点的坐标一定是(i-1)/2。 golang中/取整//假设切片长度是len(arr),那么最后一位的坐标序号为len(arr)-1,可计算出父节点的位置为(l...阅读全文

博文 2020-03-25 01:33:44 moakia

自己动手用golang实现单向链表

单向链表特点:1、Head 节点 上一个节点为空2、Tail 节点下一个节点为空3、除Tail节点外,每个节点连接到下一个节点package main import ( "fmt" ) type LinkNode struct { Data interface{} Next *LinkNode } type SingleLink struct { head *LinkNode tail *LinkNode size int } // 初始化链表 func InitSingleLink()(*SingleLink){ return &SingleLink{ head:nil, tail:nil, size:0, } } // 获取头部节点 func (sl *SingleLink)GetHea...阅读全文

博文 2019-12-28 15:33:41 筑梦攻城狮

Golang解LeetCode 617. 合并二叉树

617. 合并二叉树 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 输入: Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 输出: 合并后的树: 3 / 4 5 / \ \ 5 4 7 注意: 合并必须从两个树的根节点开始。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-binary-trees 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请...阅读全文

博文 2019-12-11 06:32:43 肥肥的大肥鹅

leetcode_993

Golang: 思路:BFS做层次搜索 代码如下: func isCousins(root *TreeNode, x int, y int) bool { //表示x,y节点的父节点 var pars []int if root!=nil{ queue:=[]*TreeNode{root} //标记位,当出现x,y值时增加1 for len(queue)!=0{ flag:=0 level:=len(queue) for i:=0;i阅读全文

博文 2020-04-20 15:38:58 淳属虚构