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

golang源码学习之math/rand

本文不对具体的实现作分析,而是为了解决下面两个问题。 相同种子,为什么每次运行的结果一样? 不同的种子, 为什么每次运行的结果有可能一样? 从下面两句代码开始分析吧 rand.Seed(10) rand.Int() // math/rand/rand.go func Seed(seed int64) { globalRand.Seed(seed) } // globalRand 全局变量 var globalRand = New(&lockedSource{src: NewSource(1).(Source64)}) func NewSource(seed int64) Source { var rng rngSource //最终Seed的是 rngSource rng.Seed(seed...阅读全文

博文 2019-07-24 19:32:38 ihornet

Go 实现 自动检索 API 错误码代码行 并 打印成文档,例 markDown 形式等

#### 源码--GitHub:< ahref="https://github.com/af913337456/ErrorDocAutoPrinter">https://github.com/af913337456/ErrorDocAutoPrinter 如果你是一个`后端Server程序`开发人员。你应该知道,在你写完`API`之后,是需要给`客户端`的同学提供`调用`文档的。 例如下面一个`api handler`,`创建一个用户`。 ```golang func HandleCreateUser(w http.ResponseWriter,r *http.Request) map[string]interface{} { if r.Body ==...阅读全文

golang的goroutine是如何实现的?

在了解Go的运行时的scheduler之前,需要先了解为什么需要它,因为我们可能会想,OS内核不是已经有一个线程scheduler了嘛? 熟悉POSIX API的人都知道,POSIX的方案在很大程度上是对Unix process进场模型的一个逻辑描述和扩展,两者有很多相似的地方。 Thread有自己的信号掩码,CPU affinity等。但是很多特征对于Go程序来说都是累赘。 尤其是context上下文切换的耗时。另一个原因是Go的垃圾回收需要所有的goroutine停止,使得内存在一个一致的状态。垃圾回收的时间点是不确定的,如果依靠OS自身的scheduler来调度,那么会有大量的线程需要停止工作。 单独的开发一个GO得调度器,可以是其知道在什么时候内存状态是一致的,也就是说,当开始垃圾回...阅读全文

博文 2016-10-03 03:00:05 tqyin

跟着gRPC源码简单学习RPC原理

RPC(Remote Procedure Call/远程过程调用)是一种服务间交互的方式,达到像本地方法一样调用远程方法的目的。 看看源码,简单了解gRPC是怎么实现RPC的,以gRPC官方代码示例helloworld为例。 服务注册 先看一下服务端怎么注册服务。 在helloworld.pb.go文件中,会有RegisterGreeterServer方法以及_Greeter_serviceDesc变量,_Greeter_serviceDesc描述了服务的属性。RegisterGreeterServer方法会向gRPC服务端s注册服务srv。 //... func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) { s.Reg...阅读全文

博文 2020-01-21 22:32:40 onequid

验证码绕过漏洞

验证码绕过漏洞 什么是验证码绕过漏洞?比如说,开发人员在考虑用户登录的时候,为了安全添加了验证码验证,但是在代码层面他只做了if(存在验证码){验证登录}存在验证码的时候,允许登录验证,但是没有考虑到验证码不存在的情况。If(存在验证码){}else{不存在验证码}这样我们通过抓包删除验证码的参数,就可以绕过验证,这就是常出现的逻辑漏洞。验证码绕过的方向:1. 通过验证码的逻辑进行入手2. 通过Python,Golang等程序自动识别验证码绕过存在的情况:1. 前端验证验证码并没有进行后端验证。直接抓包进行跑数据包,反正没有验证码的阻碍。2. 验证码设置了,但是没有校验,乱输验证码也能验证成功。(估计老板没给开发发工资吧)3.验证码可以重复使用,比如现在的验证码是1111,虽然登陆失败后但是...阅读全文

博文 2020-04-09 18:32:54 RainClv

源码分析context的超时及关闭实现

前言: Golang的context的作用就不多说了,就是用来管理调用上下文的,控制一个请求的生命周期。golang的context库里有四个组件。 withCancel用来控制取消事件,withDeadline和withTimeout是控制超时,withValue可以传递一些key value。 // xiaorui.cc func WithCancel(parent Context) (ctx Context, cancel CancelFunc) func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) func WithTimeout(parent Context, timeout time...阅读全文

