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

gob 新的数据编码方式(序列化与反序列化数据)

介绍 数据在网络上传输,不同的服务端通信需要基于一定的协议进行交换数据。发送端encode编码数据,接收端decode解码数据。 常见的的一些数据编码方式:json,xml,proto buffers, html等 gob 与json,xml类似是一种基于go原生的数据 使用场景 为什么go 定义了新的一种数据编码方式? 常见的数据编码如json,xml等,是为了兼容已经存在的数据编码方式,可以与其他语言服务进行通信。 对于两端同样是go开发的服务,可以使用gob进行更快,更高效的数据传输。 优点 自描述数据格式:发送端与接收端无需沟通,定义两端统一的数据格式 传输速度更快,更高效 basic 基于gob编码的流数据,包含自描述类型信息,各项数据处理前包含类型信息 支持的类型:基础数据类型(...阅读全文

关于服务器端wkhtmltopdf依赖于X server的解决方案

背景 wkhtmltopdf这个库友好地支持将html文件转换为pdf文件,它基于QT的webkit进行渲染,因此依赖于操作系统的图形用户界面操作。 而服务器一般是运行级别3(即多用户状态下的字符终端界面),因此在服务器端直接调用wkhtmltopdf会报如下错误: qt.qpa.screen: QXcbConnection: Could not connet to display Cloud not connect to any X display 原因就在于wkhtmltopdf依赖于X server (linux 操作系统里面图形接口服务器的简称),而一般服务器运行在字符终端级别,并没有启动图形用户界面 ,因此产生无法连接到X display服务的错误。 解决方案 在 xvfb(X v...阅读全文

博文 2019-02-20 23:34:42 帅番茄

关于写文章的反思

看了一下我之前写的文章,有多少是水篇数?复制别人的列子有多少? 自已真正有心得的,又写了多少? 我过了需要用数量来证明自己的时候了 从今天开始,删掉那些水文,质量不高的,尽可能完善。 我可能写不了多好,但是我要求我写的东西能拿得出手。 补: session及JWT及Oath的使用。 MySql的sql语句优化。 Git遇到的问题及解决方案。 Golang的使用及避坑。 用心点...阅读全文

博文 2018-07-27 09:34:48 送你一碗大麦茶

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

golang grpc keepalive

最近遇到 grpc 客户端报错 `rpc error: code = Unavailable desc = transport is closing`,原因是连接长时间没有使用,被服务端断开,这种情况通过简单粗暴的重试策略可以解决,更加优雅的解决方案是增加保持连接策略 ## 服务端 ``` go var kaep = keepalive.EnforcementPolicy{ MinTime: 5 * time.Second, // If a client pings more than once every 5 seconds, terminate the connection PermitWithoutStream: true, // Allow pings even when there...阅读全文

博文 2019-11-27 20:24:57 hatlonely

1秒10亿数据! 阿里云日志服务再次升级

摘要: 日前,在“2017杭州·云栖大会”上阿里云宣布,日志服务与Splunk打通合作,同时面向亿级实时日志分析功能上线。兼容SQL92标准与JDBC协议,集中解决各类环境日志一站式需求,包括采集、存储、投递与查询分析等,将日志分析提升到全新高度,达到国内领先水平。 日常生活中人和物的活动会产生大量的数据,而日志是一种常用记录这类活动的载体。通过日志处理,分析可以帮助我们通过大数据找到背后的运作规律,做到业务的智能运维和运营。日志分析最终是拿到结果,但过程中往往需要通过软件(例如kafka、ELK、Flume)等组合搭建日志处理系统,这给使用日志分析工作带来很多问题和困扰。而阿里云日志服务是一种无托管的方案,无需用户关心琐碎的数据采集、扩容、维护、错误处理等工作,将精力集中投入在“分析...阅读全文

golang实现base62编码

package main import ( "fmt" "math" ) var base = []string {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","1","2","3","4","5","6","7","8","9","0"} func base62encode(num int) string { baseStr...阅读全文

博文 2016-08-31 13:00:06 black_OX

consul服务注册与服务发现的巨坑

最近使用consul作为项目的服务注册与服务发现的基础功能。在塔建集群使用中遇到一些坑,下面一个个的记录下来。 consul集群多node consul集群的node也就是我们所说的consul实例。集群由多个node组成,为了集群的可用性,需要超过半数的node启用server。如5个node中建议3个启用server模式,3个node组成的集群就2个node启用server模式。看到这里的时候你一定觉得没有什么问题呀,但是consul坑就是多。加入你的集群组成如下: Node Address Status Type Build Protocol DC Segment BJ-MQTEST-01 10.163.145.117:8301 alive server 1.0.6 2 iget-to...阅读全文

博文 2018-07-02 12:23:38 梦朝思夕

这个问题困扰了很久

~~~ 获取一个URL信息 那么很简单的一句话 就是 r.Host得到 func Test1(w http.ResponseWriter, r *http.Request) { fmt.Println(r.Host) } func Test2()string { //我有许多自定义函数,默认只传参数的那种, 由于需要功能需要, 需要传入个URL了 那么就需要r.Host了 //那么问题来了 //我为了得到这个r.Host实时得到这个URL,难道我几十个函数都要修改在参数多写一句 r *http.Request 吗? //这样GO也太坑了吧 , //比如这样直接读取host不可以 纳闷 有什么解决办法吗 比如下面的 提供我几十个函数调用 r...阅读全文

分步式一致性缓存解决方案version_cache

# version_cache version_cache是一个分步式一致性缓存解决方案。 原理:job 将数据打包成版本到redis,实例将存在redis的版本load到本地内存并计算最新版本的生效时间,使所有实例的缓存在同一时间生效来达到所有实例数据的一致。 实用场景:数据量少、非及时生效数据、高并发强一致的场景。如:配置服务,门店服务等 优点: 1. 轻松实现水平扩展,实现千万并发的服务不是梦 2. 数据强一至性,不论启动多少实例,同一时间的数据绝对是一致的(服务器时间一致情况下) 3. 使用简单,实现数据生成接口后就可以像使用缓存一样方便,轻松实现高性能服务 缺点: 1. 数据按版本生效,变更的数据会延迟生效(原则上数据量越小处理越快) 2. 不适合大数据缓存 # 架构: https...阅读全文

golang结构体json的时间格式化解决方案

使用了OSC这么久了还没有写一篇博文,真实惭愧!在次写下第一篇。 最近开发项目时候发现一个结构体的Json转换的时间格式问题。 即这种1993-01-01T20:08:23.000000028+08:00 这种表示UTC方法。从我们习惯来说,更喜欢希望的是 1993-01-01 20:08:23这种格式。 重新复现代码如下: package main import ( "time" "encoding/json" ) type Student struct { Name string `json:"name"` Brith time.Time `json:"brith"` } func main() { stu:=Student{ Name:"qiangmzsx", Brith:time.D...阅读全文

博文 2017-09-12 03:52:51 梦朝思夕

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

来自NSQ的golang编码范式

Managing Goroutines It’s surprisingly easy to start goroutines. Unfortunately, it isn’t quite as easy to orchestrate their cleanup. Avoiding deadlocks is also challenging. Most often this boils down to an ordering problem, where a goroutine receiving on a go-chan exits before the upstream goroutines sending on it. Why care at all though? It’s simpl...阅读全文

博文 2017-07-14 03:03:16 UchihaRyuuzaki

Hadoop中HDFS优点有哪些?

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

兄弟连Go语言培训教程带你实战GO案例(6)Go Base64编码

兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 GoBase64编码 Go提供了对base64编码和解码的内置支持 packagemain //这种导入包的语法将默认的base64起了一个别名b64,这样 //我们在下面就可以直接使用b64表示这个包,省点输入量 importb64"encoding/base64" import"fmt" funcmain(){ //这里是我们用来演示编码和解码的字符串 data:="abc123!?$*&()'-=@~" //Go支持标准的和兼容URL的base64编码。 //我们...阅读全文

《Go语言四十二章经》第三十八章 数据编码(encoding)

# 《Go语言四十二章经》第三十八章 数据编码(encoding) 作者:李骁 ## 38.1 序列化与反序列化 数据结构要在网络中传输或保存到文件,就需要对其编码和解码,目前存在很多编码格式:json,XML,Gob,Google Protocol Buffer等,Go 语言当然也支持所有这些编码格式。 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。通过从存储区中读取对象的状态,重新创建该对象,则为反序列化。 简单地说把某种数据结构转为指定格式为 序列化 或 编码(传输之前);而把“指定格式”转为某种数据结构则为 反序列化 或 解码(传输之后)。比如:把数据结构转换成指定格式(data ->...阅读全文

博文 2018-10-18 21:50:47 roteman

决定以太坊未来的3个重要项目

在过去的几年里,以太坊已经成为加密货币领域最重要的项目。 作为市场中大多数代币的 底层基础设施,以太坊网络的健康对于加密数字币生态系统中的其他环节至关重要,以太坊 也一直在努力跟上增长。 交易容量一直困扰着以太坊网络,以至于许多专家推出了辅助项目 来创建替代性区块链,以便从头解决一些限制。 然而,以太坊团队并没有闲着,目前已经 有几个项目作为以太坊基金会的一部分进行孵化,重点就是解决当前版本的以太坊中的一些 基本限制。 以太坊的第二层扩容解决方案改进了以太坊网络的一些基本方面,如共识协议或其安全模型。 考虑到以太坊公共区块链的规模和活跃度,你可以想象在不中断网络的情况下实施这些增强 措施是一项巨大的挑战。 虽然以太坊网络有好几个第二层扩容项目,但有三个以及接近全面...阅读全文

grin 之 Cuckoo Cycle 算法挖矿分析

Cuckoo Cycle 算法 作者:John Tromp c++: github: https://github.com/tromp/cuckoo golang: https://github.com/AidosKuneen/cuckoo 解决的问题:给出N个节点(奇偶两行)和M个边,在M个边中寻找一个闭环(即找到一个路径使得一个节点是起点也是终点)如图中的0-5-4-1-0: image.png 8个节点6个边 一个解决方案 特点:即时验证,内存需求可扩展(可抵抗asic) grin中挖矿过程 两种算法:Cuck(ar|at)oo cycle (抗asic | 对asic友好) (edg_bits : 29|31+) solution 环型长度 都是42 hash1=black2b(he...阅读全文

Web开发中说高并发的时候,我们在说什么

这并不是一个回答的问题的文章,而是由此引发的一个思考。大家先心里仔细想想,当你们听到高并发网站时,心里对这个网站是个什么概念?首先想到的是淘宝吗?带着问题,我们一起思考技术写这个话题是因为我对搜索引擎给我的答案很不满意,然后决定把思考的一些东西分享出来,希望可以大家彼此讨论下。我们经常在面试的时候,被问到有没有高并发的经验?先不说哪些考高并发的装逼公司(有部分是面试官确实装逼)。我思考的是什么才算是高并发?你一天几个pv肯定高不了。首先在网上查找一下,并未找到明确的标准定义。那么什么是并发呢?并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。摘自百度百科我们说的高并发是什么?上面的定...阅读全文

博文 2017-08-27 18:09:21 大愚

TODO:字节的那点事Go篇

TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64)在Golang中string底层是由byte数组组成的。fmt.Println(len(“dsd好”))输出的长度是6fmt.Println(len(string(rune(‘好’))))输出的长度是3fmt.Println(len([]rune(“好的2s”)))输出的长度是4所以用string存储unicode的话,如果有中文(中文是由3个字节组成),按下标是访问不到的,因为你只能得到一个byte。 要想访问中文的话,还是要用rune切片,这样就能按下标访问。UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称...阅读全文

博文 2017-02-10 15:50:56 OneTODO

编译原理有啥用之Go语言懒人工具

动机 笔者在使用Go语言进行开发的过程中发现一些机械化重构代码的需求,而IDE(Goland)没有相应的功能,导致每次都需要手动写,非常不便。举两个例子: 例子1 type EsNginxLogInfo struct { RemoteAddr string RemoteUser string TimeLocal string Host string Method string Path string Query url.Values Status string BytesSent string HttpReferer string HttpUserAgent string HttpXForwardedFor string UpstreamResponseTime string Request...阅读全文

博文 2018-11-10 13:34:41 ztinpn

Golang下的unicode与字符编码

背景:在我们使用 Golang 进行开发过程中,总是绕不开对字符或字符串的处理,而在 Golang 语言中,对字符和字符串的处理方式可能和其他语言不太一样,比如 Python 或 Java 类的语言,本篇文章分享一些 Golang 语言下的 Unicode 和字符串编码。 Go 语言字符编码 注意: 在 Golang 语言中的标识符可以包含 "任何 Unicode 编码可以标识的字母字符"。 被转换的整数值应该可以代表一个有效的 Unicode 代码点,否则转换的结果就将会是 "�",即:一个仅由高亮的问号组成的字符串值。 另外,当一个 string 类型的值被转换为 [] rune 类型值的时候,其中的字符串会被拆分成一个一个的 Unicode 字符。 显然,Go 语言采用的字符编码方案从...阅读全文

博文 2020-05-30 23:34:34 BGBiao

Linux或者Mac环境安装Photon network

官方安装文档: https://photonnetwork.readthedocs.io/en/latest/installation_guide/ 下载源码: https://github.com/SmartMeshFoundation/Spectrum https://github.com/SmartMeshFoundation/Photon 流程是: 1,go安装及配置 2,安装运行spectrum 3,下载运行photon GO安装及配置 下载地址 https://golang.org/dl/ 进行安装 步骤:打开终端 → 进入local目录 → 下载压缩包 → 解压到当前目录 → 删除压缩包 → 创建gopath(后续开发项目目录) → 进入gopath → 创建 bin src ...阅读全文

博文 2018-10-31 16:34:56 rectinajh

Ubuntu 14.04 上使用 Docker 创建新的 Images

Ubuntu 14.04 上使用 Docker 创建新的 Images 环境准备 Ubuntu 14.04.1 LTS 发布后,我欢快地去官网下载并创建了一个虚拟机,但是在在执行下面命令的时候: sudo apt-get update 一直会遇到下面的错误 W: 无法下载 http://extras.ubuntu.com/ubuntu/dists/trusty/main/binary-amd64/Packages Hash 校验和不符 W: 无法下载 http://extras.ubuntu.com/ubuntu/dists/trusty/main/binary-i386/Packages Hash 校验和不符 Google 找解决方案,尝试了个遍,问题依旧。最让人不解的是 Ubuntu 官...阅读全文

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

十年磨一剑,阿里巴巴企业级数据管理平台:iDB

摘要: 阿里巴巴企业级数据库管理平台iDB面向云时代推出数据管理DMS企业版,是业界首创的数据库DevOps解决方案,形成了云时代企业数据管理的最佳实践。 十年间,阿里巴巴的研发人员也增长了十倍,为了解决DBA的服务效率问题,十年前我们开始iDB的研发,完成手工变更的在线化,成为了DBA能力产品化的载体。在最新的4.0版本中,iDB面向云时代推出数据管理DMS企业版,是业界首创的数据库DevOps解决方案,形成了云时代企业数据管理的最佳实践。 一、 为了效率与安全而生 在阿里巴巴,数据库团队是数据的守护者,保障着数据库安全、稳定、高效的运行。在早期,DBA除了负责数据库的基础运维,对于研发流程中的数据库变更也都由DBA负责,包括线上库表设计、结构变更发布、数据变更、SQL审...阅读全文

控制 Golang 切片的增长

如果你是Golang 新手,并对它的数组(切片)不太了解,你可能想从这里开始this introduction。 如今,当我们谈论数组时,开发者可能会谈论数组的两种行为之一:一种是静态的(或称为固定数组),另一种是动态的。静态数组的固定长度在定义的时候被初始化完成。动态数组(一般地)用一个静态数组定义,但是当需要的时候,能够增长其长度。那么这是如何实现呢?当你要在动态数组中添加一项条目时,如果数组下面的固定长度已经满了,它会创建一个更大的数组并且将数据拷并到并覆盖更大的数组中。 这种增长和拷贝可能似乎及其地慢,但是动态数组通常使用一种动态分配多余空间的增长算法。这种简单的算法将会增加原来数组的一倍大小。所以当我们试图插入在一个容量为10的数组中插入第11条条目时,我们最终会得到一个新数组容量...阅读全文

博文 2016-09-12 12:00:01 caotj72, 刺猬bear, 无若, sheepbao

开源监控解决方案:zabbix 监控mysql database(Golang)

[root@amb01 ~]# tar zxvf binutils-2.27.tar.gz [root@amb01 ~]# cd binutils-2.27 [root@amb01 binutils-2.27]# make [root@amb01 binutils-2.27]# make install [root@amb01 ~]# tar -zxvf go1.4-bootstrap-20171003.tar.gz [root@amb01 ~]# cd go/src [root@amb01 src]# ./make.bash [root@amb01 ~]# mv ~/go ~/go1.4 [root@amb01 ~]# export GOROOT_BOOTSTRAP=~/go1.4 [ro...阅读全文

博文 2018-10-24 10:35:44 yongqiang_guo

Golang 并发模式:超时和继续 Go Concurrency Patterns: Timing out, moving on

翻译自 Go Blog。原文地址:https://blog.golang.org/go-concurrency-patterns-timing-out-and 并发编程有自己的一些习惯用语,超时就是其中之一。虽然 Golang 的管道并没有直接支持超时,但是实现起来并不难。假设遇到了这样一种场景:在从 管道 ch 中取值之前至少等待 1 秒钟。我们可以创建一个管道用来传递信号,开启一个协程休眠一秒钟,然后给管道传递一个值。 timeout := make(chan bool, 1) go func() { time.Sleep(1 * time.Second) timeout <- true }() 然后就可以使用一个 select 语句来从 timeout 或者 ch 管道中获取数据。如果...阅读全文

Golang LeetCode - 2. Add Two Numbers 两数相加

Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Example: Input: (2 -> ...阅读全文

博文 2020-03-31 23:32:58 Avery_up

前端框架及项目面试-聚焦Vue、React、Webpack

第1章 课程导学介绍课程制作的背景和课程主要内容。第2章 课程介绍先出几道面试真题,引导思考。带着问题来继续学习,效果更好。第3章 Vue 使用Vue 是前端面试必考内容,首先要保证自己要会使用 Vue 。本章讲解 Vue 基本使用、组件使用、高级特性和 Vuex Vue-router ,这些部分的知识点和面试题。第4章 Vue 原理要保证自己的面试竞争力,必须掌握 Vue 原理,前端高级面试或者大厂面试中常考。本章讲解虚拟DOM,diff 算法,响应式,模板编译,组件渲染等 Vue 原理常考的知识点和面试题。第5章 Vue 面试真题演练学习完 Vue 的使用和原理,就来模拟面试吧。本章给出了大量的 Vue 常考面试题,帮你验证学习效果,温故知新。第6章 Vue3预学习Vue3 发布在即。本...阅读全文

一篇文章讲透CDN HTTPS安全加速基本概念、解决方案及优化实践

大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站的安全问题。本文将为大家介绍阿里云CDN HTTPS安全加速传输的基础概念、解决方案、技术优势和优化实践。 关于HTTPS的那些基本概念 需求推进技术革命,互联网是如此诞生,HTTPS也是这样。人们有在互联网上分享和浏览信息的需求,所以信息的传输技术由此诞生并不断升级。 后来,人们位互联网上的信息传输制定了一些准则,也就是网络协议HTTP。从最早1991年发布的HTTP/0.9版本,直到最新的HTTP/2,传输速度也在不断升级。下面,我们来看下关于HTTP都有哪些基本的概念。 HTTP是什么? HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端...阅读全文

Go中使用Seed得到重复随机数的问题

重复的随机数 废话不多说,首先我们来看使用seed的一个很神奇的现象。 func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now().Unix()) fmt.Println(rand.Intn(100)) } } // 结果如下 // 90 // 90 // 90 // 90 // 90 可能不熟悉seed用法的看到这里会很疑惑,我不是都用了seed吗?为何我随机出来的数字都是一样的?不应该每次都不一样吗? 可能会有人说是你数据的样本空间太小了,OK,我们加大样本空间到10w再试试。 func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now().Unix()) fmt.Prin...阅读全文

博文 2019-10-09 09:02:41 detectiveHLH

Go依赖管理工具dep

安装: Mac:brew install dep Linux curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh 验证 终端输入dep ➜ ~ dep Dep is a tool for managing dependencies for Go projects Usage: "dep [command]" Commands: init Set up a new Go project, or migrate an existing one status Report the status of the project's dependencies ensure Ensure a dependency...阅读全文

博文 2019-11-17 02:32:42 更多精彩内容有,总比没有要好:Go依赖管理工具depfreelanggolang 官方依赖管理工具 dep 使用和持续集成木猫尾巴时间NAV辞典旅游心得:我在旅行途中,你在哪?污大师2018.5.11囧man

go mod 包管理之前世今生

因为之前一直是 C++ Coder,根本没有所谓的包管理,项目依赖一塌糊涂,说到 C++ 的不便之处还得吐槽一句,编译速度贼慢,每次项目中写完代码等待编译的时候就想着,以后再也不想用 C++ 写代码了。 说回正题,go mod 包管理工具 没有包管理之前,项目管理会出现什么问题 在没有包管理方案之前,项目依赖于 GOPATH,这样带来一些不便之处: 多项目难以管理。试想一下,A 项目和 B 项目 同时依赖于一个 C 项目,但是依赖于 C 项目的不同版本,如何解决,只能通过多 GOPATH 设置。 项目的依赖只能够手动 go get 下载到 GOPATH 中,如果换一台服务器开发项目,光是包依赖都得弄半天。 go mod 出来之前,其他方案的是怎么设计的? godep,glide,go ver...阅读全文

博文 2019-12-27 16:33:06 剑指TOP

Go 中的 Goroutine 和其他并发处理方案的对比

Go 语言让使用 Goroutine 和通道变得非常有吸引力,作为在 Go 中进行并发的主要方式,它们是被有意识的提出的。因此对于你所遇到的任何与并发相关的问题,它们都可能成为首选方案。但是我不确定它们是否适合于我遇到的所有问题,我仍在考虑其中的平衡点。 通道和 Goroutine 对于查询共享状态(或从共享状态中获取某些信息)这类问题看起来似乎并不完全契合。假设你想要记录那些与服务端建立 TLS 通信失败的 SMTP 客户端的 IP,以便在 TLS 握手失败的情况下,不再提供 TLS 通信(或至少在给定的时间段内不提供)。大多数基于通道的解决方案都很直白:一个主 Goroutine 维护一个 IP 集合,通过通道向主 Goroutine 发送一条消息来向其添加 IP。但是,如何询问主 Go...阅读全文

FreeWheel招Lead/Senior大数据开发与分析工程师

Lead/Senior Software Engineer【职责描述】-面向客户的数据产品开发,测试,部署、监控,涵盖实时报表和离线报表等不同类型的数据产品;-紧密配合产品经理,理解业务需求,梳理业务流程,针对不同业务需要和应用场景,制定合理的系统架构以及实现方式,可以独立完成技术解决方案;-周期性产品迭代,持续改进现有产品,包括业务流程和系统架构,与基础架构部门配合,解决技术难题与性能瓶颈。【任职要求】-本科及其以上学历,三年以上大数据生态圈工作经验,二年以上数据产品实践经验;熟练掌握数据产品相关设计原理,对数据产品设计、交互、系统架构有深入的见解;-熟悉Spark/MapReduce/HBase/Presto等开源大数据技术,有多种业务场景下的实践经验;-有数据仓库建模、数据平台搭建、E...阅读全文

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

Go 小知识之 JSON 美化小工具

后端http接口测试常需要打印 JSON 返回,但是默认的json展示形式是紧凑型的,不易阅读,或许很多人习惯于使用在线格式化工具。但如果能用代码直接 JSON 美化,为什么还要多开一次浏览器呢? struct、map 的 Marsh美化 比如有这样一个map或者结构体。 u := map[string]interface{}{ "id": 1, "name": "poloxue", } 使用GO内置的包 encoding/json。 如果用 json.Marshal 转化,代码如下: uglyBody, err := json.Marshal(u) if err != nil { panic(err) } fmt.Printf("%s\n", uglyBody) 打印结果: {"id":1...阅读全文

博文 2019-08-31 20:32:45 波罗学

Golang.org/x目录被Blocked的解决方案

在Go开发中,经常有大量项目依赖golang.org/x包,但这个源码包被储放在万恶的国外资本势力的服务器上,国内开发人员想要使用需要一翻动作。 golang团队将他们的代码镜像在Github上,因此,我们可以将golang.org/x使用到的包,统统下载在我们开发环境的 $GOPATH/src/golang.org/x 目录,编译项目时就可以直接使用本地依赖。 首先,在 $GOPATH 目录中创建 golang.org/x 目录: $ mkdir -p $GOPATH/src/golang.org/x 然后把x的几个包clone下来: $ cd $GOPATH/src/golang.org/x # Clone 常用和几个库: $ git clone --depth=1 https://gi...阅读全文

博文 2019-02-16 16:34:42 陈哈哈GO

请教一个jsonDecode编码时遇到的问题

代码如下: ```go var temp interface{} err := json.Unmarshal(code, &temp) m := temp.(map[string]interface{}) cmd_name := m["command"] msgId := m["msg_id"] fmt.Println("cmd_name: ", m["command"]) ``` 各位大神,帮忙看一下这段代码有没有什么问题,一个jsonDecode的过程报错了,错误是: > panic: interface conversion: interface {} is nil, not map[string]interface {...阅读全文

异步编程四:协程

书接上回,我们一起体验了reactor模式,也了解到了其解决什么场景下的问题。 我们将一同感受一下协程的魅力,基于本系列文章最开始的例子 a + ((b -c)+ d) -e -f + g, 本文将使用协程的方式来实现,并与之前的实现方式进行对比。 Kotlin协程解决方案 本节依然基于vertx,同时利用kotlin的协程,来实现 a + ((b -c)+ d) -e -f + g 。 需要读者对vertx和kotlin有一定了解,准备工作可以阅读 [vertx-lang-kotlin-coroutines] (https://vertx.io/docs/vertx-lang-kotlin-coroutines/kotlin/) 和 coroutines-guide。 下面直接贴代码,可以...阅读全文

博文 2020-01-23 06:32:40 青_雉

Hyperledger Fabric协议的定制之protocol buffer

前言以前也研究过这个protobuf这一语言标准,这一google开发的用来网络协议指定的标准。这次再遇到这里就着研究fabric的机会深入的说明一下。用这个进行协议的指定是比较节约网络带宽,编解码方便。下面我们就从数据类型和编解码方式两个方面来加以说明。通过本文的阅读你将会发现,利用好protobuf有利于你提高程序编写的效率和减少协议指定的繁杂性。特别是如果你要设计的是一个网络系统的时候。1、protobuf的关键字和数据类型针对不同的程序语言(C++,java,golang)有不同的protobuf解析器,但是他们的数据类型是一样的,关键字略有差别。这里我们以golang和protoc-gen-go解析器为例来进行说明。protocol buffer 语言的源文件一般以name.pro...阅读全文

博文 2020-04-30 03:32:47 刨根问底儿

写扩展性好的代码:函数

本文作者: 伯乐在线 - legendtkl 。 如何写出扩展性好的代码?这是我工作最近半年来一直在考虑的问题。不管自己做一套系统还是接手别人的项目,只要你的项目需要和别人交互,这个问题都是需要考虑的。我们今天只说说如何写出扩展性好的函数代码。代码都以golang示例。 函数声明 函数声明首先是函数名字要具有自解释性,这个要说到代码注释了,这里就不赘述了。除了函数声明外,还有函数的形参定义。这里以一个例子来说一下扩展性好的函数的参数应该如何定义。 1. 普通函数 假设我们需要一个简单的server,我们可以像下面这样定义,addr表示server启动在哪个端口上。 func NewServer(addr string) 第一期的需求很简单,就上面这些足够满足了。项目上线跑了一段时间发现,由于...阅读全文

博文 2019-03-09 14:34:40 faunjoe

12 个学习新的编程语言的方法

Image by : opensource.com 听说,你决定要为你的 “技能树” 再添加一门特定的编程语言。那该怎么办呢? 在这篇文章中,作者提出了 12 项关于学习技术的建议。记住每个人学习的方式都不一样。其中一些可能对你十分有用,而其他的则可能无法满足你的需求。如果你开始担心一个策略,请尝试另一个策略并看看它哪里适合你。 1. 将其与类似的语言进行比较。当你首次观看有关该语言的第一个教程或阅读代码时,请尝试猜测该语言的每个部分将会做什么,并检查你的判断是否正确。 如果记笔记可以帮助你整合信息,请拿起一张纸并记下三个列表: 看起来很熟悉的东西,并且做了预期中的事 看起来很熟悉的东西,但做了意料之外的事 看起来完全是新的东西 例如,如果我用来自 Python 和 C 背景的 Rust 代...阅读全文

博文 2017-08-18 11:03:46 编辑部的故事

Go之URL Query String 编码器和解码器

项目地址 https://github.com/hetiansu5/... 简介 使用Go语言实现的URL Query字符串编码器和解码器。写好后才发现官方已有实现的querystring,但只实现了编码器,没有解码器,且只支持顶层数据结构为结构体,实现上不算特别完善。 特性 支持丰富的Go数据结构互转: 基础数据类型: 有符号整型[8,16,32,64] 无符号整形[8,16,32,64] 字符串 布尔值 浮点型[32,64] 字节 字面量 复合数据类型: 数组 切片 哈希 结构体 嵌套结构体 支持顶层的数据结构为数组 切片 哈希,不仅仅是结构体 支持自定义的URL-Encode编码规则,支持全局、局部设置方式,支持默认规则 支持自定义的键名映射规则(结构体Tag示例:query:"nam...阅读全文

Go基础学习记录 - 编写Web应用程序 - 错误处理

错误处理 前面的分享加了两个功能,一个是编辑功能,一个保存功能 在我们的程序中有几个地方其实是忽略了错误的处理。这是不好的做法,尤其是因为这样的做法发生错误时,程序会出现意外行为。更好的解决方案是处理错误并向用户返回错误消息。这样,如果出现问题,服务器将完全按照我们想要的方式运行,并且可以通知用户。首先,让我们处理renderTemplate中的错误: func renderTemplate(w http.ResponseWriter, templateName string, p *Page) { t, err := template.ParseFiles("template/" + templateName + ".html") if err != nil { http.Error(w,...阅读全文

博文 2018-08-09 23:34:50 DurbanZhang

【干货分享】大数据计算服务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/ ...阅读全文

Golang学习 - unicode/utf8 包

// 编码所需的基本数字 const ( RuneError = '\uFFFD' // 错误的 Rune 或 Unicode 代理字符 RuneSelf = 0x80 // ASCII 字符范围 MaxRune = '\U0010FFFF' // Unicode 码点的最大值 UTFMax = 4 // 一个字符编码的最大长度 ) // 将 r 转换为 UTF-8 编码写入 p 中(p 必须足够长,通常为 4 个字节) // 如果 r 是无效的 Unicode 字符,则写入 RuneError // 返回写入的字节数 func EncodeRune(p []byte, r rune) int // 解码 p 中的第一个字符,返回解码后的字符和 p 中被解码的字节数 // 如果 p 为空,则...阅读全文

博文 2019-04-19 18:34:40 佛心看世界

10分钟将你的Go工程转换为Go Module模式

自从在Go 1.11和高版本中引入了Go的新管理系统以来,GoLang开发人员已经接受了包版本控制解决方案。这样做的用户可以使用GoCenter存储库中的不可变公共Go 模块,并通过健壮、可靠的Go Pipeline获得快的构建速度。但是,将现有的项目转换为使用Go Module并不总是很容易,如果该项目已经尝试过GoLang的其他包管理解决方案时。为了帮助GoLang社区正确地使用Go Module,我们将使用开源的etcd项目(Kubernetes使用的键值数据存储)作为示例。这是一个实践的实际示例,因为它很复杂,可以展示一些常见的实践Go 项目依赖管理痛点分析 传统GO项目进行第三方模块依赖时,往往是去下载第三方源码,这种方式将存在以下常见问题:1.性能及稳定性:每次下载从各大VCS系...阅读全文

博文 2019-12-20 00:32:53 JFrog杰蛙科技

如何发送给客户端响应之后程序继续执行

写PHP的时候遇到一个问题 *如何在把响应发送给客户端之后,继续执行后续任务? * 在stackoverflow上找到解决方案,如下 https://stackoverflow.com/questions/15273570/continue-processing-php-after-sending-http-response 想知道,如何在Golang中实现这种需求,google了一会没能找到,汗... 求助,能赐几行代码更好,多谢:...阅读全文