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

基于比原链开发Dapp(四)-bufferserver源码分析

简介 ​ 本章内容主要直接分析bufferserver源码,也就是比原链官方Dapp-demo的后端接口,里面包含了UTXO的托管逻辑、账单逻辑等,还会介绍一些改进的源码内容。 储蓄分红合约后端bufferserver源码 本次源码分析主要根据bufferserver,2019年5月13号的版本,到此3个月没有更新了。 源码分析 ​ 我们来看看bufferserver的源码,项目是用golang语言开发的web服务端,内容比较简单也就几个接口。先看看源码的结构: img 所有的golang项目首先都要看一下main.go,但是本项目有两个,因为一个是负责web的http接口的,另外一个是负责后端同步数据的。 先看看表结构,dump.sql ##基础配置表 CREATE TABLE `base...阅读全文

博文 2019-08-23 04:32:50 速易证

golang-nsq系列(三)--nsqlookupd源码解析

上一篇 介绍了 nsqd 的代码逻辑与流程图,本篇来解析 nsq 中另一大模块 nsqlookupd,其负责维护 nsqd 节点的拓扑结构信息,实现了去中心化的服务注册与发现。 1. nsqlookupd 执行入口 在 nsq/apps/nsqlookupd/main.go 可以找到执行入口文件,如下: main.png 2. nsqlookupd 执行主逻辑 主要流程与上一篇讲的 nsqd 执行逻辑相似,区别是运行的具体任务不同。 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqlookupd 实例; func main() { prg := &program{} if err := svc.R...阅读全文

leetcode_887

Golang: 思路:这题给跪了。。。 代码如下: func superEggDrop(K int, N int) int { if K==1{ return N } mat:=make([][]int,K+1) for k,_:=range mat{ mat[k]=make([]int,N+1) } for k,_:=range mat[1]{ mat[1][k]=k } for i:=2;i<=K;i++{ for j:=1;j<=N;j++{ low,high:=1,j for low+1mat[i][j...阅读全文

博文 2020-04-11 13:32:43 淳属虚构

golang-nsq系列(二)--nsqd源码解析

上一篇初识了 nsq 三个模块(nsqd, nsqlookupd, nsqadmin)的 demo演示,本篇则从源码开始,一步一步去解析 nsqd 的执行流程和逻辑处理,学习别人优秀的项目架构,以期学以致用。 1. nsqd 执行入口 在 nsq/apps/nsqd/main.go 可以找到执行入口文件,如下: nsqd-path 2. nsqd 执行主逻辑源码 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqd 实例; func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); ...阅读全文

博文 2019-10-29 14:32:48 aside section._1OhGeD

常见的排序算法-1.冒泡排序算法

冒泡排序(Bubble Sort) 冒泡排序也叫做起泡排序 执行流程 1 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置 ✓ 执行完一轮后,最末尾那个元素就是最大的元素 2 忽略 1 中曾经找到的最大元素,重复执行步骤 1,直到全部元素有序 //最坏、平均时间复杂度:O(n2) 最好时间复杂度:O(n) //空间复杂度:O(1) for end := len(this.Array) - 1; end > 0; end-- { for begin := 1; begin <= end; begin++ { if this.ComWithIndex(begin, begin-1) < 0 { this.Swap(begin, begin-1) } } } 冒泡排序 – 优化1...阅读全文

博文 2020-04-20 15:38:59 SteveKwok

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻辑、亮点小结等方面进行解析,以期对 NSQ 有较为深入的理解。 2. 主流 MQ 比较 目前主流的 MQ 有 Kafka, RabbitMQ, NSQ, RocketMQ, ActiveMQ,它们的对比...阅读全文

博文 2019-12-12 00:32:40 热爱coding的稻草

golang源码学习之sync.pool

源码目录 ///sync.pool.go (1.1.4.1) 前言 sync.pool对象池是个好东西,避免对象的反复创建和回收。对于一些需要频繁创建的对象我们可以使用它来避免内存的频繁申请、回收。但应避免用于连接池,因为sync.pool存储的对象仅存活在三次STW之间。 数据结构 //sync.pool.go type Pool struct { noCopy noCopy // 不可复制标准 local unsafe.Pointer // 指向poolLocal数组 localSize uintptr // poolLocal数组长度 victim unsafe.Pointer // 指向poolLocal数组 victimSize uintptr // poolLocal数组长度 N...阅读全文

博文 2020-04-06 21:32:56 ihornet

leetcode_695

Golang: 思路:每日一题之BFS,岛屿的最大面积,DFS和BFS都可以做,我用了BFS和栈。 代码如下: func maxAreaOfIsland(grid [][]int) int { res:=0 if len(grid)==0{ return res } for i:=0;i阅读全文

博文 2020-03-15 15:32:43 淳属虚构

leetcode_23

Golang: 思路:晚上的效率很低,写代码的感觉也差到了极点。。。 代码如下: func mergeKLists(lists []*ListNode) *ListNode { length:=len(lists) if length==0{ return nil } for length!=1{ for i:=0;i阅读全文

博文 2020-03-16 09:32:47 淳属虚构

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 runtime.deferproc,当被执行时,延迟调用会被保存为一个 _defer 记录,并将被延迟调用的入口地址及其参数复制保存,存入 Goroutine 的调用链表中。 在函数返回之前的位置插入 r...阅读全文

博文 2020-03-01 15:32:41 张凯强_zkqiang

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 runtime.deferproc,当被执行时,延迟调用会被保存为一个 _defer 记录,并将被延迟调用的入口地址及其参数复制保存,存入 Goroutine 的调用链表中。 在函数返回之前的位置插入 r...阅读全文

博文 2020-03-01 14:34:39 张凯强zkqiang

leetcode_807

Golang: 思路:其实就是找到每行每列的最大值,根据这些最大值来为数组里的元素增加值 代码如下: func maxIncreaseKeepingSkyline(grid [][]int) int { res:=0 maxR:=make([]int,len(grid)) maxC:=make([]int,len(grid[0])) for i:=0;imaxR[i]{ maxR[i]=grid[i][j] } if grid[i][j]>maxC[j]{ maxC[j]=grid[i][j] } } } for i:=0;i阅读全文

博文 2020-04-14 13:32:46 淳属虚构

leetcode_890

Golang: 思路:双map映射即可,但这里错了一次,惭愧 代码如下: func findAndReplacePattern(words []string, pattern string) []string { var res []string for _,v:=range words{ flag:=0 mp1:=make(map[byte]byte) mp2:=make(map[byte]byte) for i:=0;i阅读全文

博文 2020-04-13 11:32:45 淳属虚构

leetcode_542

Golang: 思路:多源BFS 代码如下: func updateMatrix(matrix [][]int) [][]int { res:=make([][]int,len(matrix)) for k,_:=range res{ res[k]=make([]int,len(matrix[0])) copy(res[k],matrix[k]) } var stack [][]int for i:=0;i阅读全文

博文 2020-04-15 09:32:45 淳属虚构

探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配 在 Golang 1.13 之前的版本中,所有 defer 都是在堆上分配,该机制在编译时会进行两个步骤: 在 defer 语句的位置插入 runtime.deferproc,当被执行时,延迟调用会被保存为一个 _defer 记录,并将被延迟调用的入口地址及其参数复制保存,存入 Goroutine 的调用链表中。 在函数返回之前的位置插入 r...阅读全文

博文 2020-03-01 14:32:38 张凯强

leetcode_72

Golang: 思路:编辑问题算是DP中很经典的问题了 代码如下: func minDistance(word1 string, word2 string) int { if len(word1)==0||len(word2)==0{ return max(len(word1),len(word2)) } arr:=make([][]int,len(word1)+1) for k,_:=range arr{ arr[k]=make([]int,len(word2)+1) } for i:=0;i阅读全文

博文 2020-04-06 11:32:44 淳属虚构

leetcode_692

Golang: 思路:topK问题,这题使用了堆 代码如下: type NodeW struct { word string fre int } func topKFrequent2(words []string, k int) []string { mp:=make(map[string]int) for _,v:=range words{ mp[v]++ } var nodes []*NodeW for k,v:=range mp{ node:=NodeW{ word:k, fre:v, } nodes=append(nodes,&node) } buildMinHeapK(nodes[:k]) for i:=k;inod...阅读全文

博文 2020-04-07 15:32:48 淳属虚构

leetcode_623

Golang: 思路:还是通过层序遍历的方式来实现 代码如下: func addOneRow(root *TreeNode, v int, d int) *TreeNode { if d==1{ return &TreeNode{Left:root,Val:v} } if root!=nil{ stack:=[]*TreeNode{root} depth:=1 for depth阅读全文

博文 2020-04-02 09:32:58 淳属虚构