博文 2019-06-11 20:39:57 rfyiamcool

go源码解析-Println的故事

本文主要通过平常常用的go的一个函数,深入源码,了解其底层到底是如何实现的。 Println Println函数接受参数a,其类型为…interface{}。用过Java的对这个应该比较熟悉,Java中也有…的用法。其作用是传入可变的参数,而interface{}类似于Java中的Object,代表任何类型。 所以,…interface{}转换成Java的概念,就是Object args ...。 Println函数中没有什么实现,只是return了Fprintln函数。 func Println(a ...interface{}) (n int, err error) { return Fprintln(os.Stdout, a...) } 而在此处的…放在了参数的后面。我们知道...in...阅读全文

博文 2019-06-14 15:02:41 detectiveHLH

Go语言入门【五】:源码学习-bufio

介绍 package bufio也是io的一部分,但在不同包中,因此独立一节。其中包含bufio.go,scan.go两部分。 bufio bufio的作用是为一个已有的Reader或者Writer提供缓冲,我们知道操作系统的io是资源瓶颈,应该尽可能少的调用io操作,所以把大批量的数据一起读取或写入是更好的选择。使用方法: w := bufio.NewWriter(os.Stdout) fmt.Fprint(w, "Hello, ") fmt.Fprint(w, "world!") w.Flush() // Don't forget to flush! // Output: Hello, world! 源码中对Reader和Writer做了一个简单封装,bufio.Reader为例: //...阅读全文

博文 2017-03-05 19:37:13 知米丶无忌

源码分析nats request reply的设计实现

前言: Golang nats mq是一个基于golang实现的高性能消息队列,nats也被cncf纳入到云原生计算基金会。据我所知,nats mq貌似在gopher里很有名气,但别的语言系的朋友不关注这个。 我用nats也有段时间了,你问我这个nats好用否? 我只能说比我以前用的go nsq性能高且可用性强,加入stream后,可信赖数据可靠性。如果再详细的介绍,大家就看nats的官网文档吧。 该文章后续仍在不断的更新修改中, 请移步到原文地址 http://xiaorui.cc/?p=5642 我们的nats应用场景 先说下我们的应用场景,我们除了用传统意义上的mq功能外,就会借助nats来实现消息总线。这里的消息总线模式更像是微服务的另一种模型。常见的微服务模式是服务提供者把自己的信...阅读全文

博文 2020-02-26 17:03:39 rfyiamcool

Golang学习基础命令

链客,专为开发者而生,有问必答!此文章来自https://www.liankexing.com/notetwo/8144,未经允许,拒绝转载Golang学习-基础命令一、go run 用于运行命令源码文件,只能接收一个命令源码文件以及若干个库源码文件作为参数。先将源码文件编译成临时文件,然后再运行这个临时文件,临时文件可能包括可执行文件和归档文件。这些临时文件如果不做命令标记,会在被运行后被删除。下面是go run命令常用的标记:–a : 强制编译相关代码文件,无论代码文件是否有更新 –n : 打印编译过程中所需要的命令,但是不执行它 –p N : 并行编译,其中N为CPU逻辑个数 –v : 列出被编译的代码包名称 –work : 显示编译时创建的临时工作目录,注意这些目录并不会删除 –x ...阅读全文

博文 2019-05-10 13:35:05 链客区块链技术问答社区

http 服务源码分析

多读go的源码,可以加深对go语言的理解和认知,今天分享一下http相关的源码部分 在不使用第三方库的情况下,我们可以很容易的的用go实现一个http服务, ``` package main import ( "fmt" "net/http" ) func IndexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "hello world ! ") } func main() { http.HandleFunc("/", IndexHandler) if err := http.ListenAndServe(":9100", nil); err != nil { panic(err) } } ``` 直接在浏...阅读全文

博文 2019-05-13 13:47:28 lpxxn

Golang 日期/时间包的使用

golang 的日期时间包:time 的使用方式。 time package 包含了 time.Time 时间对象 及 构建此时间对象的一些方法(time.Unix(), time.Parse()) golang 可精确到 nanosecond,故相应的函数返回值或参数都已纳秒为单位,我们可以借助time.ParseDuration(durationString string)友好的生成纳秒度量的时间跨度值 golang 的时间格式串Layout固定为 2006-01-02 15:04:05 golang 默认使用 Local 即本地时区,可以通过 time.LoadLocation(zoneName string) (*Location, error)来设定时区 时区构建/格式化模式串 /...阅读全文

