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

Go语言_基础学习篇

GO文件目录结构 该图是go-windows的目录结构 如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹 src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序 bin文件夹:go的每个项目生成的二进制可执行程序。windows下会生成.exe文件,linux下会生成可执行文件。Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),也是可以执行的。这是让PHP,Python等脚本语言望成莫及的。 pkg文件夹:第三方库。里面存放你的项目中引用的第三方库(非官方已经提供的库)。 Go基础知识 变量赋值:(有下面几种形式, 都是将a 设...阅读全文

博文 2016-07-11 02:00:07 yjf512

Go语言(golang)包设计哲学/原则与项目结构组织最佳实践

总结下Go的package设计哲学 明确目的 在准备设计一个包之前,我们需要明确它的目的。 包的命名就必须明确体现其目的,而不仅仅是为了存放代码。像标准库的io,http,fmt这些包名就很好,而像util.helper,common这种命名就是反面教材。 可用性 想想使用这个包的人真正的需求,包的使用一定要直观、简单。 在不断迭代开发、优化、完善的时候,不能让引用这个的程序出错。 防止出现需要类型断言具体类型的需求。 让单个包的代码量简化到最少,减少bug,易于掌控。 可移植性 始终追求最高可移植性。 如果包合理实用,就不要过多在意其它人的意见,没有适合所有人的完美的包。 不要让包成为单一依赖点(即所有其它包都依赖它),每个包都有自己的设计目的,可能多个包会有重复的类型,即便重复定义也不要...阅读全文

博文 2017-09-03 07:34:46 imroc

Go语言_基础学习篇

2012-06-02 07:36 by 轩脉刃, 3925 阅读, 14 评论, 收藏, 编辑 GO文件目录结构 该图是go-windows的目录结构 如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹 src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序 bin文件夹:go的每个项目生成的二进制可执行程序。windows下会生成.exe文件,linux下会生成可执行文件。Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),也是可以执行的。这是让PHP,Python等脚本语言望成莫及的。 pkg文件夹:第三方库。里面存放你的项目中...阅读全文

博文 2015-01-21 15:00:18 u010469632

BUTXO详解

在比原链中,每个交易消耗之前交易生成的BUTXO 然后生成新的 BUTXO,账户的余额即所有属于该地址的未花费 BUTXO 集合,BTM 的全局状态即当前所有未花费的BUTXO 集合。我们用一个具体的例子说明。 比原的状态是通过BUTXO来实现的。比原的价值转移是通过转账实现的。更特别地是,我们可以通过创建转账花费1个或多个,并且将他们的BUTXO作为转账输入。比原BUTXO不能部分花费。如果我们花费0.5个比原(使用他们仅有的BUTXO,价值1比原),他们需要特意地发回0.5个比原。如果他们不发送这部分,那么这个0.5比原就会丢失,并且给到挖出转账的矿工。过程如下图所示: 比原链的BUTXO没有包含用户账户余额。通过比原,用户可以简单地持有私钥,在任何时间点都可以进行一个或者多个BUTXO...阅读全文

博文 2019-03-13 15:34:45 比原链Bytom

go中的main函数和init函数

Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。 Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package main就必须包含一个main函数。 程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用...阅读全文

博文 2016-04-11 02:00:09 gbxvip

Golang 支持交叉编译

版权声明:本文为Jumbo原创文章,采用[知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议],转载前请保证理解此协议 原文出处:https://www.jianshu.com/p/a32d730084e1 Golang 支持交叉编译 在一个平台上生成另一个平台的可执行程序 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GO...阅读全文

化繁为简才是加密货币市场更具吸引力为更多人所用的关键

在加密货币行业因为安全性使然,导致很多安全平台在设计系统的时候对安全措施的层层加密,把平台的安全性达到顶点。我觉得这对于项目方来说出发点是没有问题的,因为资产的安全关乎着每一位用户对平台的热衷性。但是随着币圈市场的发展,我们不难发现很多项目方在设计平台安全功能的时候,在安全方面做得成本过高且复杂,这样容易丢失一大部分新的用户,同时用户的再教育成本相对来说就会比较昂贵了。 那么我们在设计平台的时候,如何才能让用户快速、轻松地购买数字货币,并轻松的入场呢?首先我们先看一下什么样的平台更为人所用呢?从我的角度来看:一套简单、安全的平台只会使自己的加密货币市场更具吸引力,并为更多人所用。 这是为什么呢?因为目前的币圈市场除了早期进入币圈的用户,还有现在进入币圈已经有了自己热衷的平台的用户,剩下的就是...阅读全文

