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

Golang项目部署2,代理部署

文章来源:https://goframe.org/deployment/proxy 代理部署 代理部署即前置一层第三方的WebServer服务器处理所有的请求,将部分请求(往往是动态处理请求)有选择性地转交给后端的Golang应用程序执行,后端部署的Golang应用程序可以配置有多个。这种模式常用在复杂的WebServer配置中,常见的场景例如:需要静态文件分离、需要配置多个域名及证书、需要自建负载均衡层,等等。 虽然Golang实现的WebServer也能够处理静态文件,但是相比较于专业性的WebServer如nginx/apache来说比较简单,性能也较弱。因此不推荐使用Golang WebServer作为前端服务直接处理静态文件请求。 Nginx 我们推荐使用Nginx作为反向代理的前...阅读全文

Go语言的实时GC——理论与实践

Go语言能够支持实时的,高并发的消息系统,在高达百万级别的消息系统中能够将延迟降低到100ms以下,着一切很大一部分需要归功于Go的高效的垃圾回收系统。 对于实时系统而言,垃圾回收系统可能是一个极大的隐患,因为在垃圾回收的时候需要将整个程序暂停。所以在我们设计消息总线系统的时候,需要小心地选择我们的语言。Go一直在强调它的低延迟,但是它真的做到了吗?如果是的,它是怎么做到的呢? 在这篇文章当中,我们将会看到Go语言的GC是如何实现的(tricolor algorithm,三色算法),以及为什么这种方法能够达到如此之低的GC暂停,以及最重要的是,它是否真的有效(对这些GC暂停进行benchmar测试,以及同其它类型的语言进行比较)。 From Haskell to Go 我们用pub/sub消...阅读全文

博文 2017-08-22 01:05:14 terasum

Kafka两级调度实现分布式协调微服务任务分配Golang版

背景 基于Kafka消息队列的两级协调调度架构 Kafka内部为了协调内部的consumer和kafka connector的工作实现了一个复制协议, 主要工作分为两个步骤: 通过worker(consumer或connect)获取自身的topic offset等元数据信息,交给kafka的broker完成Leader/Follower选举 worker Leader节点获取到kafka存储的partation和member信息,来进行二级分配,实现结合具体业务的负载均衡分配 从功能实现上两级调度,一级调度负责将Leader选举,二级调度则是worker节点完成每个成员的任务的分配 主要是学习这种架构设计思想,虽然这种方案场景非常有限 基于消息队列实现分布式协调设计 一级协调器设计:一级协调...阅读全文

Golang 在 Mac、Linux、Windows 下如何交叉编译

载自https://blog.csdn.net/panshiqu/article/details/53788067 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 GOARCH=amd64 go build main.go CGO...阅读全文

博文 2018-06-28 13:34:39 你清澈又神秘

<转载>借助 Docker 企业版大幅节省 IT 预算

摘要: 我们最近启动了一项针对系统管理员和 IT 专业人员的系列学习内容,称之为“IT 人员的 Docker 入门”。我们此前已经介绍了一些基础知识,包括容器技术以及面向企业的 Docker 解决方案。 今天,我们讨论一个重要的问题:您投入时间和公司的资金来进一步探索 Docker 企业版(EE),是否值得? 对这个问题的明确回答是:肯定。已经采用 Docker 的 IT 团队发现,部署和维护应用程序的速度更快、更轻松,而且可以更好地利用基础设施,而无需触及底层代码。开发团队也正在体验生产力的大幅提升,新的开发人员能够更快上手,从开发到生产的周期大幅缩短,以及消除了应用程序对机器的依赖性("它在我的机器上可以正常工作")所带来的困扰。 640_090404_jpeg 您可...阅读全文

反思-20190416

夜里突然醒来,反思一下最近的学习状态。 图片发自简书App 近一个月来,虽说用golang写了几个小服务,electron、vue等前端东西也学了不少,但是却有种不踏实的感觉,一想,可能是白天工作中还接触老本上Java开发,平时看的太少,有点偏离了路线,毕竟工作为主!其他都是兴趣爱好。 再说说工作上的学习,可能是因为项目比较稳定,所以即使发现了一些问题,现有的业务与技术知识可以很快的解决问题,所以能学到的知识也就比较少。最近负责的新的需求,工作的重点也写文档上,开发任务难点也都落在了安卓或者IOS开发同事身上,服务端的逻辑设计和开发难点相对来说也没有什么新鲜感。 现在应该处于基础开发者与中级之间吧,感觉应该进行下一步深入的学习java了。学如逆水行舟,不进则退...阅读全文