博文 2019-03-12 14:34:42 big_cat

go源码解析-Println的故事

本文主要通过平常常用的go的一个函数,深入源码,了解其底层到底是如何实现的。 Println Println函数接受参数a,其类型为…interface{}。用过Java的对这个应该比较熟悉,Java中也有…的用法。其作用是传入可变的参数,而interface{}类似于Java中的Object,代表任何类型。 所以,…interface{}转换成Java的概念,就是Object args ...。 Println函数中没有什么实现,只是return了Fprintln函数。 func Println(a ...interface{}) (n int, err error) { return Fprintln(os.Stdout, a...) } 复制代码而在此处的…放在了参数的后面。我们知道....阅读全文

博文 2019-06-14 15:04:23 detectiveHLH

Go Gin源码学习(二)

### 开场 上一篇学习了Gin框架的总体流程,但是自己查看源代码中被许多的零散小功能影响了主体流程的研究。所以觉得可以模仿Gin框架,自己写一个最简单仅仅含有主流程的demo。可以让我们更加深入了解Gin自己也可以再模仿的过程中更加了解源码。 ### 功能 这个demo是我自己对Gin初步理解之后模仿写的,其中只包含主要功能 - 创建路由 - 新建group - 添加中间件 - 启动http服务,接受客户端请求并返回简单数据 **Demo中的路由兵没有使用Gin的tree只是简单的使用了map来实现,基数树是一个相对独立逻辑准备之后单独再学习** ### 代码 ``` package mygin import ( "fmt" "net/http" "path" "sync" ) //上下文...阅读全文

博文 2019-05-08 16:19:35 panlei914

GoLang实现google authenticator的CLI工具

