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

Right Now, 73 Years Ago, Allied Paratroopers Began Gearing Up and Loading Up on C-47's and Gliders Ahead of D-Day, H-Hour...

<p>Unbelievable it&#39;s been 73 years. Never forget the sacrifices. </p> <p>If you enjoy history, please watch HBO&#39;s Band of Brothers. It is a fantastic series that follows the formation of E Company, 506th Parachute Infantry Regiment, 101st Airborne. Currahee! </p> <p><a href="https://youtu.be/...阅读全文

深入理解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

Hyperledger fabri 部署网络(单机环境)

title: Hyperledger fabri 部署网络(单机环境) tags: Hyperledger, fabric ,区块链 安装预置环境 下载项目 首先我们需要配置好Hyperledger Fabric开发环境,然后下载并安装Hyperledger Fabric Samples。你会注意到fabric-samples文件夹中包含了许多示例。我们将使用first-network这个例子。 你如果你不知道环境配置和Samlpes的下载安装,可以看我之前的文章: https://blog.csdn.net/yang731227/article/details/83868333 使用脚本自动部署 Hyperledger Fabric Samples提供一个完全注释的脚本byfn.sh,利用...阅读全文

Golang channel

channel简介 channel俗称管道,用于数据传递或数据共享,其本质是一个先进先出的队列,使用goroutine+channel进行数据通讯简单高效,同时也线程安全,多个goroutine可同时修改一个channel,不需要加锁 。 channel可分为三种类型: 只读channel:只能读channel里面数据,不可写入 只写channel:只能写数据,不可读 一般channel:可读可写 channel使用 定义和声明 var readOnlyChan <-chan int // 只读chan var writeOnlyChan chan<- int // 只写chan var mychan chan int //读写channel //定义完成以后需要make来分配内存空间,不然...阅读全文

博文 2020-04-09 11:33:09 frederick_hou

(转)golang中context包解读

源码剖析 context.Context 接口 context包的核心 // context 包里的方法是线程安全的,可以被多个 goroutine使用 type Context interface { // 如果存在,Dealline 返回Context将要关闭的时间 Deadline() (deadline time.Time, ok bool) // 当Context 被 canceled 或是 times out 的时候,Done 返回一个被 closed 的Channel Done() <-chan struct{} // 在 Done 的 channel被closed后, Err 代表被关闭的原因 Err() error // 如果存在,Value 返回与 key 相关了的值, ...阅读全文

博文 2019-02-22 22:34:42 one_zheng

golang练手小项目系列(6)-使用map实现set

问题描述 go没有提供set数据结构,请用map实现set 要点 需要支持方法: Add 添加元素 Remove 删除元素 Cardinality 获取 Set 长度 Clear 清空 Set Contains 检测元素是否在 Set 中 Pop() 随机删除一个元素并返回被删除的元素 ToSlice() []interface{} 转换成slice返回 拓展 Clone 复制 Set Difference(other Set) Set 返回和另一个Set的差集 Equal(other Set) bool 判断和另一个Set是否相等 Intersect(other Set) Set 返回和另一个Set的交集 SymmetricDifference(other Set) Set 返回不在交集中...阅读全文

博文 2019-07-02 12:03:03 李说的对

[Go 教程系列笔记]Interface 第二部分

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP 使用指针接收器和值接收器实现接口 我们在第1部分中讨论的所有示例接口都是使用值接收器实现的。也可以使用指针接收器实现接口。在使用指针接收器实现接口时需要注意一些细微之处。让我们了解使用以下程序。 type Desc...阅读全文

博文 2019-08-14 16:02:42 xfstart07

【源码阅读】Nsqd