博文 2019-10-21 21:28:12 yanfaruiec

NoSQL笔记

#### 非关系数据库的相关问题 * 什么是最终一致性(Eventual Consistency)? "过程松,结果紧,最终结果必须保持一致性" 最终一致性模型是用于分布式系统中,用来实现高可用性,确保在如果一个更新操作发生,那么最终一定可以读取到这次更新操作的发生。最终一致性在分布式领域广泛使用,采用多个副本形式。如果一个系统实现了最终一致性,那么这个系统可以成为收敛的,或者叫做实现了副本收敛。相比与传统的ACID,最终一致性提供的是BASE(Basic Availablilty, Soft state, Eventual Consistency)服务。 最终一致性缺点:在系统达到副本收敛之前,系统有可能返回任何值。 * NoSQL是如何解决可伸缩性的挑战的...阅读全文

什么样的网站更易于网络推广?

很多传统行业与新兴企业开始逐步踏入互联网,很多企业看到了网络所存在的无限资源,想要在互联网圈子里分到一杯羹。想要入驻这个互联网圈子,首先你要拥有一个能和同行叫嚣的“资本”——网站。这个资本不但要搭建出来,还要搭建的更易于你去宣传推广,搭建的让用户喜欢,这样才能更好的发挥作用。说到网站建设,对于很多企业与行业来讲,是一件进军互联网的大事,他们往往在网站建设的时候花费太多的准备工作,错失了许多上线的黄金机会。 互联网在日新月变,每时每刻都有企业与行业进入到这个圈子。但是也有许多被互联网的浪潮所推翻,推翻的原因在于他们不懂得在这个网络的浪潮中找到自己的生存方式,没有找到合适的出路。在互联网这个大集团里,最忌讳的是故步自封。你要做的是会看“大哥方向”,何为“大哥方向”?那就是你行业的龙...阅读全文

【转载】有软件开发,就要有软件测试!

移动app市场很大且还在不断发展。有多大呢?两个最流行的移动平台,iOS和Android,为我们提供了一些数据: ▪▪ 1,250,000个可供下载的 app(去年增长了85%) ▪▪ 63,000个新提交的app(并没有全部通过) ▪▪ 每月20亿的下载量 ▪▪ 765,000,000名活跃的iOS和Android用户 ▪▪ 70,000名专门的app开发员 这些数据是相当惊人的。哪儿有软件开发,哪儿就(应该)有测试!本文会试着回答以下问题:移动app测试需要专业测试知识吗?还是只要常识就行?接下来,我们来分析测试移动app和“常规”软件的区别并试着找出答案。 测试策略中的变化 当然,一个好的测试策略是基于产品风险分析的。“常规”...阅读全文

一个可以走流程的engineercms工程师知识管理系统

我们用于管理文件的系统,比如网盘云盘等,并不具备流程功能,所谓流程,本质是修改文档状态,比如,从初始状态,不同权限的人登录,查看这个文件,具有修改这个文档状态的权限,比如将初始状态修改为已审查状态。当然,一个通用的流程,比如java界,还是有不少现成的流程设计软件,golang界,非常少,所以我用了flow这个,将工作流程(文档流程)纳入engineercms后,就更接近bentley的projectwise了。还缺最后一点点,即文档协同的时候,独占性,即锁定和释放,轮训客户端连接状态,还缺客户端,比如用walk做一个客户端界面,就可以本机进行图纸设计或文档编辑缓存,然后自动更新服务器上的文件。https://github.com/3xxx/engineercm...阅读全文

博文 2019-02-20 23:34:42 工程设计

golang实现一致性hash