两步认证在很多验证中都要使用。如果在手机客户端上,如果使用电脑,每次都要拿出手机,手动输入。还要担心会过时。效率不是很高。 我现在的处理方式以下方式: MAC上alfred workflow支持 Chrom扩展支持 手机客户端 CLI记录工具 今天主要介绍CLI工具,我现在在golang,找一些练手的项目. 先上代码 package main import ( "fmt" "os" "log" "sort" "github.com/urfave/cli" "gopkg.in/ini.v1" "crypto/hmac" "crypto/sha1" "strings" "encoding/base32" "time" "github.com/atotto/clipboard" "strconv"...阅读全文

博文 2018-08-01 15:34:52 若与

groupchace 源码系列一 consistent hash一致性哈希算法

参考 groupcache源码解析-概览 consistent hash(一致性哈希算法) Memcached大家应该都不陌生,官网的介绍是:Free & open source, high-performance, distributed memory object caching system(免费,开源,高性能的分布式内存对象缓存系统)。很多公司的产品都用到了Memcached,不过Memcached是用C语言开发的,我们的目的是提升Golang技能,所以这里我找了Golang版本的Memcached:groupcache来分析。 github地址:https://github.com/golang/groupcache github上对groupcahe的介绍是:groupcache...阅读全文

博文 2019-03-14 01:34:39 懒皮

Go Jwt使用和源码学习

Jwt概念 JWT(JSON Web Token)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT由3个部分组成:头部(header)、载荷(payload)、签名(signature)。这三个部分又是由一个分隔符“.” 分割开的。 header 用户说明签名的加密算法等,大概如下: { "typ": "JWT", "alg": "HS256"} payload payload 结构是一个json或者说是map对象目前有一个相对标准的payload格式 sub: 该JWT所面向的用户 iss: 该JWT的签发者 iat(issued at): 在什么时候签发的token exp(expires): token什么时候过期 nbf(not bef...阅读全文

博文 2019-05-17 16:34:40 大二小的宝

GO语言学习笔记(二)IDE安装与配置、格式化代码、生成代码文档

一、安装goland IDE1、goland IDE的下载 下载地址:(我这里是下载的mac版,因为我的是mac本)https://download-cf.jetbrains.com/go/goland-2018.3.3.dmg 2、goland IDE的安装临时激活,有效期只有100天1)一路下一步 在这个页面,选择第二项“Activation code”激活2)登录下面的网址http://idea.lanyus.com/点击:获取注册码把获取到的注册码复制粘贴到“Activation code”下面3)点OK前将“0.0.0.0 account.jetbrains.com”添加到hosts文件中然后点ok即可完成注册。但是这样的注册,有效期只有几个月。 永久性激活,有效期到哪你随便写:1...阅读全文

博文 2019-01-25 00:35:12 Mr大表哥

????桥梁模式-Bridge

源码地址:https://github.com/mumushuiding/golang-design-pattern/tree/master/02_Bridge????桥梁模式-Bridge????桥梁模式的目的就是要实现抽象定义和它的实现部分可以互不依赖,单独开发✂️抽象定义和实现的部分相互分隔,各自只在自己的类的层次结构中.⚡️类图抽象定义和它的实现之间的关系称作 ????桥梁,它在二者之间建立连接​ ????参与者桥梁模式的参与者如下:???? Client (客户).???? AbstractDef (抽象定义). 类 AbstractDef 定义了客户可以使用的 ????接口,含有指向由自己规定的接口的IImplementer的引用.SpecAbstractDef (细分的抽象定义...阅读全文

博文 2019-08-23 17:33:01 mumushuiding

slice

slice 数据结构 type slice struct { array unsafe.Pointer len int cap int } golang 源码 基于数组或者slice生成一个slice的时候,新的slice和原来数组/slice 的底层数组是同一个 基于数组或者slice生成slice的cap=原来对应的数组长度-现在slice的第一个元素对应的索引 slice 作为参数传递的是 副本,但是对应的数组的指针不变 扩容规则: 在一般的情况下,你可以简单地认为新切片的容量(以下简称新容量)将会是原切片容量(以下 简称原容量)的 2 倍。 但是,当原切片的长度(以下简称原长度)大于或等于1024时,Go 语言将会以原容量的1.25 倍作为新容量的基准(以下新容量基准) slice ...阅读全文

博文 2019-03-15 14:36:32 木子中瑜

Go语言入门教程(01):开发环境的搭建(Goland和VSCode)

教程首发于:微信公众号《Go编程时光》 1. 下载安装 Go语言 下载地址:https://golang.google.cn/dl/ image 下载完成后,直接双击 msi 文件进行安装,我习惯将软件安装在我的 E 盘下的 Program Files 目录下 image 后面就是一路点击 Next 即可,直到出现如下界面,安装完成。 image 2. 配置 Goland 环境 学习编程语言,使用一个称心的 IDE,可以帮你省去很多麻烦。 开发 Python 项目,我习惯使用 PyCharm,因为已经习惯了 JetBrains 风格的IDE,可以替我省去很多熟悉新IDE的成本,所以这里我照样使用 JetBrains 专门为 Go语言开发的IDE:Goland。 Goland 下载地址:htt...阅读全文

博文 2020-02-04 19:33:05 王炳明

map字典

golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。map 是字典的概念,它的格为 “map[keyType]valueType” 。 map 的读取和设置也类似 slice 一样,通过 key 来操作,只是 slice 的index 只能是`int`类型,而 map 多了很多类型,可以是 int ,可以是 string及所有完全定义了 == 与 != 操作的类型。// 1. 声明 var m map[string]int // 2. 初始化,声明之后必须初始化才能使用,向未初始化的map赋值引起 panic: assign to entry in nil map. m = make(map[string]int) m = map[string]in...阅读全文

博文 2018-09-21 11:34:41 周杰伦是李小莹的男神

Go 1.5 内存清除汇编源码注释

Go 1.5 内存清除汇编源码注释 Mon 11 February 2019 最近在阅读 Go1.5 的源码,发现源码中多处调用了了 memclr ,进一步深入了解发现原来 Go 为了实现内存复用会将已经回收到 cache 的内存清除,清除逻辑使用汇编实现,本文是基于自己的理解进行的注释。 注意: 最新版的 Go 中(1.11)该函数已经改名为 memclrNoHeapPointers 我自己添加的注释以 //# 开始 Go 针对不同的平台实现了不同的内存清除,这里仅对 amd64 平台下的实现进行注释: 源文件: https://github.com/golang/go/blob/release-branch.go1.5/src/runtime/memclr_amd64.s // Copy...阅读全文

博文 2019-06-10 15:51:29 www.linuxzen.com

基于星云链的智能合约与Dapp(一)——编译安装星云链

因为星云开发者奖励计划的原因,我开始尝试智能合约与Dapp的开发。基于星云链的智能合约使用JavaScript或者TypeScript,相较于以太坊语言学习成本相对较低。接下来一系列文章我将把Dapp开发过程中学习到的内容记录下来,给有兴趣或感兴趣的读者提供一些参考。前面几章的内容基本借鉴官方Wiki。 Golang环境搭建 开发环境我使用的Mac OSX。 Components Version Description Golang >=1.9.2 The Go Programming Language 在Mac OSX里,推荐使用Homebrew来安装Golang #安装Golang brew install go #配置环境变量 export GOPATH=/path/to/worksp...阅读全文

博文 2018-07-03 23:34:41 古川不爱笑

Gorm 源码分析(二) 简单query分析

简单使用 上一篇文章我们已经知道了不使用orm如何调用mysql数据库,这篇文章我们要查看的是Gorm的源码,从最简单的一个查询语句作为切入点。当然Gorm的功能很多支持where条件支持外键group等等功能,这些功能大体的流程都是差不多先从简单的看起。下面先看如何使用 package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/panlei/gorm" ) var db *gorm.DB func main() { InitMysql() var u User db.Where("Id = ?", 2).First(&u) } func InitMysql() { var err error db,...阅读全文

博文 2019-06-16 03:02:38 大二小的宝

Go Gin源码学习(二)

开场 上一篇学习了Gin框架的总体流程,但是自己查看源代码中被许多的零散小功能影响了主体流程的研究。所以觉得可以模仿Gin框架,自己写一个最简单仅仅含有主流程的demo。可以让我们更加深入了解Gin自己也可以再模仿的过程中更加了解源码。 功能 这个demo是我自己对Gin初步理解之后模仿写的,其中只包含主要功能 创建路由 新建group 添加中间件 启动http服务,接受客户端请求并返回简单数据 Demo中的路由并没有使用Gin的tree只是简单的使用了map来实现,基数树是一个相对独立逻辑准备之后单独再学习 代码 package mygin import ( "fmt" "net/http" "path" "sync" ) //上下文context 简单的他添加response reque...阅读全文

博文 2019-05-08 16:35:28 大二小的宝

兄弟连区块链入门教程以太坊源码分析hashimoto源码分析(二)

兄弟连区块链入门教程以太坊源码分析hashimoto源码分析(二)。“超级计算机是将计算受限问题转化为I / O约束问题的一种设备。”Ken BatcherInstead, an algorithm will have little room to be sped up by new hardware if it acts in a way that commodity computer systems are already optimized for.相反,如果一种算法以商品计算机系统已经优化的方式运行,那么算法将没有多少空间可以被新硬件加速。Since I/O bounds are what decades ofcomputing research has gone towards s...阅读全文

博文 2018-10-24 15:34:46 兄弟连区块链培训

golang-101-hacks(4)——go build”和 go install

整理 GOPATH directory and only keep Go source code files left over: tree . ├── bin ├── pkg └── src ├── greet │ └── greet.go └── hello └── hello.go 5 directories, 2 files 在源码greet包的greet.go文件中只有一个函数 The greet.go is greet package which just provides one function: # cat src/greet/greet.go package greet import "fmt" func Greet() { fmt.Println("Hello 中国!"...阅读全文

博文 2019-05-25 00:34:39 羊羽share

从源码的角度解析线程池运行原理

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授,带你一路进阶,来不及解释了快上车! 在讲解完线程池的构造参数和一些不常用的设置之后,有些同学还是想继续深入地了解线程池的原理,所以这篇文章我会带大家深入源码,从底层吃透线程池的运行原理。 image ThreadPoolExecutor 在深入源码之前先来看看J.U.C包中的线程池类图: image 它们的最顶层是一个Executor接口,它只有一个方法: public interface Executor { void execute(Runnable command); } 它提供了一个运行新任务的简单方法,Java线程池也称之为Executor框架。 Execut...阅读全文

博文 2019-06-01 13:34:40 公众号_后端进阶

Linux服务器绑定了多个IP的时候如何获取主IP?

当Linux服务器绑定了多个IP地址的时候,在一些特殊应用场合,需要获取主IP,即向外访问的时候IP包上带的IP,一种方式是通过shell脚本获得,另一种方式是通过其它脚本获取,本程序通过golang程序实现了Linux服务器绑定多个IP地址的时候主IP的获取。1、程序源码如下: 2、执行方式如下:安装golang,yum install golang 或者 sudo apt-get install golang执行上面的golang程序,go run masterip.go,即可获取服务器的主IP地址————————————————版权声明:本文为QQ3315939349原创作品请勿转...阅读全文

博文 2020-05-04 13:32:41 服务器小羽3315939349

Hashmap

基本语法 定义hashmap变量 由于go语言是一个强类型的语言,因此hashmap也是有类型的,具体体现在key和value都必须指定类型,比如声明一个key为string,value也是string的map, 需要这样做 var m map[string]string // 声明一个hashmap,还不能直接使用,必须使用make来初始化 m = make(map[string]string) // 初始化一个map m = make(map[string]string, 3) // 初始化一个map并附带一个可选的初始bucket(非准确值,只是有提示意义) m := map[string]string{} // 声明并初始化 m := make(map[string]string) ...阅读全文

博文 2018-11-25 16:34:40 小马哥_Magical

2.Golang的Http源码阅读(Handler注册)

先贴一段代码 package main import ( "net/http" "fmt" "log" ) func hello(w http.ResponseWriter, r *http.Request) { r.ParseForm() fmt.Printf("%+v\n", *r.URL) fmt.Fprintln(w, "Hello world") } func main() { http.HandleFunc("/", hello) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal(err) } } 这里监听本地的9090端口,使用 http.HandleFunc 将URL为“/”的请求将其转向名为...阅读全文

博文 2018-07-26 10:35:01 geange

工作区介绍

升级go语言版本 建议去官网下载最新的工具包 工作区 工作区就是程序工作的地方,里面包含go语言的编写源码文件,已经install 安装后的归档文件,以.a为扩展名的文件 GOPATH 环境变量GOPATH 的值可以是一个目录的路径,也可以包含多个目录的路径,每个路径代表一个工作区 GOROOT GOBIN 代码包的概念 go语言的源码是以代码包为基本组织单位的,在文件系统中,代码包是和目录一一对应的 1.一个代码包可以有多个以.go为扩展名的源码文件组成如下,demo1.go demo2.go 和 main.go 都属于代码包main,注意同一个目录下的.go 文件只能属于一个代码包 image.png 如何声明文件属于那个代码包呢?demo1.go demo2.go 和 main.go ...阅读全文

博文 2018-12-24 09:34:43 酷走天涯

golang nsq源码分析&添加中文注释系列(二):Nsqd入口主流程

以往看网上的源码分析时,基本都是前面一段讲解,后面跟一大段代码,没有上下文分析,我就暗暗的想,如果一个函数或一段逻辑能有中文注释(俺小本毕业英语不太好)带有上下文分析,这样读源码岂不是会更快顺畅。。。不废话了,我们开始吧。 上一篇大概讲解了基本介绍,我们也把Nsqd一步一步跑起来了(假设您已动手尝试过),本篇则从源码入口开始讲解 前言 针对特殊的包或者方法,会单独开一篇博客讲解,请注意代码里面的链接地址,建议手动尝试一下 文章宗旨是学习大神的每一行代码,所以看起来会比较啰嗦,建议您一边看代码一遍读文章(效果更佳) NSQ整体流程 NSQ由3个守护进程组成: nsqd 是接收、保存和传送消息到客户端的守护进程 nsqlookupd 是管理的拓扑信息,维护着所有nsqd的状态,并提供了最终一致发...阅读全文

博文 2019-12-25 01:32:54 晓亮1988

兄弟连区块链教程btcpool矿池源码分析nmcauxmaker模块解析

btcpool矿池-nmcauxmaker模块解析 nmcauxmaker命令使用 nmcauxmaker -c nmcauxmaker.cfg -l log_nmcauxmaker #-c指定nmcauxmaker配置文件 #-l指定日志目录 nmcauxmaker.cfg配置文件 nmcauxmaker = { //rpc调用间隔(秒) rpcinterval = 10; //最近一次rpc调用时间写入文件 file_last_rpc_call_time = "/work/xxx/nmcauxmaker_lastrpccalltime.txt"; //启动时是否检查zmq is_check_zmq = true; //nmc支付地址 payout_address = "N59bssPo1...阅读全文

博文 2018-10-16 15:34:52 兄弟连区块链培训

go

我们使用golang构建websocket,支持高性能、高并发,websocket不用多介绍,go自带原生websocketapi,但有些断线重连、信息发送处理不太完善,我们改造gorilla/websocket 用于我们的系统,**源码**在文章末尾,以下是两个扩展的对比信息...阅读全文

博文 2018-10-21 20:34:39 longmore

《k8s-1.13版本源码分析》-源码调试

源码调试概述k8s环境配置goland写在后面1. 概述本节内容并不是在准备好k8s环境后就写的,大家也不需要在开始看源码前研究怎么调试代码。今天之前我已经发了《调度器优选过程》也就是差不多准备好k8s环境后一个月了。所以大家也可以先跳过本节,先开始看后面的源码分析,灵活把握开始调试源码的时间吧。Debug应该是所有“攻城狮”的基本技能。除非是“Hello World”之类的小程序,不然都会出错,俗称bug,有bug就要debug. 今天不赘述调试本身的技术,我们只以调度器为例聊聊怎么把k8s的代码单步执行跑起来,看看内存里是个啥~2. k8s环境我们前面已经搭建了3节点的集群,相关组件主要是static pod的方式在运行,所以调试调度器的时候我们应该把kube-scheduler容器停掉...阅读全文

博文 2019-03-22 12:15:43 CloudGeek

InfluxDB源码修改,GO语言的一个小问题,config.go的使用

各位大神,请问有没有研究过influxdb源码的? 有个GO语言的小问题想请教一下,我是写Java的,GO语言基础了解一些: 我想在源码中添加一个配置选项,比如说,增加一个配置“写入数据时,在控制台打印一句话”,配置文件里面,我新增这样两行: 向源码中**influxdb\etc\config.sample.toml**文件中添加 ``` [write_my] enable = true word = "xxx" ``` 然后新建一个目录influxdb/write_my,新建文件config.go和logger.go。 config.go参考influxdb/services/httpd/config.go logger参考influxdb/s...阅读全文

「译」在 Golang 中实现枚举类型

文地址在这篇文章中,我们将介绍使用 go generate 和 abstract 语法树遍历生成强大的枚举类型。 这篇文章描述用于生成的 CLI,完全的原代码 可以在 Github 上找到。 Go 中惯用法Go 语言实际上没有对枚举类型提供完成的支持。定义枚举类型的其中一种方法就是把一类相关变量定义成一种类型。Iota 可以用于定义连续的递增的整数常量。我们可以像这样定义一个 Color 类型。 https://play.golang.org/p/1Zib29yiuFy package main import "fmt" type Color int const ( Red Color = iota // 0 Blue // 1 ) func main() { var b1 Color = ...阅读全文

博文 2019-04-28 20:07:24 正小歪的博客

golang 生成个性二维码

前言 好久没发文章了,最近登录看到有朋友评论了golang生成二维码的文章,想了解下生成个性二维码的解决方案! 实现思路 ,网上搜相关资料几乎没有, 没有那就就自己想吧,就去看了下草料二维码; 然后突然就有感觉了 不就是把像素的颜色替换嘛 这还不简单 1 打开二维码图片 2 打开要填充的图片 3 将要填充的图片剪裁成和二维码一样大小 4 分析二维码的每个像素 替换成图片的像素就行了 以下是生成的例子: 例子 image image image image 代码 package main import ( "fmt" "github.com/nfnt/resize" "image" "image/color" "image/draw" "log" "os" "time" _ "image/jp...阅读全文

博文 2020-05-11 07:32:41 hi李昊天

WebSocket的实现原理

WebSocket的实现原理 一、什么是websocket Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。即:websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工的TCP连接。 下面我们分别来看一下这两个阶段的具体实现原理: 1、握手阶段 客户端发送消息: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com ...阅读全文

博文 2019-03-18 18:34:41 yongfutian

golang导出csv乱码解决方法

golang导出csv乱码解决方法: 在csv文件的开头写入 UTF-8 BOM `// 创建文件` `dstf, err := os.Create(``"./data/"` `+ fileName)` `defer dstf.Close()` `if` `err != nil {` `beego.Error(``"create file error: "` `+ err.Error())` `return` `""``, err` `}` `dstf.WriteString(``"\xEF\xBB\xBF"``)` `// 写入UTF-8 BOM,防止中文乱码` `// 写数据到文件` `w := csv.NewWriter(dstf)` `w.Write([]string{``"开始时间...阅读全文

博文 2019-12-25 16:32:42 可可脂的

golang nsq源码分析&添加中文注释系列(一)

Go语言是一个看起来平淡无奇,但真正用起来是让人爱不释手的一门语言。 一直也想用Go来写点什么项目,但github上趴了很久最终也没下决心去实际行动,也是碰巧有一天看到一篇文章介绍NSQ实时消息队列的源码分析,让我有了也要去深入学习的冲动。。。学习大神的代码思想和整体架构 话说我一直用着世界上最好的语言PHP,总想深入做个源码分析,每次都是刚开始就止步于此。。。也想去看看kafka的源码,但是,但可是它使用Scala语言编写,想看它还得重头来过。 当当当。。。重点来了 当Go出现让一切变得特别不一样哈,咱也可以做点高大上的事情了 嚯嚯,难道我这是跪久了,是Golang让我也能站起来,翻身农奴把歌唱赶脚。。。 下面讲解完全是开发角度,如果想试一下NSQ产品,可以到这里 按照教程一步一步走,亲测...阅读全文

博文 2019-12-22 08:32:48 晓亮1988

LeetCode算法系列_0891_子序列宽度之和

LeetCode算法系列_0891_子序列宽度之和 题目描述 给定一个整数数组 A ,考虑 A 的所有非空子序列。 对于任意序列 S ,设 S 的宽度是 S 的最大元素和最小元素的差。 返回 A 的所有子序列的宽度之和。 由于答案可能非常大,请返回答案模 10^9+7。 示例1: 输入:[2,1,3] 输出:6 解释: 子序列为 [1],[2],[3],[2,1],[2,3],[1,3],[2,1,3] 。 相应的宽度是 0,0,0,1,1,2,2 。 这些宽度之和是 6 。 提示: 1 <= A.length <= 20000 1 <= A[i] <= 20000 算法 const mod = 1e9 + 7 func sumSubseqWidths(a []int) int { //[3...阅读全文

博文 2018-09-05 19:34:42 tomorrowwu

Golang源码 container 系列二 list链表

关于ring,可以参考Golang源码 container 系列一 ring环形链表,list也是个链表,但是稍有差别。 参考【Go】笔记五 | container包中的list与ring 一、源码对比 type Ring struct { next, prev *Ring Value interface{} } // Element is an element of a linked list. type Element struct { // Next and previous pointers in the doubly-linked list of elements. // To simplify the implementation, internally a list l is ...阅读全文

博文 2019-03-18 18:34:44 懒皮

兄弟连区块链教程以太坊源码分析downloader-peer源码分析

兄弟连区块链教程以太坊源码分析downloader-peer源码分析,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。peer模块包含了downloader使用的peer节点,封装了吞吐量,是否空闲,并记录了之前失败的信息。 peer // peerConnection represents an active peer from which hashes and blocks are retrieved.type peerConnection struct { id string // Unique identifier of the peer headerIdle int32...阅读全文

博文 2018-10-19 11:34:47 兄弟连区块链培训

重拾golang - go目录结构说明

go 目录结构说明   golang集多编程范式之大成者,使开发者能够快速的开发、测试、部署程序,支持全平台静态编译。go具有优秀的依赖管理,高效的运行效率,庞大的第三方库支持以及在国内持续的增长势头。  作为开发者的我们也将不得不重视这门语言的兴起。首先向大家讲解一下go语言开发环境的目录结构,让我们更清楚的认识它。 一、goroot开发包目录 当我们安装好后,会在安装目录出现一个go/文件夹,如果是windows目录应在再C:/go下(默认),如果是unix/linux一般会在/usr/local/go下,这个目录是unix software resource的含义。 # liunx上目录位置 chao@chao-PC:/usr/local/go$ pwd /usr/local/go #...阅读全文

博文 2019-02-26 00:34:40 cafebabe

Golang 排序

215. 数组中的第K个最大元素 1、使用sort源码 func findKthLargest(nums []int, k int) int { sort.Ints(nums) //fmt.Println() return nums[len(nums)-k] } 2、冒泡排序 func bubble_sort(nums []int) []int { for i:=len(nums)-1; i >=0; i-- { for j:=0; j阅读全文

博文 2019-07-07 05:32:41 发条家的橙子