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

写扩展性好的代码:函数

本文作者: 伯乐在线 - 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基础学习记录 - 编写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

session 检测问题

~~~ 是这样的: 检测session是否存在 如2个页面 /admin/aaa /admin/bbb 以上2个都加了 判断session是否存在 等登录后 人工去访问 aaa bbb 2个页面,出现登录不上 解决办法 1:清除本地缓存 2:要访问也可以 后面加个 如:/admin/aaa?123 随机字符 也可以解决, 请问这样的问题 有什么办法解决! ~~...阅读全文

golang when is nil not nil

在开发中,我们经常会遇到一个nil值不等于nil,先看一下下面这个例子 type itest struct { a string } func printA() *itest{ return nil } func main() { var i interface{} = printA() fmt.Printf("i is nil %v, i = %v", i == nil, i) } 最后输出结果是 i is nil false, i = 这是因为interface是由两个元素type:T 和value: V所表示。V是具体值,比如int, struct, pointer的具体值。var i interface = 3, i的type是int, value是3。只有当type和va...阅读全文

博文 2019-10-09 18:32:42 bunnyhuangw

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

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杰蛙科技

golang错误点

1、在函数返回参数中已定义error变量,在if中内层重新定义了error,这会导致return返回的是外层的error func foo(x string) (ret int, err error) { if true { ret, err := strconv.Atoi(x) if err != nil { return } } return ret, nil } 解决办法:1.让内层error与外层error不重名;2.代码改为:return 0,er...阅读全文

博文 2019-04-15 22:34:45 王先森QAQ

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

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

go to definition 总是提示 rebuild fix 解决办法

刚拷贝来工程的时候,go to definition 总是报错误;然而编译也通过了;查了很多资料,自己解决了,解决方法如下:(1)把 options for target 配置下的 output里的 select folder for objects 选择目录下的文件全部删掉(2)把listing菜单栏的里的select folder for listing...和select folder for objects目录选择一样的目录然后在rebuild就可以成功了,如果不成功的小伙伴可以先确认你的文件路径有没有对,还不行可以在其他的地方重新复制一份执行在操作...阅读全文

博文 2019-04-28 14:35:10 我叫妄想

Go 模块存在的意义与解决的问题

本文首发于我的博客,如果有用,欢迎点赞收藏,让更多的朋友看到。 作者:William Kennedy | 原文:Modules Part 01: Why And What 最近,我在尝试整理一篇关于 Go 包管理发展历史的文章,希望能加深自己对这一块知识的认识。在搜集资料的时候,发现了这篇文章,顺手翻译了一下。 本文是该系列的第一篇,主要介绍包依赖管理中一些基础知识。文中提出了 Go 开发中的三个痛点,如何解决只能在 GOPATH 指定路径开发,如何实现有效的版本管理,以及如何支持 Go 原生工具集依赖管理。针对它们,Go Module 都提供了相应的解决方案。 从第一篇的内容上看,作者后面的文章应该会对 Go 的模块机制进行详细的剖析,很期待。话说,总感觉这篇文章翻译的有点别扭,检查的时候...阅读全文

博文 2019-10-14 19:34:29 波罗学

老用户快速从经典网络迁移VPC,阿里云提供便捷解决方案

摘要: 近日,阿里云宣布推出经典网络迁移VPC完整解决方案,帮忙云上老用户平滑迁移到VPC。 阿里云起步于经典网络,但已经全面转向VPC。专有网络VPC(Virtual Private Cloud)以其在安全、成本和网络功能方面的优势,正受到越来越多用户的欢迎,已经成为云上用户的首选网络类型,也是阿里云默认推荐的网络类型。 近日,阿里云宣布推出经典网络迁移VPC完整解决方案,帮忙云上老用户平滑迁移到VPC。 阿里云起步于经典网络,但已经全面转向VPC。专有网络VPC(Virtual Private Cloud)以其在安全、成本和网络功能方面的优势,正受到越来越多用户的欢迎,已经成为云上用户的首选网络类型,也是阿里云默认推荐的网络类型。然而,云上还有很多存量用户在使用经典网络,为了...阅读全文

一本正经地聊聊raft

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

再次升级!阿里云Kubernetes日志解决方案