package main //一致性哈希(Consistent Hashing) //author: Xiong Chuan Liang //date: 2015-2-20 import ( "fmt" "hash/crc32" "sort" "strconv" "sync" ) const DEFAULT_REPLICAS = 160 type HashRing []uint32 func (c HashRing) Len() int { return len(c) } func (c HashRing) Less(i, j int) bool { return c[i] < c[j] } func (c HashRing) Swap(i, j int) { c[i], c[j] = c[...阅读全文

博文 2019-08-13 12:32:49 成功的失败者

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

HDFS体系结构介绍

HDFS,Hadoop分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集的应用程序。 **HDFS的设计特点是:** 1. 大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。 2. 文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。 3. 流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。 4. 廉价硬件,HDFS可以应用在普通P...阅读全文

golang 版本的 ring buffer (变长,持久化)

最终的实现代码: https://github.com/esdb/drbuffer本文是整个 kafka agent 实现过程中的第一步:https://segmentfault.com/a/1190000004567774 内存结构 每个写入的packet格式如下 --- packet_size(uint16) --- packet_body([]byte) --- 通过存储packet的长度实现变长数据的存储。目标是把这样的内存结构存储到一个ring buffer里。整体的ring buffer的结构如下 --- <-- nextReadFrom packet 1 --- packet 2 --- <-- nextWriteFrom ... 除了每个packet是一个变长的结构体,貌似并...阅读全文

博文 2017-02-09 08:12:00 taowen

Golang 数据结构:图