博文 2019-04-16 02:34:41 clawhub

Go语言的程序结构

# Go语言的程序结构 # *** ## 命名规则 **Go 语言的命名规则和C语言的命令没什么不同,都是由数字,下划线,字母组成,且必须以下划线或者字母开头。大小写敏感(var a int 和 var A int是不同变量)** GO语言的关键字主要包括25个:

...阅读全文

博文 2017-08-14 14:06:16 wenxuwan

Go 基础 3:error handling

官网: https://blog.golang.org/error-handling-and-go error对于常用类型,可以转换成某种interface去查里面具体错误。 对于repetive的error handling,可以做个wrap去handle统一的error,不过我个人觉得不是那么试用,很难有一个函数全部是一种类型的错误吧。不过这种是不是设计模式里的装饰者模式? 待读: https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully https://mijailovic.net/2017/05/09/error-handling-patterns-in-go...阅读全文

博文 2019-02-08 15:34:41 听海吹牛逼的声音

【区块链Go语言实现】区块链基本原型

链客,专为开发者而生,有问必答!此文章来自[区块链技术社区](https://www.liankexing.com),未经允许拒绝转载。 0x00 介绍区块链(Blockchain)是21世纪最具革命性的技术之一,目前它仍处于逐渐成熟阶段,且其发展潜力尚未被完全意识到。从本质上讲,区块链只是一种记录的分布式数据库。但它之所以独特,是因为它并不是一个私有的数据库,而是一个公共数据库,也就是说,每个使用它的人都有一份完整或部分的数据副本。并且,只有在数据库的其他持有者同意的情况下,才可以向区块链中添加新的记录。此外,正是区块链使得加密货币和智能合约成为可能。在本系列文章中,我们将基于区块链构建一种简单的加密货币。0x01 区块首先,我们从“区块链”中的“区块”介绍开始。在区块链中,区块是存储有价...阅读全文

博文 2019-08-16 12:32:43 链客区块链技术问答社区

面向 Go 开发人员的链代码深入研究,第 3 部分: 为基于 Hyperledger Fabric v0.6 的区块链网络开发客户端应用程序

面向 Go 开发人员的链代码深入研究,第 3 部分 为基于 Hyperledger Fabric v0.6 的区块链网络开发客户端应用程序深入剖析 Node.js 客户端应用程序的组成部分 Varun Ojha2017 年 8 月 30 日发布 系列内容:此内容是该系列 # 部分中的第 # 部分: 面向 Go 开发人员的链代码深入研究,第 3 部分http://www.ibm.com/developerworks/cn/library/?series_title_by=**auto**敬请期待该系列的后续内容。此内容是该系列的一部分:面向 Go 开发人员的链代码深入研究,第 3 部分敬请期待该系列的后续内容。 获取最佳免费工具、培训和社区资源的每月集萃,帮助您开始使用区块链。最新一期 | 订...阅读全文

博文 2017-11-29 06:28:32 www.ibm.com

微服务架构下 Service Mesh 会是闪亮的明天吗?

7月7日,时速云企业级容器 PaaS 技术沙龙第 10 期在上海成功举办,时速云容器架构负责人魏巍为大家详细讲解了 Service Mesh 中代表性的实践方案、并以 Istio 为例详细讲解了 Service Mesh 中的技术关键点,包括 Istio 控制平面、Istio 数据平面等。以下内容根据魏巍分享整编,希望对大家了解 Service Mesh 有所帮助。 魏巍:大家下午好,刚才几位讲师讲了 K8S 的存储、PaaS 在企业的落地实践等,我们接下来要讲的是企业有了 PaaS 平台、并且在平台上部署了各种各样的服务之后,这些服务该如何治理、服务与服务之间的关系,以及该以何种方式去维护等问题,而最近两年兴起的 Service Mesh,能够更加便捷的管理这些服务。 Service Me...阅读全文

Ruby程序员的Golang之旅01

golang的import @ ruby的require 我们正好趁这个机会回顾一下ruby的require先 require(name) → true or false require加载指定的文件,如果加载成功则返回true,如果已经加载过则返回 false。 require 'csv' => true require 'csv' => false 如果文件名解析出来不是一个绝对路径,它将会在 $MY_RUBY_HOME 列出的目录中被查找。 require 'foo' => cannot load such file -- foo from /Users/jiyarong/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/...阅读全文

博文 2017-08-04 15:05:09 peter_ji

与go邂逅(二)——go当中的基本程序结构(数组 切片 map string)

前言 学习一门语言的时候,难免从最简单的程序结构学起,这些东西在掌握了一门别的开发语言的情况(如大名鼎鼎的java),就会显得如鱼得水了,下面会把我学习一些简单例子分享出来。 基本程序结构 快速为一些变量赋值 const ( NUM1 = 1 + iota NUM2 NUM3 NUM4 ) //输出结果:1,2,4,8 func TestPrint(t *testing.T) { t.Log(NUM1, NUM2, NUM3, NUM4) } 快速的实现一些数值交换 //数值交换 func TestExchange(t *testing.T) { //也可以这样定义变量:var aa int = 1 a := 1 b := 2 t.Log(a, b) //交换数值 b, a = a, b t...阅读全文

博文 2019-04-26 17:34:46 stone想静静

容器、Docker与Kubernetes——从基础设施的容器化谈起

【编者的话】作者是Collective Idea公司的运维,也是个对技术有深度理解的人,这篇文章是作者在实践immutable infrastructure理念过程中对容器的理解,这是第一篇,主要讲述传统运维工具如Chef与Docker等容器化运维工具的不同以及解决的问题。 作为一名长期从事运维的工程师来说,我会时常审视维护服务器工作的简单性与可重现性;而我的一个最重要的工作原则便是“永远不要手动操作服务器”。所有服务器都必须由工具进行启动(provisioned)与配置以运行,同时通过工具来监控、维护服务器的状态——而我的选择是Chef;当然你也可以有很多其他选择如:Ansible、Salt与Puppet。 在Collective Idea中,Chef确实运行得非常好,它管理着公司内部与外...阅读全文

基于hashicorp/raft的分布式一致性实战教学

本文由云+社区发表 作者:Super 导语:hashicorp/raft是raft算法的一种比较流行的golang实现,基于它能够比较方便的构建具有强一致性的分布式系统。本文通过实现一个简单的分布式缓存系统来介绍使用hashicorp/raft来构建分布式应用程序的方法。 1. 背景 ​ 对于后台开发来说,随着业务的发展,由于访问量增大的压力和数据容灾的需要,一定会需要使用分布式的系统,而分布式势必会引入一致性的问题。 ​ 一般把一致性分为三种类型:弱一致性、最终一致性、强一致性。这三种模型的一致性强度逐渐递增,实现代价也越来越大。通常弱一致性和最终一致性可以异步冗余,强一致性则是同步冗余,而同步也就意味着影响性能。 ​ 对常见的互联网业务来说,使用弱一致性或者最终一致性即可。而使用强一致性...阅读全文

博文 2019-03-01 17:34:44 腾讯云加社区

Go -- 中开启gctrace

godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。 godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了gopherjs ,你也可以在浏览器上进行调试: 点击此处尝试原文调试窗口。通过原文的“DEBUG IT”按钮,你可以编辑程序并重新调试它。 工作原理 下面这张是描述上面例子的矢量图: 从中可以看出原始代码转换了两次:第一次godebug插入调试instrumentation,然后gopherjs将结果编译成JavaScript。 让我们看一下instrumentation步骤,以下是go...阅读全文

博文 2019-04-19 16:31:04 weixin_34378969

观察者模式实战

本文转自“雨夜随笔”公众号,欢迎关注。 在上一篇文章中,我们简单了讲了一下设计模式和观察者模式。那么这次让我们详细了解一下观察者模式和我们如何进行使用。 内容 还记得上一篇文章中,我们说过了解或者设计一个设计模式的时候,要按照下面四点进行分析: image.png 意图 在实际业务场景中,我们经常遇到这样的稳定,也就是在某个对象发生某种事件时,通知其他相关的对象。所以观察者模式就允许你定义一种订阅机制,使得订阅某种事件的对象能够在事件发生时得到通知。 动机 我们来分析一种常见的业务场景,也就是购物APP中经常遇到的货物上架提醒,如果为了实现这种需求,我们可以按照下面的方式来实现: 成本最低:我们知道在开发中成本最低的就是不做这个需求,当然这个是开玩笑,不过一般在开发初期,我们可能会分析需求的...阅读全文

博文 2020-05-03 12:32:44 soolaugust

Golang 设计模式之-装饰模式

Golang 设计模式之-装饰模式 最近在温习设计模式,虽然面向对象不是go的特长,但用go实现的设计模式,比java 和 c# 这种纯面向对象语言多了一份灵活,比python 这种虚假的面向对象要更直观, 性能上也更有优势. 装饰模式 装饰模式是一个非常常用的设计模式。常用到python内置了它。 装饰模式是为已有功能动态的添加更多功能的一种方式, 降低了主类(当然,go里没有类这种东西,可以用结构模拟)复杂度, 防止类的爆炸行为. 当新加的功能仅仅是满足某种特定条件下的需要时,装饰模式是个非常好的选择。 装饰模式把核心功能和装饰功能区分了,减少了核心功能可能造成的冗余和耦合,简化核心类的重复装饰逻辑. 装饰模式的装饰顺序很重要,它决定了最终类被装饰的效果 实例 Decorate 抽象 t...阅读全文

博文 2020-05-07 15:41:19 trump2018

如何使用 Golang 日志监控你的应用程序?

你是否厌烦了那些使用复杂语言编写的、难以部署的、总是在不停构建的解决方案?Golang 是解决这些问题的好方法,它和 C 语言一样快,又和 Python 一样简单。但是你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性:它们过于被滥用以至于它们的作用都被忽视了。在进一步深入之前,我们首先会介绍 Golang 日志的基础,并讨论 Golang 日志标准、元数据意义、以及最小化 Golang 日志对性能的影响。通过日志,你可以追踪用户在你应用中的活动,快速识别你项目中失效的组件,并监控总体性能以及用户体验。I. Go...阅读全文

博文 2018-12-24 18:31:35 u014389734

2019年度总结

2019年目标 2019年,可能当时心里有目标,但是没有写出来,更没有使用OKR的方式表达出来,现在年底往前翻目标的时候,已经忘记了自己的出发点。 2019年大事记 2019年,最大的事情,应该就是放弃创业,选择加入了小年糕这家公司,现在来看当时的决定,是一个非常正确的选择,虽然也经历了大概半年的挣扎和磨合,但是我很喜欢这里,学习到很多其他地方学习不到的东西,也有很多想感谢的人。 3月入职小年糕,3月主要是在适应公司文化,适应节奏。 4月上线基于谷歌论文的ABtest分层实验平台,架构比较简单,系统性能TP99在1ms左右,现在已经全量使用在小年糕的推荐系统上。用到的技术也很简单,就是本地缓存&redis缓存。 5月,重构了内容审核系统,彻底解决之前系统中的漏审和审核历史问题,系统易用性也大...阅读全文

博文 2020-01-29 05:32:40 不如假如

Golang sync.Once使用

package main import ( "fmt" "sync" ) func main() { var count int increment := func() { count++ } var once sync.Once var increments sync.WaitGroup increments.Add(100) for i := 0; i < 100; i++ { go func() { defer increments.Done() once.Do(increment) }() } increments.Wait() fmt.Printf("Count is %d\n", count) } 程序输出如下, image.pn...阅读全文

博文 2019-06-08 17:32:39 FredricZhu

Golang基础知识-概念篇

1、go中使用struct模拟类和对象 type Bike struct{ color string //首字母小写表示属性私有 Name string //首字母大些表示属性公有 } //首字母大些表示方法对外公开 func (b *Bike) Move() string{ return b.color } 2.三大基本特性 封装:首字母大小写代表公私有权限 继承:使用内嵌的方式,对结构体struct进行组合 多态:使用interface实现 3、五大基本原则 1、单一功能原则(struct) 2、开闭原则(扩展是开放,修改是关闭的) 3、里氏替换原则(子类可以替换父类,而程序逻辑不变) 4、接口隔离原则 5、依赖反转原则(对接口进行开发...阅读全文

Golang 中错误与异常需要重新认识

如何进行错误处理,这是一个Go程序员之间,特别是一些新的Go程序员,会经常讨论的问题.讨论到最后往往由于以下代码的多次出现而变成了抱怨. if err != nil { return err } 我们最近扫描了我们能找到的开源项目,这段代码只在一页或者两页中出现了一次,是不是比你想象的少很多.然而,必须到处写 if err != nuil的感觉依然存在 , 那一定是哪里出了问题,而且明显问题出在Go自己身上. 不幸的是,这是一个误解,而且很容易纠正.或许一个新的Go程序员想问 “怎么会只有一个错误处理?”,那么学习这种模式,保持它.在其它语言中可以使用try-catch或者其他类似机制去处理错误.因此程序员认为,当我需要在其他语言中使用try-catch的时候,我只需要在Go写if err ...阅读全文

Hyperledger Fabric学习笔记01-系统逻辑架构

本系列学习笔记以阅读《深度探索区块链:Hyperledger Fabric技术与应用》一书的笔记为蓝本,故默认Hyperledger Fabric 1.0,期间可能会追加最新版本的内容,到时会在里面注明。这是一个边看边写的系列,有兴趣的也可以先自行购买此书学习。 Hyperledger Fabric 1.0是一种通用的区块链技术,其设计目的是利用一些成熟的技术实现分布式账本技术(Distributed Ledger Techonlogy DLT)。 超级账本采用模块化架构设计,复用通用的功能模块和接口。 模块化的方法带来了可扩展性、灵活性等优势,会减少模块修改、升级带来的影响,能很好地利用微服务实现区块链应用系统的开发和部署。 Hyperledger Fabric 1.0设计的几个特点: 特...阅读全文

博文 2019-03-21 01:34:41 蜜汁炒酸奶

Delve代码分析笔记(3)——config

Delve程序运行起来以后,首先就会加载和解析配置文件: func New() *cobra.Command { // Config setup and load. conf = config.LoadConfig() ...... } Delve的配置文件位于用户home目录下的.dlv文件夹下,文件名是config.yml。例如,如果是root用户,则配置文件的全路径是:/root/.dlv/config.yml。目前配置文件只支持为命令指定别名。 config包只包含一个config.go文件。代码也比较简单,归纳起来就是:如果用户没有创建配置文件,则替用户创建一个(里面没有实质内容),然后读取配置文件内容,并把Config结构体(定义如下)返回给调用者。 // Config defi...阅读全文

Template Method in Golang

序言 随着容器云技术的不断成熟,微服务架构也变得越来越火。在微服务架构下,我们将原本单一的应用按照功能边界分解成一系列独立、专注的微服务。每个微服务对应传统应用中的一个组件,但是可以独立编译、部署和扩展。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈,比如编程语言和数据库。Golang语言这几年风华正茂,不仅kubernetes、 openshif和docker等容器云相关的开源项目的开发语言是Golang,而且很多对实时性要求不高的微服务团队也选择Golang作为主要开发语言。 在这个大背景下,笔者也开始了Golang之旅。Golang作为一门全新的静态类型开发语言,与既有的开发语言相比简洁、有趣却又超级强大,具备众多令人兴奋不已的新特性,其中最令笔者兴奋的两个特性...阅读全文

博文 2017-02-10 14:39:37 _张晓龙_

[译]使用Go Cloud的Wire进行编译时依赖注入

2018年10月9日 概述 Go团队最近公布了用于开放云开发的可移植云API和工具,开源项目Go Cloud 。 这篇文章详细介绍了Wire,一个随Go Cloud提供的依赖注入工具。 Wire解决了什么问题? 依赖注入是一种编写可伸缩、低耦合代码的标准技术。因为依赖注入显式地为组件提供他们需要工作的所有依赖关系。 在Go中,这通常采用将依赖项传递给构造函数的形式: // NewUserStore返回一个使用cfg和db作为依赖项的UserStore。 func NewUserStore(cfg *Config, db *mysql.DB) (*UserStore, error) {...} 复制代码这种技术在小规模下工作得很好,但是较大的应用程序会存在一个复杂的依赖图。这导致了一大块依赖于...阅读全文

博文 2018-10-17 10:03:20 一桶冷水

Go init函数

init函数会在main函数执行之前进行执行、init用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作。 如果一个包被多个地方引用,那么只有在这个包第一次被引用时,才会执行这个包里边的init函数,其他地方对包的再次引用,这个包里边的init函数不会被执行。 init 函数在包级别被定义,主要用于: 初始化那些不能被初始化表达式完成初始化的变量 检查或者修复程序的状态 注册 仅执行一次的计算 更多其它场合 main.go中的内容是: package main import ( "pk1" "pk2" ) func main() { pk1.Pk1Demo() pk2.Pk2Demo() } pk1目录中的de1.go package pk1 import ( "fmt" ) f...阅读全文

博文 2019-04-08 20:35:13 听砜

电商设计手册之基础商品信息

前言 建议使用大屏设备(例如pad/pc),可以更好的浏览本篇文章 今天我们开始「商品系统」的篇章。本文分为如下五大模块: 需求分析 架构设计 Spu和Sku的故事 数据模型设计 接口设计 第一篇我们主要看看一个入门的电商平台(B2C)如何去构建自己的基础商品信息,其实这个事情很简单,想想我们的现实生活,商家摆放商品到货架,客户从货架挑选商品,客户把挑选好的商品放入购物车(篮),最后客户去收银台结账。 需求分析 对于一个电商平台来讲,我们怎么理解上面的简单示例呢?接着,我们来拆分上面这个简单的事情: 商家摆放商品到货架,客户从货架挑选商品,客户把挑选好的商品放入购物车(篮),最后客户去收银台结账 商家是谁:电商平台 摆放是什么意思:上架 货架在哪:前台系统(web/app/...) 挑选:浏...阅读全文

Go语言实战笔记(二十三)| Go 调试

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续笔记。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。 对于任何程序员来说,调试程序是必备的技能。当我们的开发好的程序不符合我们的预期时,就需要我们通过调试它找到根本的原因,然后才可以有针对性的解决它。 调试是一种技能,不限于我们说的debug,这只是其中的一种,这是可以打断点的调试,除此之外,还有打印输出、日志记录、单元测试,这都可以称之为调试程序的手段。 打印输出打印输出是一种比较传统的调试手段,我们可以把我们需要了解的变量值,执行的步骤等打印出来,来证明我们的猜测,以便解决问题。 123456789func min(a,b int) int {...阅读全文

博文 2017-08-28 07:06:44 飞雪无情

Go基础学习记录 - 编写Web应用程序 - 安全验证

载Go基础学习记录 - 编写Web应用程序 - 安全验证 安全验证 前面加了很多功能,但是程序存在严重的安全漏洞,用户可以访问在服务器上读/写的任意路径。为了缓解这种情况,我们可以编写一个函数来使用正则表达式验证标题。首先,将"regexp"添加到导入列表中。然后我们可以创建一个全局变量来存储我们的验证表达式: var validPath = regexp.MustCompile("^/(edit|save|view)/([a-zA-Z0-9]+)$") 函数regexp.MustCompile将解析并编译正则表达式,并返回一个regexp.Regexp。MustCompile与Compile的区别在于,如果表达式编译失败,它将会出现异常,而Compile会将错误作为第二个参数返回。现在,让...阅读全文

博文 2018-08-10 23:34:58 DurbanZhang

Go基础编程:Go语言介绍

本文转自:https://www.zhihu.com/question/21409296 Go语言是什么 2009年11月10日,Go语言正式成为开源编程语言家庭的一员。 Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 开发人员在为项目选择语言时,不得不在快速开发和性能之间做出选择。C和C++这类语言提供了很快的执行速度,而 Ruby 和 Python 这类语言则擅长快速开发。Go语言在这两者间架起了桥梁,不仅提供了高性能的语言,同时也让开发更快速。 Go语言优势 可直接编译成机器码,不依赖其他库,glibc的版本...阅读全文

博文 2019-04-26 23:32:38 tennysonsky

[译] 使用 Go 和 ReactJS 构建聊天系统 (六)

本节完整代码:GitHub 本文是关于使用 ReactJS 和 Go 构建聊天应用程序的系列文章的第 6 部分。你可以在这里找到第 5 部分 - 优化前端 在本节中,我们将专注于将 Docker 添加到后端应用程序中。 为什么要这么做呢?在我们研究诸如身份验证,负载均衡和部署之类的问题前,使用容器技术部署应用程序是个标准的做法。 为什么用 Docker 如果这是你第一次听说 Docker 容器化技术,那么你可能会质疑使用它的原因。 对我来说,其中一个主要原因是它让部署变得更加容易。你可以将基于 docker 的应用程序部署到支持 Docker 的任何服务器或平台。 这意味着,无论你在何处部署,都可以使用简单的命令启动应用程序。 不仅如此,它还解决了 “在我的机器上运行好好的” 这个问题,因为...阅读全文

博文 2019-08-03 11:34:17 咔叽咔叽

Java 进阶面试问题列表

面向对象编程的基本理念与核心设计思想解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)。继承(Inheritance)与聚合(Aggregation)的区别在哪里。你是如何理解干净的代码(Clean Code)与技术负债(Technical Debt)的。描述下常用的重构技巧。阐述下SOLID 原则。其他的譬如 KISS,DRY,YAGNI 等原则又是什么含义。什么是设计模式(Design Patterns)?你知道哪些设计模式?你有了解过存在哪些反模式(Anti-Patterns)吗?你会如何设计登陆舰/数学表达式计算程序/一条龙?你知道哪些基本的排序算法,它们的计算复杂度如何?在给定数据的情况下你会倾向于使...阅读全文

博文 2018-10-10 21:06:05 Java007

Golang桥接模式将多个chan桥接成一个chan

bridges/bridges.go // bridges package bridges type BridgeO struct { } func NewBridge() *BridgeO { bridgeO := &BridgeO{} return bridgeO } func (bridgeO *BridgeO) OrDone( done, c <-chan interface{}, ) <-chan interface{} { valStream := make(chan interface{}) go func() { defer close(valStream) for { select { case <-done: return case v, ok := <-c: if ok...阅读全文

博文 2019-06-18 15:32:53 FredricZhu

ldd与otool

ldd ldd命令用于打印程序或者库文件所依赖的共享库列表 ldd不是一个可执行程序,而只是一个shell脚本 golang go install -buildmode=shared std go build -linkshared hi.go Linux ldd /usr/local/bin/openssl linux-vdso.so.1 => (0x00007fffa4913000) libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007fc0de4b5000) libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007fc0ddfc5000) libpthread.so....阅读全文

月薪 50K 大牛整理!六大Java架构进阶技术模块,看完茅塞顿开!

大多数人选择Java可能只是因为听说Java前景好、Java比较好找工作、Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java真的还是之前那么好吗?​下面给大家分享一下月薪50K大牛整理的Java架构进阶技术知识导图开源框架解析学习 SSM 的基本用法能够帮助你完成绝大多数开发任务,掌握了高级用法能够提出更好的解决方案。学习框架没有捷径,在工作中一遍一遍地练习是唯一的方式。很多人面试失败就败在原理上,只知其一,不是其二,稍微问的深入一点就答不上来了。理解原理就是理解 SSM 框架的灵魂,这也是一个程序员从体力劳动进阶到脑力劳动的门槛。不理解原理只能做写代码的工具,理解原理才能成为真正的开发工程师。多思考、多总结、多请教,保持好奇心,多问一句是什么、为什么,才能探索到框架的...阅读全文

博文 2019-01-17 00:15:23 javajiaoliu

[译] part 7: golang 包

文地址:Part 7: Packages 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 什么是包以及为什么要使用它 到目前为止,我们看到的 go 代码只有一个文件,其中有一个 main 函数和其他几个函数。在实际场景中,将所有源代码写入单个文件不是一个好方法。复用和维护这种代码将变得非常艰难,包就是用来解决这些问题的。 包可以使代码更好的复用和可读,也可以使代码解耦,因此使得应用程序很容易维护。 例如,假设我们正在创建一个 go 图像处理的应用程序,它提供了图像裁剪,锐化,模糊和色彩增强等功能。组织此应用程序的一种方法是将与功能相关的所有代码分组到自己的包中。例如,裁剪可以是单个包,锐化可以是另一个包。这样做的优点是,色彩增强功能可能需要一些锐化功能。色彩增强代码可以简单地导...阅读全文

博文 2019-04-23 04:34:39 咔叽咔叽_7647

Go Micro 总体设计

Go-micro 是什么 Go-micro框架是一套微服务分布式的框架,可以大幅度的提高开发效率。源码地址:https://github.com/micro/go-microGo-micro拥有很多特性: 服务注册、发现 负载均衡 消息解码,并默认支持json以及protobuf 基于rpc的请求响应 异步的消息通讯 接口可插拔 其中最值得一提的是最后一个特性,接口可插拔。只要实现上图的8个关键interface,就可以随意的根据需求重新时间这8个接口的功能。 这8个接口一实现了go-micro的整体架构。这些接口都有默认的实现方式,意味着你不需要写任何的插件就可以使用这个微服务架构。 主要interface 整个Go Micro 都是有这8个interface构成的,换而言之只要理解了这8...阅读全文

博文 2019-07-10 17:03:02 大二小的宝

Golang pipline的最佳实践--使用channel

package main import ( "fmt" ) func main() { generator := func(done <-chan interface{}, args ...int) <-chan int { results := make(chan int) go func() { defer close(results) for _, v := range args { select { case <-done: return case results <- v: } } }() return results } multiply := func(done <-chan interface{}, intStream <-chan int, multiplier int) ...阅读全文

博文 2019-06-16 21:32:41 FredricZhu

如何把golang的Channel玩出async和await的feel

引言 如何优雅的同步化异步代码,一直以来都是各大编程语言致力于优化的点,记得最早是C# 5.0加入了async/await来简化TPL的多线程模型,后来Javascript的Promise也吸取这一语法糖,在ES 6中也加入了async和await. 那么,被大家一称赞并发性能好、异步模型独树一帜的golang,能否也有async和await呢? 其实,这对于golang的CSM来说是一点也不难! 核心代码如下: done := make(chan struct{}) go func() { // do work asynchronously here // close(done) }() <-done 复制代码是不是很简单呢? go rountine负责async, channel的负责a...阅读全文

博文 2020-02-11 11:34:19 raining1127

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

Go语言简介

简介: Go语言是谷歌推出的一种全新的编程语言。 Go概述 Go语言是谷歌2009年发布的第二款开源编程语言,它专门针对多处理器系统应用程序的编程进行了优化,它是一种系统语言其非常有用和强大,其程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能。 Go可以在不损失应用程序性能的情况下降低代码的复杂性。 Go语言简介 发表时间: 2009年 类型: 开源编程语言 公司: 谷歌 官网:http://golang.org API文档:https://golang.org/doc/ 教程:http://www.muzhuangnet.com/manual/Golang/ 下载:https://...阅读全文

Java零基础入门

课程介绍 本课程主要讲解JavaSE的发展历史,JDK开发环境的搭建,CLASSPATH属性作用,Java程序基本结构、基本数据类型的划分及使用、程序结构、方法的定义与使用,本课程是作为Java系列课程的初期课程,掌握本课程之后可以继续学习Java高级开发部分。 课程目标 • 掌握java基础 适合人群 • 0起点学员 课时列表 • 课时1:【Java摸底自测】10道题测测你的Java底子 • 课时2:Java简介(Java发展概述) • 课时3:Java简介(Java主要特点) • 课时4:JDK的安装与配置 • 课时5:第一个Java程序 • 课时6:CLASSPATH环境属性 • 课时7:Java程序基本...阅读全文

你也可以算出圆周率的 - 随机落点算法 - 致即将到来的圆周率日

一年一度的圆周率日就要到了,是的,就是3月14日,因为它与圆周率π的前几位3.14的数字一样。我们知道,传说中祖冲之计算圆周率用的是“割圆术”的改进方法,可惜我们大多数现代人的脑子已经无法理解这种方法了。使用其他的复杂公式也有,但人的脑子更不容易理解,但有一个异想天开的方法你知道吗?任何人可以简单地去计算出Pi呢(下面我们都用Pi来代替圆周率π吧,好写好认,:p)。这个方法源自概率论的基础,叫做蒙特卡洛法,形象一点的话我们也可以把它称为随机落点法,我们先说说它的原理:我们先看看下面这张图 假设有图中的一个正方形和一个刚好套在它中间的圆形,可以很直观地看出:圆形的半径如果是R的话,正方形的边长就是2R。圆形的面积根据公式是Pi乘以R的平方,也就是 Pi × R × R = PiR²正方形的面积...阅读全文

博文 2020-03-13 01:32:51 陆满庭

第六天:golang学习笔记之time

★time | time包提供了时间的显示和测量用的函数. time time包提供了时间的显示和测量用的函数. time包提供了最基本的时间计量结构Time,Duration,Location 时间打印格式如下: 2019-12-18 21:45:32.987483681 +0800 CST m=+0.000048086 年-月-日 小时:分钟:秒.纳秒 时区 m=+xxx.xxxxxxx UTC:协调世界时(Universal Time Coordinated),UTC相当于本初子午线(即经度0度)上的平均太阳时,北京时间比UTC时间早8小时 CST:CST可能就是北京时间?China Standard Time m=+xxx.xxxxxxx:这里的xxxxxxx为与程序执行开始时间的时...阅读全文

博文 2019-12-19 00:32:42 Macmillan_

Golang 编译Mac、Linux、Windows多平台可执行程序

Golang 支持在一个平台下生成多个平台运行包 编译之后直接可执行,使用起来非常方便 1.MacMac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2.LinuxLinux下编译Mac, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 3.Win...阅读全文

Golang 交叉编译可执行程序

可以通过 go env 查看当前系统对应的配置,默认编译出的是对应的系统的可执行文件,所以需要编译别的平台的文件的时候,只要将 go 的环境变量设置成对应的架构就可以编译不同平台的文件了 Linux 下编译 Mac 和 Windows 64 位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Mac 下编译 LInux 和 Windows 64 位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=w...阅读全文

博文 2020-04-12 06:32:41 一位路过的假面骑士丶
break default func interface select
case defer go map