摘要: 今天阿里云Kubernetes日志解决方案再次升级,为您带来以下改进: 1、极致部署体验:只需一条命令一个参数即可完成整个K8S集群的日志解决方案部署。 2、支持更多配置方式:除原生控制台、SDK配置方式外,支持通过CRD方式进行配置(kubectl、控制台、K8S openapi)。 背景 针对K8S日志采集存在的采集目标多、弹性伸缩难、运维成本大、侵入性高、采集性能低等问题,在18年2月份日志服务和容器服务团队一起发布了阿里云Kubernetes日志解决方案。1分钟内即可完成整个集群部署,实现该节点上宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。并且后续集群动态伸缩无需对采集做任何二次部署。 今天阿里云Kubernetes日志解决方案再次升级,为您...阅读全文

GoLang 字符串倒置

字符串倒置 Hello World --> dlroW olleH 解决方案1: length := len(str) array := make([]string , length) for i , v := range str{ array[i] = string(v) } for i := 0 ; i < length/2 ; i++ { array[i], array[length -i - 1] = array[length - i -1 ], array[i] } str = "" for _ , v := range array { str += v } 大致想法是: str -循环-> array -循环-> 倒置 --循环--> str 可以转换中文. 问题: 看上去比较繁...阅读全文

博文 2017-09-29 03:35:10 小立立

kubelet启动失败——inotify

参考issue This error (ENOSPC) comes from the inotify_add_watch syscall, and actually has multiple meanings (the message comes from golang). Most likely the problem is from exceeding the maximum number of watches, not filling the disk. This can be increased with the fs.inotify.max_user_watches sysctl, but I would investigate what else is creating so m...阅读全文

博文 2018-11-06 12:34:40 陈先生_9e91

笨办法学golang(三)

这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布尔类型,数字类型,字符串类型以及新增的错误类型。 布尔(bool)类型 布尔类型的值只能是常量true或false.例如var v bool = true func mian() { var v1, v2 bool v1 = true v2 = 1 v3 := false v4 := (1 != 2) fmt.Printf("%v %v %v %v", v1, v2, v3, v4) } //为了节省篇幅,以后的示例代码自动省略package mian以及import包语句,不再赘述。 运行上述代码,会发现第4行报编译错误,原因是布尔类型不接受其他类型的赋值,不支持自动或强制类型...阅读全文

博文 2019-02-17 17:34:45 Morgansays

DockOne技术分享(四):AppC和Docker的对比