文链接:blog本文简要介绍图的 2 种实现及其 BFS 遍历。参考:golang-data-structure-graph 前言 新坑 最近在校事情不多,趁着还记得就开了个新坑 algorithms,把常用数据结构和算法总结了一下。每个算法都有 README.md 介绍算法的运行流程、GIF 演示、复杂度分析及适用场景;每种数据结构会介绍基本概念、操作和应用场景。 参考书籍 《数据结构与算法分析:C 语言描述》《算法与数据结构题目最优解》 图 图这种数据结构是网状结构的抽象,现实生活中有很多例子,比如航班路线网络、社交网络等。关于图的节点、边、权值、有向无向和强弱连通性等基础概念可参考第一本书第八章。 对于上方的无向图,有两种常见的表示方法: 邻接矩阵 对于节点 u 指向节点 v 的边 (...阅读全文

解决连通性问题的四种算法

最近做 B 站弹幕分析 的项目,学习 Jieba 中文分词的动态规划算法,发现自己的算法知识待系统的学习,遂读 Sedgewick 的《算法 C 实现第三版》,这一系列算法的代码放在 Github,文章会同步到 SF,随意转载。 连通性问题 问题概述 先来看一张图: 在这个彼此连接和断开的点网络中,我们可以找到一条 p 点到 q 点的路径。在计算机网络中判断两台主机是否连通、在社交网络中判断两个用户是否存在间接社交关系等,都可以抽象成连通性问题。 问题抽象 可将网络中的点(主机、人)抽象为对象,p-q 表示 p连接到q,连通关系可传递: p-q & q-r => p-r;为简述问题,将两个对象标记为一个整数对,则给定整数对序列就能描述出点网络。 如下图结点数 N = 5 的网络(使用 0 ~...阅读全文

博文 2018-01-28 15:34:36 wuYin

备战CKA每日一题——第6天 | kube-scheduler调度器高级调度:亲和性反亲和性调度,Deployment升级回滚

本活动在微信公众号【我的小碗汤】上举行,有送书活动!这里参与答题不能参与到送书活动哦! 昨日考题 通过命令行,创建两个deployment。 需要集群中有2个节点 ; 第1个deployment名称为cka-1122-01,使用nginx镜像,有2个pod,并配置该deployment自身的pod之间在节点级别反亲和; 第2个deployment名称为cka-1122-02,使用nginx镜像,有2个pod,并配置该deployment的pod与第1个deployment的pod在节点级别亲和; 最好提交最精简的deployment yaml,如果评论被限制,请提交反亲和性配置块yaml,也可多次评论提交 昨日答案 第一个deployment:cka-1122-01 apiVersion: ...阅读全文

一、Go语言由来与关键时间线

本系列文章均为学习过程中记录的笔记,欢迎和我一起来学习Go语言。 全文使用环境如下: Go语言版本:1.14 操作系统:deepin 使用工具:Goland开发工具 Go语言,又称作Golang,是Google在2009年11月开源的开发语言。是一门静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。 Go是罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。 1、Go于2009年11月正式宣布推出,成为开放源代码项目。 2、在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区...阅读全文

博文 2020-04-29 00:34:25 cn華少

老司机带你用 Go 语言实现 Raft 分布式一致性协议

老司机带你用 Go 语言实现 Raft 分布式一致性协议  随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。   为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。任何一个分布式系统都无法同时满足 Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)这三个基本需求,最多只能满足其中两项。 但是,一个分布式系统无论在 CAP 三者之间如何权衡,都无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。所...阅读全文

博文 2017-03-23 08:20:49 chauncy

Key/Value 数据库SummitDB

SummitDB 是一个内存中的 Key/Value 数据库,支持数据持久化到磁盘,使用 Raft 一致性算法,遵循 ACID ,内建事务支持和强一致性模型。支持自定义索引、地理数据和 JSON 文档,支持用户定义 JS 脚本。兼容简化的 Redis API。 示例: SummitDB 支持 Linux, OSX, Windows, FreeBSD, ARM (Raspberry PI) 等系统...阅读全文

开源项目 2017-10-05 23:00:05 网友

golang项目代码重构(二)

使用interface重构代码,面向接口,减少重复代码 项目背景 需要提供节目,节目集数据的增删改查,数据库使用ES(elasticsearch) 重构前 →_→ 本文着重强调用接口重构的思路,所以只选取读取功能作为例子 数据结构 type Video struct{ VideoID string `json:"video_id"` //包含很多节目的属性,如节目类型,上下线状态等 } type Show struct{ ShowID string `json:"show_id"` //包含很多节目集的属性,如评分,演员等 } ES中对应两个index,video,show 分别对应上边的两个结构。重构前读取功能实现 package es import ( "context" "log" "...阅读全文

博文 2018-12-24 17:34:46 Mandelbrot_Kobe

Riot is a distributed key/value system basing raft algorithm, leveldb and bitCask backend storage!!!

raft算法种类的实现有很多,比较流行的是etcd raft和hashicorp raft,这两个都是Go语言实现的raft算法库,并且都大量应用到生产环境中,可靠性高。由于本人对hashiro raft熟悉一点,刚好又对Go语言有兴趣,所以选择了hashicorp raft来实现一个简单的分布式key/value系统. 系统设计的基本目标: 具有容错性 - 可以在线自动线性扩展节点 - 可以自动增删节点 - 具体增删查改操作 - 可以适配多种存储引擎 - 支持日志/快照重建 https://github.com/laohanlinux/riot https://laohanlinux.github.io/2016/04/25/%E4%BD%BF%E7%94...阅读全文

简单可移植的容器运行时 Docker Containerd

Containerd 是从 Docker Engine 中分离,并捐赠到一个新的开源社区独立发展和运营的项目,是一个工业标准的容器运行时,注重简单、 健壮性、可移植性。 Containerd  目标是提供一个更加开放、稳定的容器运行基础设施。一方面最终客户将受益于一个稳定和良好支持的容器基础设施。另一方面,各家厂商可以利用 Containerd 作为一个标准化、灵活的容器操作层,可以非常方便地提供定制化的网络、存储和容器编排。 ![image](https://static.oschina.net/uploads/space/2016/1216/211612_eUJ8_2896879.png) ![image](https://static.oschina.net/uploa...阅读全文

golang服务健壮性---(异常处理)

在程序开发时我们都会认为外部提供的接口或者数据都是不可信的。比如函数总是要检查入参的正确性,在做单元测试的时候要把外部提供的接口给屏蔽掉等。之所以都会这么做,主要还是很难保证自己还是其他人可以提供一个没有任何缺陷的接口。既然接口是人写的,那么多少会有些考虑不到的地方,这时候接口在被调用的时候就有可能发生错误或者异常。这里讨论golang中的异常处理机制,其实就是panic和recover这两个接口的运用,类似于C++中的try和catch。 1、golang中的panic panic,中文解释为恐慌。举个例子,单代码中出现这样的语句的时候,相信所有开发人员在产品上线的时候都会恐慌: var MakecoreData *int = nil *MakecoreData = 10000 如果不做任...阅读全文

博文 2018-08-13 14:31:34 m0_38132420

[Go 教程系列笔记] 并发介绍

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP Go 是一种并发语言,而不是并行语言。在讨论如何在Go中处理并发之前,我们必须首先了解什么是并发以及它和并行性的区别。 什么是并发? 并发是一次处理大量事情的能力。举个例子: 让我们假设一个人慢跑。在他早晨慢跑时,...阅读全文

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

fabric-ca国密改造记录及思路

Fabric CA提供以下功能: 1、身份注册,或者将连接到LDAP作为用户注册; 2、颁发登录证书(ECerts); 3、颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性; 4、证书续期与撤销看一个 fabric-ca服务器在Hyperledger Fabric中架构图如下:​ 有两种与Hyperledger Fabric CA服务器交互的方式:通过Hyperledger Fabric CA客户端或通过一个Fabric SDK。 与Hyperledger Fabric CA服务器的所有通信都是通过REST API进行的;fabric ca中国密改造需要修改的程序目录如下:一、cmd目录 1、cmd目录主要提供了fabric-ca-client,fabric-ca-server...阅读全文

博文 2019-11-07 09:22:06 545305939

Go 语言中命名规范——如何简短却更具描述性

> 在计算机科学与技术中,有两件事情最难,第一是缓存无效,第二就是给一些东西命名 —— Phil Karlton 上面的话可不是一个笑话。写代码很容易,但是阅读起来却很痛苦。你是否有想知道一个变量具体指什么或者某个包的具体含义是什么这种类似的经历?这就是为什么我们需要一些规则和约定。 不过,约定虽然能够让我们的生活变得更轻松,但是也容易被高估和滥用。设置一些合理的命名约定和规则非常重要,不过盲目的遵循它也可能带来很多弊端。 在这篇文章里面,我将介绍在[Go](https://golang.org/)中,一些重要的变量命名约定(官方的以及非官方的规则)以及在什么场景下会存在滥用的情况,特别是那些短变量命名的场景。篇幅有限,包和文件的命名以及项目结构命名有关的内容不在本文讨论范围内,他们应该可以...阅读全文

博文 2020-05-31 12:21:49 JYSDeveloper

分布式从ACID、CAP、BASE的理论推进

创声明作者: 刘丹冰Aceld,微信公众号同名 作为当今互联网后端技术栈工程师、无论Golang、Java或者其他系,分布式的理论概念都逐步成为必备理论基础知识之一, 本文主要讨论分布式的CAP理论的推进,这是你走进分布式大门的第一块敲门砖。 提纲:一、从本地事务到分布式理论二、ACID理论三、CAP理论四、CAP理论“3选2”论证五、BASE理论 附加:分布式概念 分布式实际上就是单一的本地一体解决方案,在硬件或者资源上不够业务需求,而采取的一种分散式多节点,可以扩容资源的一种解决思路。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。 那么在了解分布式之前,我们应该从一体式的构造开始说明...阅读全文

博文 2020-03-27 10:32:48 aceld

Dockerfile 最佳实践

Dockerfile 最佳实践 Why Docker 作为非常优秀的轻量级 PaaS 解决方案,得到了主流云服务平台的先后支持,配合 Docker Registry Hub 提供高质量的 Docker Image 以及 Fig 进行 Containers 的管理,吸引了全球的开发者将自己的服务迁移到 Docker Containers 上面,从而提高开发和部署效率。作为快速发展的新技术,很多高质量的技术文章和使用经验都是英文的,我自己在学习 Docker 的过程中,在不同的网站和个人 Blog 就看到过很多,所以,就想着把我看到的高质量文章翻译过来放在这个 Blog,一方面翻译的过程是加深理解的过程,另一方面把散落在各处的好文章集中在一个地方并翻译成中文,便于之后的分享以及回顾。 What ...阅读全文

博文 2017-02-10 13:44:16 Xiaohui Wang

Golang UDP的连接性(网关如何阻碍Golang的UDP通信)

自知乎专栏(防止挂掉):https://zhuanlan.zhihu.com/p/94680036golang中udp的连接性 曾经浮华装逼招雷劈​关注他golang中udp分为已连接和未连接两种,两者在发送、接收消息行为模式上有重大区别背景前段时间,我们组开发一个紧急需求,需要与其它部门某组进行协议交互,暂且称之为B组。 B组底层通信采用UDP形式,使用pb为传输协议,本来很简单的事情,可是联调过程中却遇到一个大坑,关于golang中udp的连接性问题。我们这边采用golang技术栈,以DialUDP的接口与B组交互,先send数据,再recv数据。就这么简单的逻辑,却出问题了,B组能收到我们的请求数据,我们这边却无法接收到B组的返回数据。经过与B组交流,他们那边的架构比较奇怪。我们设计系...阅读全文

博文 2020-05-04 23:32:44 鹿沐浔

一致性hash算法原理及golang实现

概述 这里存在一种场景, 当一个服务由多个服务器组共同提供时, key应该路由到哪一个服务.这里假如采用最通用的方式key%N(N为服务器数目), 这里乍一看没什么问题, 但是当服务器数目发送增加或减少时, 分配方式则变为key%(N+1)或key%(N-1).这里将会有大量的key失效迁移,如果后端key对应的是有状态的存储数据,那么毫无疑问,这种做法将导致服务器间大量的数据迁移,从而照成服务的不稳定. 为了解决类问题,一致性hash算法应运而生. 1. 一致性hash算法特点 在分布式缓存中, 一个好的hash算法应该要满足以下几个条件: 均衡性(Balance) 均衡性主要指,通过算法分配, 集群中各节点应该要尽可能均衡. 单调性(Monotonicity) 单调性主要指当集群发生变化...阅读全文

Golang设计模式(工厂方法模式)

工厂方法模式类图, image.png abstract_factory_test.go // abstract_factory_test package abstract_factory import ( "testing" ) func TestMotorbikeFactory(t *testing.T) { motobikeF, err := GetVehicleFactory(MotobikeFactoryType) if err != nil { t.Fatal("Create motorbike vehicle factory failed") } vehicle, err := motobikeF.GetVehicle(SportMotorbikeType) if err !=...阅读全文

[译] part 20: golang 并发介绍

文地址:Part 22: Introduction to Concurrency 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 Go 是一种并发语言,而不是并行语言。在讨论如何在 Go 中处理并发之前,我们必须首先了解什么是并发以及它与并行性的不同之处。 什么是并发 并发是指有处理多个事情的能力,用一个例子来解释。 可以比做一个人慢跑。在他早晨慢跑时,发现鞋带已经松了。然后,这个人停止了跑步,绑鞋带,然后又开始跑步。这是并发的典型示例。这个人能够处理跑步和系鞋带,也就是说,这个人能够处理很多事情,强调一段时间内能做多个事情 :) 什么是并行,它与并发有什么不同 并行性是指同时做了很多事情。它可能听起来类似于并发,但它实际上是不同的。 我们还是用慢跑的例子来理解,我们假设这个人...阅读全文

博文 2019-04-02 00:34:38 咔叽咔叽_7647

Hadoop中HDFS优点有哪些?

随着互联网数据规模的不断增大,对文件存储系统提出了更高的要求,需要更大的容量、更好的性能以及更高安全性的文件存储系统,与传统分布式文件系统一样,HDFS分布式文件系统也是通过计算机网络与节点相连,但也有优于传统分布式文件系统的优点。 **1. 支持超大文件** HDFS分布式文件系统具有很大的数据集,可以存储TB或PB级别的超大数据文件,能够提供比较高的数据传输带宽与数据访问吞吐量,相应的,HDFS开放了一些POSIX的必须接口,容许流式访问文件系统的数据。 **2. 高容错性能** HDFS面向的是成百上千的服务器集群,每台服务器上存储着文件系统的部分数据,在集群的环境中,硬件故障是常见的问题,这就意味着总是有一部分硬件因各种原因而无法工作,因此,错误检测和快速、自...阅读全文

【CMake 系列】(二)第三方依赖管理

接着上次的【CMake系列】(一)入门 继续讲。 这次,主要说说 CMake 的依赖管理。 依赖管理 当我们说 CMake 的依赖管理的时候,往往说的是 C/C++ 项目的依赖管理,但是这门古老的语言,到目前为止,还是没有一个官方大一统的依赖管理工具。 而回头看看它的后来者,Ruby 有 gem、Node.js 有 npm、 Golang 有 go mod、Rust 有 cargo。 你可能会提到 C++ 在 C++20 中,引入了 Module,只是目前 编译器的支持 还是不够,更别提那些著名 C++ 项目的支持了。假如之后能做到如现代语言一条命令安装完所有依赖就能直接使用的话,家祭无忘告乃翁。 那么,CMake 给我们提供了什么样的支持?可以这么说,支持 CMake 的项目,基本上都会提...阅读全文

博文 2020-05-31 22:32:54 xizhibei

doublejump - 快速、简洁的一致性哈希库,Google Jump 算法的改进版

Overview doublejump 的核心是 Google Jump 一致性哈希算法,这个实现弥补了该算法的最大缺点:不能删除节点。 传送门 https://github.com/edwingeng/doublejump Benchmark BenchmarkDoubleJumpWithoutLock/10-nodes 50000000 27.6 ns/op BenchmarkDoubleJumpWithoutLock/100-nodes 30000000 42.7 ns/op BenchmarkDoubleJumpWithoutLock/1000-nodes 30000000 54.1 ns/op BenchmarkDoubleJump/10-nodes 20000000 72.9 n...阅读全文

博文 2018-11-19 19:34:40 edwingeng

[Go 教程系列笔记]多态-Go中的OOP

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP Go 中的多态性是在接口的帮助下实现的。正如我们已经讨论过的,接口可以在Go 中隐式实现。如果类型定义了接口中声明的所有方法,则类型实现接口。让我们看看在接口的帮助下如何在Go中实现多态性。 使用接口的多态性 任何...阅读全文

博文 2019-08-14 17:02:52 xfstart07

重新定义数据库的时刻,阿里云数据库专家带你了解POLARDB

摘要:POLARDB是阿里云ApsaraDB数据库团队研发的基于云计算架构的下一代关系型数据库,其最大的特色是计算节点与存储节点分离,借助优秀的RDMA网络以及最新的块存储技术。POLARDB不但满足了公有云计算环境下用户业务快速弹性扩展的刚性需求,同时也满足了互联网环境下用户对数据库服务器高可用的需求。本文就带领大家了解什么是“云原生数据库”,云原生数据库的标准是什么,如何定义以及为何如此定义?为大家介绍下一代云原生数据库POLARDB的架构、产品设计、未来工作等内容。 以下内容根据演讲嘉宾视频分享以及PPT整理而成,PPT下载链接: http://click.aliyun.com/m/51144/。 演讲嘉宾简介:蔡松露(子嘉),阿里云云数据库总架构师,主要负责阿里云POLA...阅读全文

kafka的理论知识

kafka官网上介绍kafka是一个分布式流处理平台。 那什么是流处理平台呢,流处理平台有以下三种特性: 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。 可以储存流式的记录,并且有较好的容错性。 可以在流式记录产生时就进行处理。 第一个特性很好理解,我们可以用kafka去发消息和接受消息,做一个广播,这个很多工具都可以做到,redis也支持,自己实现也可以,但是kafka强大在他的高可用高性能和可靠性。 第二点,kafka他自己有个参数,log.retention.hours,日志删除的时间阈值(小时为单位),默认是168小时,也就是七天,这七天内的消息,你都可以重新消费到,也可以确定从何处开始消费。 第三点,kafka利用Kafka Streams,我们可以对kaf...阅读全文

博文 2020-03-02 01:32:46 yellowone

好程序员大数据入门学习之Hadoop技术优缺点

好程序员大数据入门学习之Hadoop技术优缺点(1)Hadoop具有按位存储和处理数据能力的高可靠性。(2)Hadoop通过可用的计算机集群分配数据,完成存储和计算任务,这些集群可以方便地扩展到数以千计的节点中,具有高扩展性。(3)Hadoop能够在节点之间进行动态地移动数据,并保证各个节点的动态平衡,处理速度非常快,具有高效性。(4)Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配,具有高容错性。Hadoop的缺点(1)Hadoop不适用于低延迟数据访问。(2)Hadoop不能高效存储大量小文件。(3)Hadoop不支持多用户写入并任意修改文件。Hadoop的核心组件Hadoop自诞生以来,主要出现了Hadoop1、Hadoop2、Hadoop3三个系列多个版本。H...阅读全文

MAY-Lesson 1

笔记 - unsafe Package unsafe contains operations that step around the type safety of Go programs. Packages that import unsafe may be non-portable and are not protected by the Go 1 compatibility guidelines. unsafe 库让 golang 可以像C语言一样操作计算机内存,但这并不是golang推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了golang的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。 unsafe.Sizeof Sizeof ...阅读全文

博文 2019-05-22 17:34:53 夜空一起砍猩猩

golang-101-hacks(21)——类型断言&类型开关

通过类型断言(type assertion)方式来判断接口的具体类型, Sometimes, you may want to know the exact type of an interface variable. In this scenario, you can use type assertion: x.(T) x”的类型必须为interface的变量,“T”表示是推断的类型。例如: x is the variable whose type must be interface, and T is the type which you want to check. For example: package main import "fmt" func printValue(v inte...阅读全文

博文 2019-06-23 23:32:43 羊羽shine

入门编程,一定要从C语言开始吗?

很多小伙伴在入门编程时,C语言课程开始的,但最近有的小伙伴问我,学编程一定要从C语言开始吗?直接学习JAVA可以吗?大雄建议:在选择编程语言之前,搞清楚自己的编程目的,有没特别想打磨一个产品出来?​​比如有些程序员想自己打造一款Java 游戏,所以他选择了java。所以,一定程度上取决于你的编程目的。C语言现在已经很成熟,它的各种语法规则、思想都已经确立起来了,并对现在的很多语言产生很大的影响。所以作为底层语言也是很多人在入门编程时想要第一个学习的。但是任何事物都有其优点和缺点,C语言也不例外。下面大雄带大家分别来看一下。C语言的优点C语言的优点有三个:代码量小运行速度快功能强大我们先看第一个优点,C语言的代码量很小,这是什么意思呢?也就是说如果要完成同样一个功能,用C语言编写出来的程序的容...阅读全文

博文 2019-01-17 17:03:54 wangzijuan

006_golang中的init函数和main函数

一、 (1)init函数 init 函数可在package main中,可在其他package中,可在同一个package中出现多次。 (2)main函数 main 函数只能在package main中。 (3)执行顺序如下图: golang里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。 虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。 go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都...阅读全文

博文 2018-06-02 16:30:01 arun-python

C/C++语言的适用性

在 2017年 本年度计算机语言榜这篇中, 我们汇报总结了 2017 年最最火的 TOP 20 计算机语言,全部的语言中,Java、C、C++ 名列前三。Java 凭着可移植性、可扩展性及其庞大的社区性傲视群雄,那麼最原始的 C 和 C++ 为什么依然成活至今?本文的创作者亦发表了自身的观点,他觉得,硬件访问、效率高、跨平台性、持续演进、应用领域广泛等等全是他们风靡迄今不可缺少的关键因素。 下列为译文: C 语言问世于 1972 年(45 年前),而 C ++ 问世于 1985 年。或许有些人会觉得在这般悠长的时间里,像 C、C++ 那样古老的语言早已日薄西山,显然你弄错: 访问硬件 在许多应用程序中浏览硬件是十分关键的,C 和 C ++ 能够或多或少让人完全控制硬件。直接操控硬件的益处有:...阅读全文

博文 2019-01-17 16:04:46 Yaphets123