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

Go 语言基础--变量&数据类型

go 变量 Golang 变量声明和初始化比起其他语言要简单一些,并且丰富不少。 语法: var identifier type var 代表声明一个变量,identifier为变量名(go中变量名由字母、数字、下划线构成,首个字符不能为数字),type为变量类型。其中go变量的命名规则是建议驼峰式的。 常见的方式: /** 单变量 **/ var tmp int // 声明一个int 类型变量tmp,go的变量类型放在变量之后 var tmp int = 6 // 声明+初始化 var tmp = 6 // 声明+初始化,并省略类型 tmp := 6 // 直接初始化一个短变量,局部变量强烈使用这种方式 /**多变量**/ tmp1, tmp2, tmp3 := 1, 2, 3 var t...阅读全文

博文 2019-07-10 23:02:45 邹志全

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...阅读全文

Git数据存储的原理浅析

写作背景 进来在闲暇的时间里在看一些关系P2P网络的拓扑发现的内容,重点关注了Markle Tree的知识点,在一篇文章里(https://www.sdnlab.com/20095....),发现了了一句话“Merkle DAG的一个常见例子就是Git存储库”,于是查找了一些关于git存储库的原理,先整理如下。仅供自己和大家参考。 Git存储库解析 当时我的疑问: git怎么存储数据的,如何能根据存储的数据可以很精确的回退到制定的版本? git存储和docker的存储机制类似吗?是不是都是分层的存储? git如果不是分层,每次提交都存储起来,那么数据量大了会怎么办? 解惑我们的解惑路线是,从新建一个本地git仓库开始,一步一步增加数据和提交,观察内容的具体变化。 首先使用git init新建...阅读全文

博文 2018-09-08 15:34:38 sixgo

大数据行业必须掌握的25个大数据术语

摘要: 如果你初来乍到,大数据看起来很吓人!根据你掌握的基本理论,让我们专注于一些关键术语以此给你的约会对象、老板、家人或者任何一个人带来深刻的印象。 让我们开始吧: 1.算法。“算法”如何与大数据相关?即使算法是一个通用术语,但大数据分析使其在当代更受青睐和流行。 如果你初来乍到,大数据看起来很吓人!根据你掌握的基本理论,让我们专注于一些关键术语以此给你的约会对象、老板、家人或者任何一个人带来深刻的印象。 让我们开始吧: 1.算法。“算法”如何与大数据相关?即使算法是一个通用术语,但大数据分析使其在当代更受青睐和流行。 2.分析。年末你可能会收到一份来自信用卡公司寄来的包含了全年所有交易记录的年终报表。如果你有兴趣进一步分析自己在食物、衣服、娱乐等方面具体花...阅读全文

go json数据转发

案例 例如,有个 GET 接口,可以批量获取用户信息???? > curl 'http://localhost:8080/user/1,2' [ { "user_id":1, "other_suff":... }, { "user_id":2, "other_suff":... } ] 同时,我们要将用户信息和他们的某些订单信息放在一起,组装成为????的接口,满足其他业务需求。 [ { "user_info":{ "user_id":1, "other_suff":... }, "order_info":{ "order_id":1, "user_id":1, "other_suff":... } }, { "user_info":{ "user_id":2, "other_suff":....阅读全文

博文 2019-09-10 00:32:46 shanyin

lesson-2:Go语言中的变量和数据类型

什么是变量 一个变量就是一个指定类型的存储单元。你可以给你这个存储单元命名。 go 语言的数据类型 类型 使用 默认值 bool 布尔类型,true or false false string 字符串类型,go 所有字符串默认编码都是 UTF-8 空字符串 int 整型,分别是 32-bit or 64-bit 0 uint unsign int 无符号整型,存储 32到64个字节 0 int8 整型, 值的范围分配 8个字节来存储数值 0 uint8 unsign int8 0 int16 整型, 值的范围分配 16 个字节来存储数值 0 uint16 unsign int16 0 int32 整型, 值的范围分配 32个字节来存储数值 0 uint32 unsign int32 0 in...阅读全文

博文 2020-01-14 15:32:41 Gabriel

Golang中range指针数据的坑

在Golang中使用for range语句进行迭代非常的便捷,但在涉及到指针时就得小心一点了。 下面的代码中定义了一个元素类型为*int的通道ch: package main import ( "fmt" ) func main() { ch := make(chan *int, 5) //sender input := []int{1,2,3,4,5} go func(){ for _, v := range input { ch <- &v } close(ch) }() //receiver for v := range ch { fmt.Println(*v) } } 在上面代码中,发送方将input数组发送给ch通道,接收方再从ch通道中接收数据,程序的预期输出应该是: 1 2 3...阅读全文

博文 2019-02-01 19:34:43 灯风罩戟

groupcache 源码系列三 LRU

关于LRU,可以参考LRU LFU FIFO LRU全称是Least Recently Used,即最近最久未使用的意思。如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。而用什么数据结构来实现LRU算法呢? 可能大多数人都会想到:用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。这种实现思路很简单,但是有什么缺陷呢?需要不停地维护数据项的访问时间戳,另外,在插入数据、删除数据以及访问数据...阅读全文

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

【干货分享】大数据计算服务MaxCompute使用教程

课程介绍 MaxCompute(原ODPS)是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案,使您可以经济并高效的分析处理海量数据。 产品详情:https://www.aliyun.com/product/odps 课时列表 • 课时1:客户端配置以及基本命令介绍 • 课时2:SQL基本操作介绍 • 课时3:tunnel命令操作介绍 • 课时4:MaxCompute与主流关系数据库DDl基本语法差异 • 课时5:MaxCompute Studio安装配置说明 开始学习http://click.aliyun.com/m/27852/ ...阅读全文

mvc

1、MVC这个阶段主要是快速实现产品,没考虑其他的,设计之初划分多个app,app内高类聚,app之间低耦合,DB表设计好了之后,实现view层功能需求,利用Django来快速实现功能,后端有许多预留设计,避免产品逻辑的变更带来整个表结构的变动,架构如下图; MVC架构nginx是负载均衡,通过权重法,把请求发送到多个Django服务(其实中间还有一个uwsgi),如果是静态请求,nginx直接返回给客户端,如果是其他请求,通过uwsgi传给Django,Django拿到请求,处理响应请求。耗时大的需要异步的,我们用celery处理,使用mysql作为数据库,redis作为缓存,加快请求的响应,减轻mysql负担,同时还有实时消息通知的需要使用了Nginx Push Module。问题以及处...阅读全文

博文 2019-12-17 18:32:49 yustyal

golang interface receiver

interface Animal作为数据类型构建的slice: package main import ( "fmt" ) type Animal interface { Speak() string } type Dog struct {} func (d Dog) Speak() string { return "Woof!" } type Cat struct {} //1func (c *Cat) Speak() string { return "Meow!" } type Llama struct {} func (l Llama) Speak() string { return "?????" } type JavaProgrammer struct {} func (j Jav...阅读全文

博文 2018-07-31 11:34:49 夜空一起砍猩猩

nsq (三) 消息传输的可靠性和持久化[一]

上两篇帖子主要说了一下nsq的拓扑结构,如何进行故障处理和横向扩展,保证了客户端和服务端的长连接,连接保持了,就要传输数据了,nsq如何保证消息被订阅者消费,如何保证消息不丢失,就是今天要阐述的内容。 nsq topic、channel、和消费我客户端的结构如上图,一个topic下有多个channel每个channel可以被多个客户端订阅。 消息处理的大概流程:当一个消息被nsq接收后,传给相应的topic,topic把消息传递给所有的channel ,channel根据算法选择一个订阅客户端,把消息发送给客户端进行处理。 看上去这个流程是没有问题的,我们来思考几个问题 网络传输的不确定性,比如超时;客户端处理消息时崩溃等,消息如何重传; 如何标识消息被客户端成功处理完毕; 消息的持久化,n...阅读全文

《Go语言四十二章经》第四十章 LevelDB与BoltDB

# 《Go语言四十二章经》第四十章 LevelDB与BoltDB 《Go语言四十二章经》第四十章 LevelDB与BoltDB 作者:李骁 LevelDB 和 BoltDB 都是k/v数据库。 但LevelDB没有事务,LevelDB实现了一个日志结构化的merge tree。它将有序的key/value存储在不同文件的之中,通过db, _ := leveldb.OpenFile("db", nil),在db目录下有很多数据文件,并通过“层级”把它们分开,并且周期性地将小的文件merge为更大的文件。这让其在随机写的时候会很快,但是读的时候却很慢。 这也让LevelDB的性能不可预知:但数据量很小的时候,它可能性能很好,但是当随着数据量的增加,性能只会越来越糟糕。而且做merge的线程也会在...阅读全文

博文 2018-10-18 21:53:22 roteman

Golang 复合数据类型:数组

复合数据类型 数组 数组是具有相同类型的一组已知编号且长度固定的数据项序列,这个序列可以是有序的也可以是无序的,组成数组的各个变量称为数组的元素。数组的长度必须是一个非负整数的常量(或常量表达式),数组长度也是数组类型的一部分,所以[4]int和[10]int不是同一种类型。 声明数组 声明数组需要指定元素的数据类型和数组长度(存储元素的数量) //声明一个长度为20的整型数组 var array [20]int 数组一旦声明,它的数据类型和数组长度都不能再更改了。所以,如果需要存储更多的元素,就必须先创建一个更长的数组,然后再把原来数组里的值复制到新数组里。 数组初始化时候,它的每个元素都被初始化为对应类型的零值。 使用数组字面量创建并初始化数组 //声明一个包含5个元素的整型数组 //用...阅读全文

博文 2020-06-03 14:32:50 sunlingbot

Go中的接口之初体验

// code_21_struct_interface_firsttime project main.go package main import ( "fmt" ) /* 1)接口interface是一个自定义类型,接口类型具体描述了一系列方法的集合。 2)接口类型是一种抽象的类型,它不会暴露出它代表的对象的内部值的结构和这个对象支持的基础操作的结合, 他们只会展示出他们自己的方法。 因此接口类型不能将其实例化。 3)Go通过接口实现了鸭子类型(duck-typing) */ type Humaner interface { SayHi() //1)一般以er结尾 //2)接口只有方法声明,没有实现,没有数据字段 //3)接口可以匿名嵌入其他接口,或嵌入到结构中 } type Studen...阅读全文

土拨鼠goroutine读取数据和chan的关系.

1 goroutine之间通信go推荐使用chan的方式,chan本身是安全的有类型的 2 chan的数据结构在src/runtime/hchan中 type hchan struct { //当前队列中剩余元素的个数 qcount uint // total data in the queue //环形队列的长度可以存放数据的长度 dataqsiz uint // size of the circular queue //环形队列的指针 buf unsafe.Pointer // points to an array of dataqsiz elements //每个元素的大小 elemsize uint16 //表示的关闭状态 closed uint32 //元素的类型 elemtype...阅读全文

博文 2019-08-28 14:19:29 blackdinosuar

二、【Zinx第二章-初识Zinx框架】Golang轻量级并发服务器框架

二、初识Zinx框架 ​ 这里先看一下Zinx最简单的Server雏形。 1. Zinx-V0.1-基础Server ​ 为了更好的看到Zinx框架,首先Zinx构建Zinx的最基本的两个模块ziface 和znet。 ziface主要是存放一些Zinx框架的全部模块的抽象层接口类,Zinx框架的最基本的是服务类接口iserver,定义在ziface模块中。 znet模块是zinx框架中网络相关功能的实现,所有网络相关模块都会定义在znet模块中。 1.1 Zinx-V0.1 代码实现 A 创建zinx框架 ​ 在$GOPATH/src下创建zinx文件夹 B 创建ziface、znet模块 ​ 在zinx/下 创建ziface、znet文件夹, 使当前的文件路径如下: └── zinx ├...阅读全文

博文 2019-01-30 10:34:45 IT无崖子

golang切片排序sort包的使用

# golang切片排序sort包的使用 golang的sort包提供了部分切片排序的函数和用户自定义数据集的函数。 ## 排序切片 ```go func Example1() { arry := []int{5,8,3,1,4,2,7,6} fmt.Println(arry) sort.Ints(arry) fmt.Println(arry) // Output: // [5 8 3 1 4 2 7 6] // [1 2 3 4 5 6 7 8] } ``` ## 排序用户自定义数据集 ![Alt text](./1562483367982.png) ```go type Person struct { Name string Age int } func (p Person) Strin...阅读全文

博文 2019-07-07 16:08:34 BethlyRoseDaisley

从零学习 Go 语言(07):数据类型之指针

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 **系列导读 ** [从零学习 Go 语言(01):一文搞定开发环境的搭建](https://studygolang.com/articles/27365) [从零学习 Go 语言(02):学习五种变量创建的方法](https://studygolang.com/articles/27432) [从零学习 Go 语言(...阅读全文

博文 2020-03-31 10:53:01 hello_wbm

数据结构和算法(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

流?I/O操作?阻塞?epoll?

一、流?I/O操作? 阻塞? (1) 流 可以进行I/O操作的内核对象 文件、管道、套接字…… 流的入口:文件描述符(fd) (2) I/O操作 所有对流的读写操作,我们都可以称之为IO操作。 当一个流中, 在没有数据read的时候,或者说在流中已经写满了数据,再write,我们的IO操作就会出现一种现象,就是阻塞现象,如下图。 (3) 阻塞 阻塞场景: 你有一份快递,家里有个座机,快递到了主动给你打电话,期间你可以休息。 非阻塞,忙轮询场景: 你性子比较急躁, 每分钟就要打电话询问快递小哥一次, 到底有没有到,快递员接你电话要停止运输,这样很耽误快递小哥的运输速度。 阻塞等待 空出大脑可以安心睡觉, 不影响快递员工作(不占用CPU宝贵的时间片)。 非阻塞,忙轮询 浪费时间,浪费电话费,占用...阅读全文

博文 2020-03-12 23:32:46 aceld

一个数据库的开发问题

本人是c++开发者,最近接触Go,非常喜欢,准备转Go。 事情是这样的,目前公司的一个C++项目要使用一个分布式数据库进行数据存储和访问,我在学,能不能用Go的框架进行开发数据库,然后通过C++进行数据库的访问?这样做是否有意义,是否能在短时间内完成呢?请各位大神帮我出点主...阅读全文

HyperLogLog 算法在监控场景中的运用

HyperLogLog 算法在监控场景中的运用 背景介绍 OpsMind 低代码开发平台监控模块,为了支撑B站众多监控数据的管理场景,研发人员在分布式层做了众多优化工作。为了更好的掌握每个 metric 自身的空间占用以及各个存储节点的时序分布情况,需要对每个指标的时序数目(基数)有一个大致的预估(允许存在误差),以便于 OpsMind 系统能更加合理的均衡各个存储节点的负载。 为何选用 HyperLogLog OpsMind 系统指标的形式与 prometheus 完全兼容(在此 prometheus 基础上做了一些拓展),一个监控指标(metric)的时序数,可以看做是该指标所有 labels 的组合(对 labels 求 fingerprint)数目。在对每个指标时序集合进行统计的过程...阅读全文

博文 2020-03-16 17:38:14 啊哟喂_

Go语言基础之开发环境、数据类型、运算符

开发环境搭建 go官网 https://golang.org/ 下载 https://golang.org/dl/ 下载 go1.11.2.windows-amd64.msi安装包,双击安装即可。 IDE工具 IntelliJ IDEA 安装go插件 File-Setting-Pluigns,检索go,点击install即可安装,安装成功后重启即可完成 go pluign 新建Go项目 File-New-Project,选择Go,填写项目信息 新建Go项目 填写项目名称,选择项目保存目录,点击Finish即可 项目信息 新建Go File,选择File-New-Go File Go File 完成简单的Hello world输出 /**包声明*/ package main //引入包 imp...阅读全文

博文 2018-11-24 19:34:41 梁朋举

一本正经地聊聊raft

笔者很久以前就了解过raft了,它相比paxos实现跟逻辑简单了许多,因此市场上有很多的分布式系统都是使用raft协议来保证数据的一致性的。不过第一个实际接触到的raft应用倒是mongo的副本集了。所以今天就从mongo的副本集说起。通常有多少个副本集,就保存有多少份数据。多份数据,就需要通过复制的手段来实现。这里复制的目的并不是为了读写分离,而是提高了数据的高可用。多份数据为了保证最终一致性,mongo底层是用一种变型的raft来实现的。一、raft的介绍1.1 问题所在如果是单节点,客户端修改某个值,成功的话整个系统都变为某个值: ok!一个节点,我自己跟自己达成共识即可。如果像mongo副本集,有多个节点存储同份数据,那就麻烦了: 同一个客户端同时向两个节点发送更新数据的命令,结果节...阅读全文

golang 接口

在本章中,将要学习一个新的领域。我们将学习使用面向对象编程的灵魂去构建程序,让我们一起做这件事吧。 What is an interface? 简单的说,接口就是一组方法签名的集合。我们使用一个接口来识别一个对象的能够进行的操作。 举例来说,在以前的章节中,我们看到Student和Emlpoyee都可以执行SayHi函数,但是他们的运行结构是不同的,但是这个是无关紧要的,本质是他们都可以说“Hi”(这部分下边的内容会有体现)。 我们假设Student和Employee实现了另外一个共同的函数Sing。Employ实现了SpendSalary函数,与此相对应Student实现了BorrowMoney函数。 所以Student实现了SayHi、Sing和BorrowMoney函数,Employe...阅读全文

博文 2017-12-07 08:04:46 卢春风

基于C++学习Go语言——数据类型之复合数据类型

本文讨论复合数据类型。C++中复合数据类型只有数组和结构体,Go中增加了两种复合数据类型slice和map。Go中的数组和结构体与C++的没有差别,都是聚合结构。数组是由同构的元素组成,结构体是由异构的元素组成,二者都有固定大小的内存。slice与map则是动态的数据结构,它们将根据需要动态增长。本文主要讨论slice和map...阅读全文

博文 2018-07-07 14:02:07 afterWards

go channel详解之源码分析

作为golang并发编程思想的重要组成,channel(通道)非常重要,和goroutine(go协程)一起使用,用来实现go的CSP(Communicating Sequential Processes)并发模型。 Do not communicate by sharing memory; instead, share memory by communicating 不要以共享内存的方式来通信,相反,要通过通信来共享内存。 因为channel的重要性,有必要对其原理和源码进行学习,在参考了网络上各种大牛的分享后,将其作为笔记记录下来,如有不足之处,还请指正。 源码路径: go1.11/src/runtime/chan.go channel结构体 type hchan struct { //...阅读全文

博文 2019-03-12 11:34:44 smoke_zl

“三次握手,四次挥手”你真的懂吗?

目录 什么是“3次握手,4次挥手” TCP服务模型 TCP头部 状态转换 为什么要“三次握手,四次挥手” 三次握手 四次挥手 “三次握手,四次挥手”怎么完成? 三次握手 四次挥手 为什么建立连接是三次握手,而关闭连接却是四次挥手呢? “三次握手,四次挥手”进阶 ISN 序列号回绕 syn flood攻击 无效连接的监视释放 延缓TCB分配方法 使用SYN Proxy防火墙 连接队列 半连接队列满了 全连接队列满了 命令 小结 “三次握手,四次挥手”redis实例分析 总结 参考资料 记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去...阅读全文

博文 2019-07-22 22:15:32 qcrao-2018

Golang 基础数据类型(二)

强制类型数据转换 类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go语言类型转换的基本格式如下: type_name(expression) 在做强制类型转换时,需要特别注意数据长度被截断而发生的数据精度损失(比如将浮点型转换为整型)与值溢出(值超过转换目标类型的值范围时)。 func main() { num := 5 num1 := 11 num2 := float32(num) //把整型转换成浮点型 num3 := float32(num1) mean := num1 / num //原来的运算 mean1 := num3 / num2 //转换后的运算 fmt.Println("没有经过类型转换的值:", mean) fmt.Println("经过类型转换的值:", m...阅读全文

博文 2020-06-03 13:32:42 sunlingbot

云数据库 Redis 版使用教程

课程介绍 云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore 课时列表 • 课时1:Redis总体介绍 • 课时2:pub/sub应用场景与使用接口 • 课时3:如何使用云Redis控制台 • 课时4:实例创建 • 课时5:数据库管理 • 课时6:连接数据库 • 课时7:数据迁移 • 课时8:备份与恢复 开始学习http://click.aliyun.com/m/27849/ ...阅读全文

Golang并发(三) - Channel

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 Channel通道介绍 什么是channel, channel可以理解为goroutine之间通信的通道。一端发送数据方到达接收数据方的桥梁。 声明通道 每个channel都有一个与之相关联的类型, 这种类型是信道允许传输的数据类型。 channel的零值是nil, 一个nil channle没有任何用途。因此必须使用类似map和slice的方式定义。 package m...阅读全文

博文 2018-03-14 15:33:06 90design

go 回调函数

package main import "fmt" // go 回调函数 func main() { /* 高阶函数: 根据go语言函数的数据类型的特点,可以将函数作为另一个函数的参数 fun1() fun2() 将fun1函数作为fun2函数的参数: fun2函数:高阶函数 接受一个函数作为参数的参数,叫做高阶函数 fun1函数:回调函数 作为另一个函数的参数的函数,叫回调函数 */ fmt.Printf("%T\n", add) //func(int, int) int fmt.Printf("%T\n", oper) //func(int, int, func(int, int) int) int res1 := add(1, 2) fmt.Println(res1) // 3 res...阅读全文

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要: SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操作的,那么我们将很容易理解怎么优化SQL写法。 **点此查看原文:http://click.aliyun.com/m/41382/** **SQL基础有这些操作(按照执行顺序来排列):** from join(left join, right join, inner join, outer join ,semi join) ...阅读全文

兄弟连区块链教程btcpool矿池源码分析核心机制总结及优化思考

兄弟连区块链教程btcpool矿池源码分析核心机制总结及优化思考,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# btcpool矿池-核心机制总结及优化思考## 核心机制总结### ①gbtmaker* 监听Bitcoind ZMQ中BITCOIND_ZMQ_HASHBLOCK消息,一有新块产生,将立即向kafka发送新Gbt* 另默认每5秒间隔(可从配置文件中指定)主动RPC请求Bitcoind,获取Gbt发送给kafka* Gbt消息大小约2M,含交易列表### ②jobmaker* 同时监听kafka KAFKA_TOPIC_RAWGBT和KAFKA_...阅读全文

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

你不知道的go channel

最近在开发过程当中遇到了几个goroutine通信的问题,我觉得这几个问题非常具有代表性,因此拿出来和大家分享一下。 检查channel是否关闭 开发过程当中有遇到这样的一种情况,需要检查channel是否关闭,如果关闭则不进行相应操作,否则会panic等现象。在golang的select语法当中,default分支可以解决上述问题,请看如下例子: closechan := make(chan int,0) dchan := make(chan int,0) select{ case <- closechan: fmt.Println("channel already closed.") return default: fmt.Println("channel not closed, do ...阅读全文

「Go学习笔记」2.Go语言由什么组成?

文链接 https://juejin.im/post/5daad1ed6fb9a04e270fb0ee 标识符 Go语言标识符是用于标识变量、函数或任何用户自定义项目的名称(程序实体),这个标识符就类似java中的数据类型(基本数据类型、引用数据类型)。标识符有两种类别,一种是用户自定义的标识符,它作为程序的实体存在。另一种标识符成为预定义标识符,是Go语言源代码中声明的。例如: 数据类型bool(true和false)、byte、uint、uint8、uint16、uint32、uint64、int、int8、int16、int32、int64、float32、float64、string、uintptr。 内建函数名append、cap、close、complex、copy、delete...阅读全文

博文 2019-10-19 18:02:38 码处高效

4. Go 语言数据类型:byte、rune与字符串

Hi,大家好。 我是明哥,在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. byte 与 rune byte,占用1个节字,就 8 个比特位,所以它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符。 如下这段代码,分别定义了 byte 类型和 uint8 类型的变量 a 和 b import "fmt" func main(...阅读全文

博文 2020-04-26 13:33:04 Python编程时光

兄弟连区块链教程btcpool矿池源码分析核心机制总结及优化思考

btcpool矿池-核心机制总结及优化思考 核心机制总结 ①gbtmaker 监听Bitcoind ZMQ中BITCOIND_ZMQ_HASHBLOCK消息,一有新块产生,将立即向kafka发送新Gbt 另默认每5秒间隔(可从配置文件中指定)主动RPC请求Bitcoind,获取Gbt发送给kafka Gbt消息大小约2M,含交易列表 ②jobmaker 同时监听kafka KAFKA_TOPIC_RAWGBT和KAFKA_TOPIC_NMC_AUXBLOCK,以支持混合挖矿 接收的Gbt消息,如果与本地时间延迟超过60秒将丢弃,如果延迟超过3秒将打印log 可用的Gbt消息,将以gbtTime+isEmptyBlock+height来构造key写入本地Map,另gbtHash也会写入本地队列...阅读全文

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

8. Go 语言流程控制:if-else

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 条件语句模型 Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 今天先来讲讲 if-else 条件语句 Go 里的条件...阅读全文

博文 2020-04-30 08:32:41 Python编程时光

Golang入门2-数据类型

环境: go1.11.2 linux/amd64(Ubuntu 18.04) 注:本文内容主要来自Golang中文社区 mp.weixin.qq.com/s/xmV3yWsDc… mp.weixin.qq.com/s/h2mV1zZ_C… 前菜 因为数据类型跟变量息息相关,所以这里会先讲述Golang变量的几种声明方式。 1.var name type 比如 var i int, 表示声明了一个int类型的变量,名字为 i。这时候只是声明,并没有赋值,如果变量没有赋值,Go会自动进行赋值,而int类型的默认值为0。 2.var name type = value 第一种方式的进化,在声明变量的时候便赋予了初始值 3.var name = value(类型推断) 比如 int i = 8, 此...阅读全文

博文 2019-08-18 21:04:17 言淦

Go 译文之如何构建并发 Pipeline

作者:Sameer Ajmani | 原文:https://blog.golang.org/pipel... 译者前言 这篇文章来自 Go 官网,不愧是官方的博客,写的非常详细。在开始翻译这篇文章前,先简单说明两点。 首先,这篇文章我之前已经翻译过一遍,但最近再读,发现之前的翻译真是有点烂。于是,决定在完全不参考之前译文的情况下,把这篇文章重新翻译一遍。 其二,文章中有一些专有名字,计划还是用英文来表达,以保证原汁原味,比如 pipeline(管道)、stage (阶段)、goroutine (协程)、channel (通道)。 关于它们之间的关系,按自己的理解简单画了张草图,希望能帮助更好地理解它们之间的关系。如下: 强调一点,如果大家在阅读这篇文章时,感到了迷糊,建议可以回头再看一下这张...阅读全文

博文 2019-08-06 12:02:39 波罗学

2020教你深入理解Golang之channel

前言Golang在并发编程上有两大利器,分别是channel和goroutine,这篇文章我们先聊聊channel。熟悉Golang的人都知道一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在sync包中提供了传统的锁机制,但更推荐使用channel来解决并发问题。这篇文章会先从channel的用法、channel的原理两部分对channel做一个较为深入的探究。channel用法什么是channel从字面上看,channel的意思大概就是管道的意思。channel是一种go协程用以接收或发送消息的安全的消息队列,channel就像两个go协程之间的导管,来实现各种资源的同步。可以用下图示意: channel的用法很简单: func main() {...阅读全文

博文 2020-02-17 20:32:48 即将秃头的Java程序员

golang:基础数据类型

基础数据类型 整型 int,uint是根据CPU平台机器字大小决定取值范围。 & 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 默认值 var a1 int //0 var a2 float64 //0 var a3 bool //false var a4 byte //0 var a5 rune //0 var a6 []int //[] var a7 []byte //[] var a8 map[int64]int64 //map[] var a9 string //空 var a10 complex64 //(0+0i) 溢出情况 一个算术运算的结果,不管是有符号或者是无符号的,如果需要更多的bit位才能正确表示的话,就...阅读全文

博文 2018-09-07 20:34:40 super大橙子