【编者的话】 现在一说到“容器”,几乎所有人首先想到的就是Docker。Docker作为目前最主流的容器标准,掩盖了许多前辈和后续者的光辉。事实上,Docker既不是第一个容器类产品(OpenVZ、Lxc等都远远早于它),也不会是最后一个。今天我们来聊一个最近有点火的新容器标准:AppC。 AppC是 CoreOS 公司在2014年12月发起的社区项目,旨在设计一种新式的跨平台容器在镜像格式、运行方式和服务发现机制等方面的标准。 从官方的表态说,这个项目最初诞生的原因是,主流容器工具 Docker 正在从一个单纯的容器工具成为自成一体的生态圈。而 Docker 的中心式管理方式(由每个主机上的 Docker -d 后台进程统一控制)对于 Systemd 以及第三方的任务编排工具并不友好(具体...阅读全文

DockOne微信分享( 一零二):基于容器的日志管理实践

【编者的话】业务平台每天产生大量日志数据,为了实现数据分析,需要将生产服务器上的所有日志收集后进行大数据分析处理,Docker提供了日志驱动,然而并不能满足不同场景需求,本次将结合实例分享日志采集、存储以及告警等方面的实践经验。 2013年以来Docker迅速火了起来,它的理念带来了非常大的便利性,不过实际应用中会发现还有监控、日志、网络等问题尚待解决,本文会结合实例分享数人云做容器日志系统的经验。 基于ELK的日志管理系统架构日志收集是大数据的基础,业务平台每天产生大量日志数据,为了实现数据分析,需要将生产服务器上的所有日志收集后进行分析处理;高可用性,高可靠性以及可扩展性是日志收集系统的必备要素。 ELK是目前较流行的日志一体化解决方案,提供日志收集、处理、存储、搜索、展示等功能。容器标...阅读全文

博文 2017-06-25 16:25:28 Dataman数人科技

【TiDB@丰巢】支付平台的迁移之旅

因为本文是我第一次发表在 丰巢技术团队 公众号上,所以在简书上发表只能算是转载。丰巢第一次在生产环境实际使用TiDB,是在2018年,其场景是每天产生一亿条以上数据的推送平台,当时我们还发了一篇文章,被PingCAP官方收录:TiDB at 丰巢:尝鲜分布式数据库。这次,因为实际的项目需要,我们选择了QPS和数据一致性要求更高的支付平台,作为第二个迁移到TiDB上的项目。由于丰巢的所有支付,都会通过该平台产生,所以其稳定性和性能,都是重中之重了,而这次的迁移之旅,也就特别的漫长和曲折。1. 支付平台现状及问题在迁移TiDB之前,丰巢支付平台全部运行于MySQL之上,其基本情况如下:实例数量:4台物理机,4个Master数据库数量:40+个数据库重要表分表数量:500+表分库分表规则:用户ID...阅读全文

万用大数据修炼手册!教你如何在成为大牛的路上保护好你的秀发!

也许你想在数据研究领域工作,你对数据工程师和数据科学家之间的区别还不是很清楚,甚至很多人可能认为这是同一件事。如果你真的这么认为,那是个大错误!这两个位置之间的差别正在增大。如果你不能深入理解这些异同,那么在未来绝对不会有几声雷鸣在等你。这篇文章必须读!数据工程师在技术上工作。他们负责数据系统架构的设计和维护,包括从基础设施分析到数据仓库的许多概念。数据工程师需要对常用的脚本语言有一个透彻的理解,并通过使用和改进数据分析系统,稳步提高数据的质量和数量。他们还负责创建建模、挖掘、验证和获取数据的步骤和过程。 预计行业对熟练数据工程师的需求将迅速增长。在现代世界,企业和组织需要一个可靠的数据体系结构来获取和存储数据。当企业发展到需要使用数据科学的程度时,它需要数据工程师。因此,迫切需要数据工程师...阅读全文

博文 2019-01-29 00:34:43 大数据的风风

Python面试QA

讲讲日常开发中都用到了那些Python内置的模块 一.语言 1.推荐一本看过较好的python书籍? 拉开话题好扯淡 2.谈谈python的装饰器,迭代器,yield? 3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗? 4.python适合的场景有哪些?当遇到计算密集型任务怎么办? 5.python高并发解决方案?我希望听到twisted->tornado->gevent,能扯到golang,erlang更好 二.操作系统 可以直接认为是linux,毕竟搞后端的多数是和linux打交道。 1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗? 2.time_wait是什么情况?出现过多的close_wait可能是什么原因? 3.epoll...阅读全文

博文 2018-11-29 14:34:41 星泼拿衣服

gof23创建类模式(golang版)

区块链的征程已开启 单例模式 Java中的单例模式的实现可以有饿汉式、懒汉式、双锁、静态内部类、枚举等形式,在go中如何实现单例呢,先来最简单的形式,不考虑高并发的情况下,应该怎样实现 package main var m *Singleton type Singleton struct { } func GetInstance() *Singleton { if m == nil { m = &Singleton{} } return m } 问题就是并发的时候会取到多个对象,解决方案加锁 package main import ( "sync" ) var instance *Singleton var lock *sync.Mutex = &sync.Mutex{} type Sing...阅读全文

博文 2018-12-01 22:34:42 菟潞寺沙弥

波司登全国超千家门店,销售状况如何实时监控?

摘要: 公司以往一直使用ERP的报表进行数据的展示,近期也上线了以HANA数据库为基础的BO报表进行业务数据支持,但是依然存在数据实时主动展示的缺陷。我们需要的销售业绩数据可以实时通过业绩大盘进行展示,这样可以更加友好的为团队提供数据支撑。 来自 波司登国际控股有限公司 黄金友 的撰稿 1. 需求概述 公司的零售团队存在一个无法实时获取市场的销售业绩数据并有效通过大盘进行展示的痛点。我们在与阿里云的合作过程中,了解了ARMS这款端到端一体化实时监控解决方案的PaaS级阿里云产品,正好可以很好地解决我们零售业务的痛点。我们成功完成了业绩数据的准备及业绩数据的展示。 这里简单分享一下ARMS用于实时业绩数据展示的经验。 公司以往一直使用ERP的报表进行数据的展示,近期也...阅读全文

解决两数之和 (Javascript, Java, C#, Swift, Kotlin, Python,C++, Golang)

解决两数之和 (Javascript, Java, C#, Swift, Kotlin, Python,C++, Golang)给定一个整数数组,返回两个数字的索引,以便它们加起来成为一个特定的目标。您可以假定每个输入都只有一个解决方案,并且您可能不会两次使用同一元素。举例:给定数组 =[2, 7, 11, 15], 目标值 = 9,因为nums[0]+ nums[1] = 2 + 7 = 9,所以返回 [0,1].思路:我们定义一个字典来存储元素及其索引。我们将一一检查元素。 假设当前元素是a; 我们将元素及其索引存储到字典中; 并使用目标减去当前元素来获得差值b; 我们检查映射是否可以使用b作为键来获取任何内容,如果该值不为空并且其索引也不相同,则得到答案。Javascript:twoS...阅读全文

博文 2019-10-31 17:32:58 aside section._1OhGeD

Tidb + 分布式锁实现幂等--golang实现奖品发放系统

问题背景 最近业务上遇到这样的场景,觉得很有代表性,所以拿来说一说。我们有一个奖品发放系统,当用户申请奖品的时候,首先需要判断用户有没有申请过奖品,如果没有申请过,则去奖品总量扣除一个,然后再把用户申请记录写回数据库。 流程如下: 时序 事件 t1 检测用户申请过奖品 t2 奖品扣除 t3 插入用户申请记录 t4 返回申请成功 如果是正常的但线程执行完全没有问题,但是我们是并发的。所以很有可能会有好多事件都到t2导致多次申请,或者奖品多次扣除等情况。 解决方案 方案1:事务 最开始想到的就是数据库的事务了,在t1开始前启动事务,t1查询使用for update加锁,其他事务继续执行相同条件的for update的时候则会block,直到上个事务执行完成。这种方案很完美,但是只限于InnoDB...阅读全文

博文 2019-07-07 15:32:42 lucasgao

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

引言自从在Go 1.11和更高版本中引入了Go的新的依赖管理系统以来,GoLang开发人员已经接受了包版本控制解决方案。这样做的用户可以使用GoCenter存储库中的不可变公共Go 模块,并通过更健壮、更可靠的Go Pipeline获得更快的构建速度。但是,将现有的项目转换为使用Go Module并不总是很容易,尤其是如果该项目已经尝试过GoLang的其他包管理解决方案时。为了帮助GoLang社区正确地使用Go Module,我们将使用开源的etcd项目(Kubernetes使用的键值数据存储)作为示例。这是一个最佳实践的实际示例,因为它足够复杂,可以展示一些常见的实践PS:在上一篇关于Go语言开发的的文章中(传送门:Go 语言依赖管理的优势),我们介绍了Go 依赖管理的发展历史以及Go M...阅读全文

博文 2020-03-05 18:25:06 JFrogChina

2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制

摘要: Tair是阿里巴巴集团自研的弹性缓存/存储平台,在内部有着大量的部署和使用。Tair的核心组件是一个高性能、可扩展、高可靠的NoSQL存储系统。目前支持MDB、LDB、RDB等存储引擎。本文基于Tair的存储和访问原理,对缓存的读写热点问题进行讨论,并给出一个满足现阶段需求的热点数据读写问题的解决方案。 作者:刘欢(浅奕) ![图片描述](http://img.blog.csdn.net/20171229113421675?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity...阅读全文

Eosforce开发周报 21-jan 2019

工作1. FORCE IBC解决方案中继链BP模式中继合约完成基本合约框架。2. FORCEIO添加bus插件。3. FORCE IBC解决方案中继链实现映射Token合约。4. FORCE IBC解决方案中继链设计Token互换合约实现方案。5. FORCEIO重构账户名实现, 支持定制账户名格式。6. FORCEIO重构系统合约账户初始化实现。7. goeosforce库支持FORCEIO。8. 钱包完善FORCEIO支持。下一周工作1. FORCE IBC解决方案中继链BP模式中继合约开发。2. FORCEIO完成基本的跨链Token映射过程。3. FORCE IBC解决方案中继链实现基本的Token互换合约。4. 实现一个简单的FORCEIO golang客户端链接库。EOSForc...阅读全文

博文 2019-01-25 22:34:43 苏博明

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

最近开发项目时候发现一个结构体的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.Date(1993, 1, 1, 20, 8, 23, 28, time.L...阅读全文

博文 2018-07-02 12:19:04 梦朝思夕

Go基础学习记录之阻止Session劫持(Preventing session hijacking)

阻止Session劫持(Preventing session hijacking) Session劫持是一种常见且严重的安全威胁。在与服务器通信时,客户端使用Session ID进行验证和其他目的。不幸的是,恶意第三方有时可以跟踪这些通信并找出客户端Session ID。本次分享,将向您展示如何为教育目的劫持Session。 Session劫持过程 以下代码是count变量的计数器: // WelcomeLogin 欢迎登录页 func WelcomeLogin(w http.ResponseWriter, r *http.Request) { session, err := appSession.SessionStart(w, r) if err != nil { fmt.Fprintf(...阅读全文

博文 2018-11-06 14:34:44 DurbanZhang

理解Kubernetes网络:ingress篇

在本系列的第一篇文章中,我讲了Pod跨Kubernetes集群中的节点相互连接的网络。第二篇重点讲了服务网络如何为Pod提供负载平衡,以便群集内的客户端可以与它们可靠地通信。对于这第三篇也是最后一篇文章,我想以这些概念为基础来展示集群外的客户端如何使用同一服务网络连接到Pod。由于各种原因,这很可能是三篇涉及最多的,并且掌握前两篇关于pod和service的内容是理解本篇的的前提。 路由并不是负载均衡 在上一篇文章中,我们创建了一个具有两个Pod的部署,并为该服务分配了一个IP,称为“集群IP”,针对Pod的请求已发送到该IP。我将在此处继续根据该示例进行构建。回想一下,该服务的群集IP 10.3.241.152位于与Pod网络以及节点本身所在的网络不同的IP地址范围内。我称这个地址空间为“...阅读全文

[译]自定义Go Json的序列化方法

编译自 Custom JSON Marshalling in Go。 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:",omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中不包含这个值,而json:"-"可以直接不被JSON序列化,如果想被序列化key-,可以设置tag为json:"-,",加个逗号。 如果你为类型实现了MarshalJSON() ([]byte, error)和UnmarshalJSON(b []byte) error方法,那么这个类型在序列化反序列化时将采用你定制的方法。 这些都是我们常用的设置技巧。 如果临时想为一个struct增加一个字段的话,可以采用本译文的技巧,临时创建一个类型,通过嵌入原类型的方式来实现。...阅读全文

博文 2020-03-21 21:51:03 smallnest

Java中生产者与消费者问题的演变

Java中生产者与消费者问题的演变队列阻塞(BlockingQueue)关于Blocking Queue的更多细节Java中生产者与消费者问题的演变原文链接:https://dzone.com/articles/the-evolution-of-producer-consumer-problem-in-java作者: Ioan Tinca译者: liumapp想要了解更多关于Java生产者消费者问题的演变吗?那就看看这篇文章吧,我们分别用旧方法和新方法来处理这个问题。生产者消费者问题是一个典型的多进程同步问题。对于大多数人来说,这个问题可能是我们在学校,执行第一次并行算法所遇到的第一个同步问题。虽然它很简单,但一直是并行计算中的最大挑战 - 多个进程共享一个资源。问题陈述生产者和消费者两个程...阅读全文

博文 2018-10-22 17:17:14 Enjoyjava

GO小知识之实例演示 json 如何转化为 map 和 struct

简单谈一些 JSON 数据处理的小知识。近期工作中,因为要把数据库数据实时更新到 elasticsearch,在实践过程中遇到了一些 JSON 数据处理的问题。实时数据实时数据获取是通过阿里开源的 canal 组件实现的,并传通过消息队列 kafka 传输给处理程序。我们将接收到的 JSON 数据类似如下的形式。{ "type": "UPDATE", "database": "blog", "table": "blog", "data": [ { "blogId": "100001", "title": "title", "content": "this is a blog", "uid": "1000012", "state": "1" } ] }简单说下数据的逻辑,type 表示数据库事...阅读全文

博文 2019-06-09 11:00:18 波罗学​

云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据

摘要: 使用过开源HBase的人都知道,运维HBase是多么复杂的事情,集群大的时候,读写压力大,配置稍微不合理一点,就可能会出现集群状态不一致的情况,糟糕一点的直接导致入库、查询某个业务表不可用, 甚至集群运行不了。 **概述** 使用过开源HBase的人都知道,运维HBase是多么复杂的事情,集群大的时候,读写压力大,配置稍微不合理一点,就可能会出现集群状态不一致的情况,糟糕一点的直接导致入库、查询某个业务表不可用, 甚至集群运行不了。在早期0.9x版本的时候,HBase的修复工具还有一下bug,使得即使你懂得如何修复的情况下,依然需要多次重复运行命令,绕过那些不合理的修复逻辑,甚至有时候需要自己写代码预先修复某个步骤。 **背景** 上周五,某公司使用的某Dat...阅读全文

[Go语言]binary tree算法的华山论剑

版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/53956732 前言 在benchmarkgame(世界上最火的性能对比网站)上,Go语言一直有一个槽点,就是极其慢的binary tree性能,执行用时40秒 (我的机器上,16秒),与此对比,Java版本是6秒,那么问题来了:为什么慢得令人发指?我们来深入研究下慢的原因,然后看看能否对其进行改进。 对于binary tree算法中,最耗性能的地方就是海量的node分配和bottomUpTree()递归函数的调用,与这两项对应的go的特性就是gc的goroutine的堆栈分配。 GC 这个世界没有完美的GC,任何选择都有代价...阅读全文

利用Prometheus 打造企业分布式监控平台(1)--扩展性

Prometheus是CNCF基金会管理的一个开源监控项目,由于其良好的架构设计和完善的生态,迅速成为了监控领域事实上的标准,尤其是在云原生领域。 随着深入地了解Prometheus,你会发现一些非常好的功能: 服务发现使配置更加容易。Prometheus支持consul,etcd,kubernetes以及各家公有云厂商自动发现。对于监控目标动态发现,这点特别契合Cloud时代,应用动态扩缩的特点。我们无法想象,在Cloud时代,需要运维不断更改配置。 开源社区建立了数百个exporter。基本上涵盖了所有基础设施和主流中间件。 工具库可从您的应用程序获取自定义指标。基本上主流开发语言都有对应的工具库。 它是CNCF旗下的OSS,是继Kubernetes之后的第二个毕业项目。Kubernet...阅读全文

NSURLProtocol 拦截 NSURLSession 请求时body丢失问题解决方案探讨

摘要: “IP直连方案”主要在于解决DNS污染、省去DNS解析时间,通常情况下我们可以在项目中使用 NSURLProtocol 拦截 NSURLSession 请求,下面将支持 Post 请求中面临的一个挑战,以及应对策略介绍一下。 “IP直连方案”主要在于解决DNS污染、省去DNS解析时间,通常情况下我们可以在项目中使用 NSURLProtocol 拦截 NSURLSession 请求,下面将支持 Post 请求中面临的一个挑战,以及应对策略介绍一下: 在支持POST请求过程中会遇到丢失 body的 问题,有以下几种解决方法: 方案如下: 1.换用 NSURLConnection 2.将 body 放进 Header 中 3.使用 HTTPBodyStream ...阅读全文

Go 自定义日期时间格式解析解决方案 - 解决 `parsing time xx as xx: cannot parse xx as xx` 错误

最近在解析 Go 的日期数据格式时(mysql 的 datetime 类型)时遇到个问题,在网上搜了很多方案都试了以后发现不可行,于是自己尝试解决后将解决方案发布出来。 Go 自身的 time.Time 类型默认解析的日期格式是 RFC3339 标准,也就是 2006-01-02T15:04:05Z07:00 的格式。如果我们想要在 Gin 的 shouldBindJSON 方法中,传入 YYYY-MM-DD hh:mm:ss 格式的日期格式作为 time.Time 类型的值,就会引发类似于 parsing time xx as xx: cannot parse xx as xx 的报错信息。这是因为 time.Time 类型默认支持的日期格式与我们传入的格式不同,导致解析出错。。 遇到这个...阅读全文

博文 2020-04-04 19:34:27 晒兜斯

关于个人博客的优化

作为一名懂前端的程序员,天天在嘴上谈样式,可是自己的个人博客网站却没有时间打理。就好像农民伯伯把最好的菜卖给别人,让自己的傻儿子却吃“长势不太好”的蔬菜,可农民伯伯其实是非常心疼自己的孩子的。 好了,废话不多说,先来看看成果吧。 pc端效果 样式借鉴了tower —— 一款团队任务管理的产品的样式,非常的简洁干净。然后,同时对移动端进行了适配: 移动端效果 简介 该博客是根据开源项目deepzz0/goblog修改而来。服务器端采用go语言,使用beego作为服务器端框架,前端采用bootstrap,采用golang模板技术,同时原项目使用了docker,但docker部分被我弃用了。 github地址:https://github.com/deepzz0/goblog 首先,让我介绍一下该...阅读全文

博文 2019-03-10 11:34:42 陨石坠灭

Bytom Dapp 开发笔记(三):Dapp Demo前端源码分析

本章内容会针对比原官方提供的dapp-demo,分析里面的前端源码,分析清楚整个demo的流程,然后针对里面开发过程遇到的坑,添加一下个人的见解还有解决的方案。 储蓄分红合约简述 为了方便理解,这里简单说说储蓄分红合约的内容,具体可以查看储蓄分红合约详细说明,储蓄分红,顾名思义就是储蓄之后,当达到一定的时间,按照比例返回本息这样的意思,所以demo中拆分成saving(储蓄)与profit(提现)两个页面,本章内容是针对合约交易的提交,所以只针对储蓄页面说明。 比原官方Dapp-demo使用说明 比原官方demo地址 1)访问的前提需要用chrome打开比原官方demo地址,同时安装bycoin插件,在应用商店搜索就行; 2)安装完bycoin,需要初始化用户信息,新建或者导入备份文件去恢复...阅读全文

博文 2019-08-28 11:02:41 比原链Bytom

记Python “用户环境”的一次完美应用

首发于个人公众号:《Python编程时光》 我的博客原文:python.iswbm.com/en/latest/c… 我的 Github:github.com/iswbm/Pytho… 在之前写过一篇关于虚拟环境使用的文章 :Python 虚拟环境使用指南. 但是还没有好好的介绍一下 Python 的用户环境,原因是自己一直没遇到要使用 用户环境 的使用场景,所以就一直懒得写。 恰巧这两天,自己遇到了一个使用用户环境的体验可以完爆虚拟环境的案例,就拿出来分享一下。 1. 我的使用背景 公司有数以万计的服务器,为了对实现对访问记录进行集中管理以及出于安全考虑,每台服务器都有访问限制,必须使用公司的跳板机才能登陆。 每个公司的员工在跳板机上都有自己的用户、 家目录,对于很多需要 root 权限的...阅读全文

博文 2020-04-29 14:36:32 王一白

记Python “用户环境”的一次完美应用

首发于个人公众号:《Python编程时光》我的博客原文:http://python.iswbm.com/en/la...我的 Github:https://github.com/iswbm/Pyth... 在之前写过一篇关于虚拟环境使用的文章 :Python 虚拟环境使用指南. 但是还没有好好的介绍一下 Python 的用户环境,原因是自己一直没遇到要使用 用户环境 的使用场景,所以就一直懒得写。 恰巧这两天,自己遇到了一个使用用户环境的体验可以完爆虚拟环境的案例,就拿出来分享一下。 1. 我的使用背景 公司有数以万计的服务器,为了对实现对访问记录进行集中管理以及出于安全考虑,每台服务器都有访问限制,必须使用公司的跳板机才能登陆。 每个公司的员工在跳板机上都有自己的用户、 家目录,对于很多需...阅读全文

博文 2020-04-29 13:32:47 Python编程时光

Github架构师解读C/C++应用包管理的Why和How

一、背景本文整理自Johannes Nicolai在JFrog 2019用户大会上的讲演《DevOps for Non-Hipsters(aka C/C++ programmers)》。​Johannes Nicolai是Github的解决方案架构师,主要负责德语区的用户。他和很多制造业的用户(多数使用C/C++)交流,询问他们在DevOps或持续交付方面的挑战,通常会得到如下的描述:​在嵌入式C/C++领域,花费几十个小时完成一个完整的DevOps流水线并不少见。为某一个提交运行单独的构建和测试几乎是不可能的,通常每次构建都包含了几百个同事所有的提交。而构建时间长的主要原因在于交付包包含了大量的依赖包,而每次构建这些依赖包都需要从头开始重新构建。上述的描述并不仅限于德语区,Johannes...阅读全文

博文 2020-04-03 12:18:58 JFrogChina