Nsqd源码阅读 简介 nsqd为nsq daemon的简写,是nsq组件最主要的服务。nsqd提供一个tcp服务、一个http服务以及一个可选的https服务,tcp服务于客户端(生产者或消费者),http则提供API(可用于创建、删除topic与channel,生产数据,清空数据等)。 初始化 nsqd的启动入口为apps/nsqd/nsqd.go文件里的main函数。首先定义了一个program的结构体,用于对程序的控制。结构体内元素为指向NSQD的指针。main函数里面定义了一个具体的prg,然后Run它。Run函数负责启动prg并阻塞,直至接收到对应的信号(对于nsqd为SIGINT或者SIGTERM信号)。 type program struct { nsqd *nsqd.NSQ...阅读全文

博文 2020-01-31 22:32:38 moonbamboo

Golang中make和new的区别

1:new:func new(Type) *Type 接受一个参数,这个参数是一种类型,而不是一个值,分配好内存后,返回一个指向该类型内存地址的指针,这个指针指向的内容的值为该类型的零值。对于不同的数据类型,零值的意义是完全不一样的。比如,对于bool类型,零值为false;int的零值为0;string的零值是空字符串2:make:func make(t Type, size ...IntegerType) Type,具体而言,有如下几种用法:(1)make(map[string]string):即缺少长度的参数,只传类型,这种用法只能用在类型为map或chan的场景(2)make([]int, 2):指定了长度,例如make([]int, 2)返回的是一个长度为2的slice(3)mak...阅读全文

博文 2020-04-17 07:32:44 普朗tong

golang之select学习

官方定义 每个case都必须是一个通信 所有channel表达式都会被求值 所有被发送的表达式都会被求值 如果任意某个通信可以进行,它就执行;其他被忽略。 如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。否则,如果有default子句,则执行该语句;如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。 举例说明 下面针对官方的定义,我们结合例子看一下。 首先,列举一下select语句中,case会出现的操作: channel操作 case中为channel操作时,select用来监听和channel有关的IO操作。示例-1中若ch1和ch2有读写操作,就会触发执行case中的代码。 若ch1和ch2...阅读全文

博文 2019-12-17 21:32:43 鬼厉_8a7c

Go语言:goroutine and channels

channels 在Golang中是一个具有类型的管道(conduit) Channels are a typed conduit through which you can send and receive values with the channel operator, <-. 创建管道的方式很简单: ch := make(chan int) // declare a channel of type int ch := make(chan int, 100) // buffered channels // Sends to a buffered channel block only when the buffer is full. // Receives block when the ...阅读全文

博文 2020-03-22 17:32:43 落落大方的发卡

Vancouver Go Meetup

<p>The official Vancouver Gophers Meetup happens pretty infrequently (about once a year), and so I was looking to get a monthly Meetup started along side it.</p> <p>Right now I&#39;m looking for feedback regarding interest and speakers/presenters. I&#39;d like to start off with more basic Go presentations and ramp up to m...阅读全文

资源 2018-02-09 05:30:20 blov

实现Raft协议:Part 2 - 指令和日志复制

翻译自Eli Bendersky的系列博客,已获得原作者授权。 本文是系列文章中的第一部分,本系列文章旨在介绍Raft分布式一致性协议及其Go语言实现。文章的完整列表如下: 序言:介绍 第一部分:选主 第二部分:指令和日志复制(本文) 第三部分:持久性和优化 在这一部分,我们会大幅强化Raft的实现,做到能够实际处理客户端提交的指令,并在Raft集群中复制它们。代码结构与第一部分相同,会有一些新的结构体和函数定义,对旧代码也会有一些改动——我会对这些做简短的解释。 本部分的所有代码都在这个目录。 客户端交互 我们在序言中对客户端交互进行了简短的讨论,我强烈建议您返回去重新读一下对应章节。接下来,我们不会关注客户端如何找到领导者,相反,我们讨论的是当他已经找到领导者时,会发生什么。 首先说明一...阅读全文

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

详解Go语言的计时器

Go语言的标准库里提供两种类型的计时器Timer和Ticker。Timer经过指定的duration时间后被触发,往自己的时间channel发送当前时间,此后Timer不再计时。Ticker则是每隔duration时间都会把当前时间点发送给自己的时间channel,利用计时器的时间channel可以实现很多与计时相关的功能。 文章主要涉及如下内容: Timer和Ticker计时器的内部结构表示 Timer和Ticker的使用方法和注意事项 如何正确Reset定时器 计时器的内部表示 两种计时器都是基于Go语言的运行时计时器runtime.timer实现的,rumtime.timer的结构体表示如下: type timer struct { pp puintptr when int64 per...阅读全文

剥开比原看代码05:如何从比原节点拿到区块数据?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前一篇中,我们已经知道如何连上一个比原节点的p2p端口,并与对方完成身份验证。此时,双方结点已经建立起来了信任,并且连接也不会断开,下一步,两者就可以继续交换数据了。 那么,我首先想到的就是,如何才能让对方把它已有的区块数据全都发给我呢? 这其实可以分为三个问题: 我需要发给它什么样的数据? 它在内部由是如何应答的呢? 我拿到数据之后,应该怎么处理? 由于这一块的逻辑还是比较复杂的,所以在本篇我们先回答第一个问题: 我们要发送什么样的数据请求,才能让比原节点把它持有的区块数据发给我? 找到发...阅读全文

博文 2018-07-23 15:34:50 比原链Bytom

并发简介

有人把Go语言比作 21 世纪的C语言,第一是因为Go语言设计简单,第二则是因为 21 世纪最重要的就是并发程序设计,而 Go 从语言层面就支持并发。同时实现了自动垃圾回收机制。 Go语言的并发机制运用起来非常简便,在启动并发的方式上直接添加了语言级的关键字就可以实现,和其他编程语言相比更加轻量。 下面来介绍几个概念: 进程/线程 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 线程是进程的一个执行实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。 并发/并行 多线程程序在单核心的 cpu 上运行,称为并发;多线程程序在多核心的 cpu 上运行,称为并行。 并发...阅读全文

博文 2020-03-25 23:32:49 乔大叶_803e

How to use go channels to solve this problem?

<p>I wrote a scraper which collects all image links from every page in a given subreddit(e.g. wallpapers). A linkcrawler function takes a subreddit url and it uses goquery to find images links and next page link and calls itself with next page link as argument, meanwhile for every image it finds it calls (go download(img_link)) , in order to...阅读全文

code review resource?

<p>In a recent Go Time podcast a resource for getting user (e.g. my) code reviewed was described. Unfortunately I was on the move at the time and did not make a note of that. I searched for this after the fact but the hits seem to relate to reviewing the code that comprises go itself.</p> <p>Is there a resource where I can post c...阅读全文

资源 2017-05-12 17:00:16 xuanbao

Go Favorites

<p>I&#39;m working through the book, <a href="http://a.co/2Yp8lEJ">The Go Programming Language</a> and came across a section in the chapter on interfaces that said the errors package was 4 lines of code. They showed the code in the following paragraph and I couldn&#39;t believe it so I went to the Go GitHub page to...阅读全文

[Go 教程系列笔记] Channel 通道

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP 在上一个教程中,我们讨论了如何使用 goroutine 在 Go 中实现并发。在本教程中,我们将讨论有关通道以及 goroutine 如何使用通道进行通信。 什么是通道? 通道可以被认为是 goroutine 通信...阅读全文

博文 2019-08-14 16:32:42 xfstart07

[Go - note] go中new和make分配变量的区别

New 与其他语言中的同名方法不同是,go中的new不会初始化内存,而仅仅是赋予零值,也就是说返回一个新分配的类型的零值的指针(*T)。这样创建的变量可以不用进一步初始化就可以直接使用。 但有时需要初始化为非零值则可以用composite literal方式。filed name 可根据是否需要按key:value 方式填写。 `new(File)`and`&File{}` 是相同的表达 Make make只用来创建slice, map, 和channel,并且返回的初始化的值(T)而非零值(*T),因为这几种类型的都需要初始化才能使用。 make([]int, 10, 100) 返回的是length 10 , capacity100的slice, 而new([]int)返回一个指向零值的s...阅读全文

博文 2019-12-30 20:32:40 Arboat

Go通道笔记

package main import ( "fmt" "sync" "time" "unsafe" ) func main10() { done := make(chan struct{}) // 结束事件 c := make(chan string) // 数据传输通道 go func() { s := <-c // 接受消息 println(s) close(done) // 关闭通道,作为结束通知 }() c <- "hi!" // 发送消息 <-done // 阻塞,直到有数据或者管道关闭 } func main11() { c := make(chan int, 3) // 创建带 3 个缓冲槽的异步通道 c <- 1 // 缓冲区未满,不会阻塞 c <- 2 println(<...阅读全文

博文 2020-03-08 00:32:39 xiongkun01

channel 和 select 控制 goroutines

最近有一个需求是在一个常驻内存的程序中结束相关任务。在 Go 中,创建一个 goroutine 非常简单,只需要 go 一下就可以了,但是如果我创建了很多 goroutine,想要结束怎么办? 比如说我有一个死循环的例子 1234567891011121314151617181920package mainimport ("fmt" "sync" "time")func main() {queue := make(chan int, 20) var wg sync.WaitGroup for { // 就是一个死循环 queue <- 1 <-queue for i := 0; i <10; i++ {wg.Add(1) go func(i int) {time.Sleep(5 * time...阅读全文

博文 2020-02-21 10:43:38 ipfans's Blog

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 snippet 之 time 使用

时间格式化与解析 // 获取当前时间 t := time.Now() // 2020-05-13 22:23:56.253851 +0800 CST m=+0.001626130 fmt.Println(t) //获取当前年月日,时分秒 y := t.Year() //年 m := t.Month() //月 d := t.Day() //日 h := t.Hour() //小时 i := t.Minute() //分钟 s := t.Second() //秒 fmt.Println(y, m, d, h, i, s) // 2020 May 13 22 41 20 // 获取当前时间戳 (int64 数字) timestamp := t.Unix() // 1589379836 fmt.P...阅读全文

博文 2020-05-13 23:32:44 happen

消息队列 NSQ 源码学习笔记 (二)

> NSQ 消息队列实现消息落地使用的是 FIFO 队列。 > 实现为 **diskqueue** , 使用包 `github.com/nsqio/go-diskqueue` ,本文主要对 `diskqueue`的实现做介绍。 ## 功能定位 - 在NSQ 中, diskqueue 是一个实例化的 BackendQueue, 用于**保存在内存中放不下的消息**。使用场景如Topic 队列中的消息,Channel 队列中的消息 - 实现的功能是一个FIFO的队列,实现如下功能: - **支持消息的插入、清空、删除、关闭操作** - **可以返回队列的长度**(写和读偏移的距离) - 具有读写功能,FIFO 的队列 ## diskqueue 的实现 BackendQue...阅读全文

博文 2020-04-09 11:07:18 lpflpf

5月26日流水账

了解了一下 Golang 语言的并发编程,开拓了知识面。Golang 用 go 开辟一个协程,利用 channel 这种数据类型进行协程间的通信。之所以说Golang 语言天生具有高并发性,是因为其对并发程序编译速度非常快,超过Java。 做了两道Leetcode子数组的题,收获挺大的。 TCP 是面向连接的,端到端的;UDP面向无连接。TCP 像打电话,UDP像发报文。 网络传输四层模型 : 应用层 -> 传输层 -> 网络层 -> 链路...阅读全文

博文 2020-05-27 22:32:43 禁卫君

Go语言基础 - 变量与常量

一、变量 程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。 1. 声明 // 标准声明:var 变量名 变量类型 var name string // 批量声明: var ( a string b int ) 2. 初始化 var name string = "Go" // 类型推导: var name = "Go" // 一次初始化多个变量: var name, age = "Go", 10 // 短变量声明: shortName := "Go" // 匿名变量...阅读全文

博文 2020-04-08 16:32:44 不留烦