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

golang开发环境搭建

Golang开发环境搭建 Golang 入门教程 开发环境搭建 介绍 Go语言是谷歌推出的一种全新的编程语言, 可以在不损失应用程序性能的情况下降低代码的复杂性。 谷歌首席软件工程师罗布派克(Rob Pike)说: 我们之所以开发Go, 是因为过去1 0多年间软件开发的难 度令人沮丧。 谷歌资深软件工程师罗布·派克(Rob Pike)表示, “Go让我体验到了从未有过的开发效率。 ”派克表示, 今天的C++或C一样, Go是一种系统语言。 他解释道, “使用它可以进行快速开发, 同时它还是一个真 正的编译语言, 我们之所以现在将其开源, 原因是我们认为它已经非常有用和强大。 百度百科 维基百科 golang官网 安装 Windows 官方说明 http://golang.org/doc/in...阅读全文

博文 2014-12-05 14:00:02 steven_hl_0901

零猫科技告诉你-Go语言可以干嘛?

Hi,大家好!我是GO首席软件工程师Rob Pike说:我之所以被开发,是因为过去10多年间软件开发的难度令人沮丧。你所不知的,GO Go语言是谷歌发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此也被设计用来解决多处理器的任务。我是GO,我够红 目前,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer、k8s等,现在我们看下,有哪些大公司在用Go语言了。Google对Go寄予厚望。旗下Ap...阅读全文

Go最新的dep详解

该文翻译自https://medium.com/i-can-haz-downtime/dep-101-c85e8ab6ed45#.hbngswi0e我很高兴在过去几个月和几个其他gopher开发的一个原型依赖管理工具,名为dep。dep是去年开始由Peter Bourgon组织的项目的一部分。由于我参与开发了一个“godep”,Go的OG依赖管理工具(继承自Keith Rarick),因此加入了dep项目的团队。除了我自己和Peter,团队的其他成员是Jessie Frazelle,Andrew Gerrand和Sam Boyer。 Andrew是Google Go team的一员。 Jessie在Google工作,并参与过大型Go项目,如Docker和Kubernetes。 Sam维护gp...阅读全文

博文 2017-02-14 11:24:45 方圆

golang命令行库cobra的使用

简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序。下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app server, app fetch等等 完全兼容posix命令行模式 嵌套子命令subcommand 支持全局,局部,串联flags 使用Cobra很容易的生成应用程序和命令,使用cobra create appname和cobra add cmdname 如果命令输入错误,将提供智能建议,如 app srver,将提示srver没有,是否是app server 自动生成commands和flags的帮助信息 自动生成详细的help信息,如app help 自动识别-h,--help帮助flag...阅读全文

博文 2016-07-29 10:00:01 borey

使用 SwaggerUI 创建 Golang API 文档

为你的 API 提供一个文档比你想象中更加有用,即使你没有公开你的 API ,为你的前端或者移动团队提供一个文档会比你提供截图/片段或使用 Postman/Insomnia (带有同步的高级版本)等付费产品更容易。借助 SwaggerUI ,您可以自动获得所有 API 的设计良好的文档。当切换到 Go 时,由于缺少文档/教程,我在配置它的时候出现了一些问题,所以我决定写一个。 ![goswagger](https://raw.githubusercontent.com/studygolang/gctt-images/master/swagger-golang/swagger-golang1.jpg) 示例程序:[链接](https://github.com/ribice/golang-swa...阅读全文

博文 2018-02-05 12:02:27 toseek

CentOS安装Go语言编译环境&配置LiteIDE

Go语言是谷歌2009正式推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。 到这里 https://code.google.com/p/go/downloads/list 选择你需要的版本,安装非常简单,如下: 1 2 3 wget https://go.googlecode.com/files/go1.1.1.linux-386.tar.gz tar -C /usr/local -xzf go1.1.1.linux-386.tar.gz vim /etc/profile #打开/etc/profile在最后添加下面两行 export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH 1 2 3 4 source...阅读全文

博文 2014-10-12 19:00:01 hack715

2015年web开发的预测。。go语言

本文中,我们将一同看看当今 Web 开发的发展趋势,给大家分享我对 2015 年及未来的一些看法、观察和预测。我从 2000 年就开始做 Web 技术方面的工作,而近几年主要是做云架构解决方案。作为一名 Web 开发者,我曾在 .Net、Node.js 和 Go 技术栈上开发 Web 应用和 Web 服务。最近,我将 Web 技术和开发趋势作为整体研究了一遍,在这里分享一下我的想法和观察结果。首先,让我分享一些我所观察到的可用性和体系结构目前的趋势。可用性的趋势如今,用户体验变得比以往更重要,响应式网页设计(RWD)也成为了网站必备的特性。RWD 能让最终用户在不同尺寸的设备上访问网站,包括手机和平板浏览器。有了 RWD 取代移动网站,我们便无需为移动用户单独开发额外的网站。特别是当我们需要...阅读全文

博文 2015-03-08 04:00:02 蘑蘑茶

golang之flag.String

无论是c语言还是golang语言或是其他语言,启动应用程序时都可以带一些参数,然后系统根据传入的参数进行特点的工作。如:./main -b /home/backupdir -d true 那么如何更好的解析这些参数呢?前两周自己做项目时是通过 range os.Args 来解析这些参数。今天看到了 flag.String 这个方法,感觉之前做的好傻,觉得更应该用golang自带的flag.String来解析参数。 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 ) 7 8 func main() { 9 backup_dir := flag.String("b", "/home/default_dir", "backup path") 10 de...阅读全文

博文 2015-07-20 03:00:00 hezhixiong

golang的跨域

在使用golang做web的应用程序的时候,最容易碰到跨域问题了,跨域就是www.a.com访问www.b.com的文件。但是在浏览器里,为了安全起见,这样做是不允许的,这就是js的同源策略了。不懂的话google一下。1.golang做web的应用程序,不用使用像apache的web服务器,因为它自己可以构造一个web服务器。这样问题就来了,因为你使用js做前台,golang做后台,这样js传值的时候,是可以传到服务器的,并且是可以进行跨域访问的,因为golang构造的服务器与你前台就造成了跨域问题了。而ajax传值是传到服务器端的,并且可以进行跨域访问,所以我在开发的时候果断使用了它。 2而在golang接受传值之后,要返回信息给前台,这是golang里面就要设置可以进行跨域访了。设置就...阅读全文

博文 2015-10-22 19:00:02 helloworld20102010

golang-2018优秀开源框架和库

作者:承诺一时的美丽链接:https://www.jianshu.com/u/6719426bf97e來源:简书音频和音乐用于操纵音频的库。flac - Native Go FLAC解码器。flac - Native Go FLAC解码器。gaad - Native Go AAC比特流解析器。go-sox - 用于go的libsox绑定。go_mediainfo - 用于go的libmediainfo绑定。gosamplerate - 用于go的libsamplerate绑定。id3v2 - Go的快速稳定的ID3解析和编写库。malgo - 迷你音频库。minimp3 - 轻量级MP3解码器库。mix - 用于音乐应用的基于序列的Go-native音频混音器。mp3 - Native Go...阅读全文

博文 2019-01-25 15:34:48 西门厌

扯淡 erlang 的“适合”和“不适合”

现在在体系内大力推广erlang了。不过挺遗憾的是,推行 erlang 前并没有对这个语言自身进行深入的论证和研究,只是由核心人员写了一个简单得不能再简单的 demo,在项目里用了一个开源的 erlang 项目。从工程的角度来说,这是不靠谱的,为了让 erlang 的使用更加靠谱,所以在这里扯淡一下。资料来源于erlang官方和我的猜测,对不对由我,信不信由你。 先看来自 erlang FAQ的内容(自己随手翻译的,不一定准确,可看原文:http://www.erlang.org/faq/introduction.html#1.3): —————————————————— 1.3 Erlang 特别适合使用的项目是什么? 分布式的,可靠的,软实时并发系统。 * 电信系统,例如控制交换或者协议...阅读全文

博文 2014-10-09 16:15:13 mikespook

Go程序到底需不需要docker?

我是Go的粉丝,而且我也对容器感兴趣。容器可以使得代码更容易部署也更容易扩展。 但并不是所有Go程序员都使用容器。 在本文中,我将探讨一些真正应该考虑使用Go和容器的原因 - 然后我们来看一些容器根本不会增加任何好处的情况。首先,我们要确保我们都在相同的起点上。什么是容器对于使用这些容器的人来说,可能有许多不同的定义。对于许多人来说,尽管容器比Docker开源项目或Docker公司要久远得多,“容器”一词与Docker是同义词。如果您是容器的新使用者,Docker可能是您的最佳起点,其提供对开发人员友好的命令行支持,但依然还有其他可用的实现:Linux容器 - 容器实现,包括LXC和LXD来自CoreOS的rkt-pod-native容器引擎runc - 按OCI规范运行容器Windows容...阅读全文

博文 2017-04-25 03:07:32 方圆

mqtt介绍和go代码实现

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家...阅读全文

博文 2018-08-27 09:35:06 John_zhang

使用 Go 语言开发 Android 程序

环境配置 安装 Go 1.5 以上版本,具体安装步骤见官网 https://golang.org/doc/install 安装 gomobile https://godoc.org/golang.org/x/mobile/cmd/gomobile执行以下命令,安装过程中可能需要翻墙 go get -v golang.org/x/mobile/cmd/gomobile gomobile init -v 在安装过程中可能会发生以下问题 提示 unrecognized import path 错误,通常翻墙后可解决 提示 import path does not begin with hostname 错误,如果设置了 GOROOT 的话取消该设置 提示 $GOPATH not set 错误,检查...阅读全文

博文 2017-03-20 05:34:12 bookislife

golang开发目录结构

在实际的项目中发现大家的目录结构都比较凌乱,基本每个人都有每个人的风格,一个项目在不断地变大,一些新的文件或目录又不断地被添加进来,从这里面去找到自己需要的信息的成本越来越高,一个统一的通用的目录结构非常有必要。 以下内容来自于github上的这个项目(https://github.com/golang-sta...) /cmd main函数文件(比如 /cmd/myapp.go)目录,这个目录下面,每个文件在编译之后都会生成一个可执行的文件。 不要把很多的代码放到这个目录下面,这里面的代码尽可能简单。 /internal 应用程序的封装的代码,某个应用私有的代码放到 /internal/myapp/ 目录下,多个应用通用的公共的代码,放到 /internal/common 之类的目录。 /...阅读全文

博文 2018-01-22 00:34:36 hatlonely

golang手动管理内存

作者:John Graham-Cumming. 原文点击此处。翻译:Lubia Yang 前些天我介绍了我们对Lua的使用,implement our new Web Application Firewall. 另一种在CloudFlare (作者的公司)变得非常流行的语言是Golang。在过去,我写了一篇 how we use Go来介绍类似Railgun的网络服务的编写。 用Golang这样带GC的语言编写长期运行的网络服务有一个很大的挑战,那就是内存管理。 为了理解Golang的内存管理有必要对run-time源码进行深挖。有两个进程区分应用程序不再使用的内存,当它们看起来不会再使用,就把它们归还到操作系统(在Golang源码里称为scavenging )。 这里有一个简单的程序制造了...阅读全文

记一次golang gc优化过程

我们使用golang编写的线上服务,通常会设置一个golang runtime指标监控,包括goroutine num、gc num、gc pause 等等。最近的一次上线,发现 gc 相关的指标出现异常,gc num 和 gc pause 大幅升高。由于 golang 的 gc 是 stop the world 来做, gc 过多会抢占程序的正常执行时间,甚至影响对外提供的服务,因此暂停了上线,准备先把 gc 的问题修复下。 出问题时的 gc 监控如下: image.png 其中蓝色曲线表示 gc num,黄色曲线表示 gc pause(单位ms),两个指标都是30s的累计数据。可以看到每30s的pause达到了秒级别。 登录到线上机器,通过 go tool pprof --alloc_o...阅读全文

博文 2017-09-25 12:34:48 zippera

Go-数据库连接

GO src中自带了sql包和连接数据库的包。这里以连接MYsql为例子。 sql.Open 就是开启了一个数据库连接处。在执行EXEC 或者 QUERY的时候就会自己去建立连接。因此整个应用程序 只需要初始化一次sql.db指针。然后到处用就oK了。 // dbTest project main.go package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time" ) func IsErr(err error) { if err != nil { fmt.Printf("程晗错误:%s", err) } } func main() { //初始化数据库信息,此时就是一个数据库连接池 d...阅读全文

博文 2015-11-07 15:00:01 shuanger_

数据库不适合Docker及容器化的7大原因

导读:所有的服务都开始了容器化升级,在一切皆容器的主流思想下,无状态的服务采用容器化已经是大势所趋,常常困扰架构师的一个问题是,数据库是否需要容器化,本文作者 Mikhail Chinkov 提出了自己否定观点,由高可用架构翻译。如果我们观察 2017 年技术行业,容器和 Docker 依然将是最热门的流行语。我们开始在每个领域的 Docker 容器中打包开发的软件。从小型初创公司到巨大的微服务平台都在使用容器技术。从 CI 平台到 Raspberry Pi 。从数据库到……数据库?您确定要将数据库放在容器中吗?不幸的是,这不是虚构的场景。我看到许多快速增长的项目将数据持久化到容器中。并且将计算服务和数据服务放在同一台机器上。笔者希望有经验的人不会用这个解决方案。下面是我的观点,数据库容器化...阅读全文

博文 2017-02-15 03:10:00 Mikhail Chinkov

Go语言为什么这么流行?

这个问题很复杂,多方面原因决定了Golang的实用价值。 Go语言的背景 Go的吉祥物Gordon田鼠,是由Google公司创造一种新程序语言,并且公司为这门语言付出了极大的努力。Go语言一出现就获得业界的普遍关注和使用。为什么呢? Go具有一些多数程序语言没有的资产。首先,这是一个Google计划,它有数量庞大的服务器和技术高超的程序设计师为后盾。Google的一个实验产品可能比许多其他公司的实际产品更具商业意义。2007年,Google公司的三位核心人员 Robert Griesemer, Rob Pike, 和 Ken Thompson 设计出了Go语言,其语言定位为系统编程语言。只看Go创始人就理解Google有多么厉害,这三位创始人的简介如下。 Robert Griesemer i...阅读全文

博文 2016-04-29 13:00:01 GreatElite

专业 Golang HTTP 服务器

> 如何使用 Go 启动新的 Web 项目,使用路由,中间件和让我们加密认证。 Golang 有一个很棒的自带 http 服务器软件包,不用说就是: net/http, 它非常简单,但是功能非常强大。 定义处理路由的函数,端口是 80。 ```go package main import ( "io" "net/http" ) func main() { http.HandleFunc("/", helloWorldHandler) http.ListenAndServe(":80", nil) } func helloWorldHandler(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!"...阅读全文

博文 2018-05-18 14:38:22 wentingrohwer

多云环境应用管理平台OpenPitrix

OpenPitrix 是一个将应用程序打包和部署到诸如 QingCloud,AWS,Kubernetes 等多个云环境中的开放平台. Pixrix [Paitriks] 是指 PaaS 和 IaaS 的矩阵,可以轻松开发,部署,管理各种应用程序,包括各种 PaaS 运行时环境,即 Pitrix = PaaS + IaaS + Matrix。 它也意味着一个包含无尽的矩阵(PI - 希腊字母“π”)应用程序。 设计: 基本思想是解耦应用程序存储库和运行时环境。 应用程序可以运行的运行时环境是通过匹配运行时环境的标签和应用程序所在的存储库的选择器。详情请查看[如何设计项目](https://github.com/openpitrix/openpitrix/blob/master/docs...阅读全文

golang编写的数据库中间件kingshard

偶然网上看到这个kingshard,自己对golang感兴趣就试玩了一下,可以正常跑成功。 数据库中间件是什么呢?简单的说和数据库类似,不同的是当程序里发送sql给它的时候,它会根据配置对sql进行分析,而后将sql发送到指定的节点(node)上,它的后面是若干数据库运行实例。 当应用发展起来后,随着数据库的压力逐渐变大,通常都要进行分库,分表,主从分离,这些东西在应用程序里实现也可以,但是会造成应用程序过于复杂,后续难以维护。使用中间件,将分库、分表、主从分离逻辑放到中间件上就更好的分离代码。 kingshard整体架构如下: kingshard架构图 其中 client是需要连接数据库的客户端; kingshard就是数据库中间件了; node1和node2就是不同的mysql数据库节点...阅读全文

博文 2015-10-16 21:53:38 陈杰斌

常见规则引擎技术

什么是业务规则?在需求里面我们往往把约束,完整性,校验,分支流等都可以算到业务规则里面。在规则引擎里面谈的业务规则重点是谈当满足什么样的条件的时候,需要执行什么样的操作。因此一个完整的业务规则包括了条件和触发操作两部分内容。而引擎是事物内部的重要的运行机制,规则引擎即重点是解决规则如何描述,如何执行,如何监控等一系列问题。 对于快速软件开发平台往往会包括两个方面的内容,一个是可重用性,一个是可配置性。对于公用组件,公用基础类库,公用算法等往往是增加了可重用性;而对于对象模型,权限模型,工作流模型,规则引擎则是解决平台的高可配置性。 权限模型实现了用户岗位,角色和权限调整可配置。工作流引擎实现了在流程出现变化的时候可以灵活配置。规则引擎将业务决策也从程序代码从抽离出来,实现规则变化也可以灵活配...阅读全文

博文 2017-11-29 02:51:42 it_man

QOR:基于go语言开发的电商系统、CMS工具包

QOR是首个使用Go语言开发的电商系统和CMS的软件工具开发包(SDK),开源项目,包含一系列的通用功能模块,实现快速集成、灵活配置,让开发电商网站、CMS,像搭积木一样简单快捷。 ## 目前已经上线的模块 * Admin: 快速为您的应用程序生成一个漂亮、可跨平台运行、可配置的管理后台。 * Publish: 分别设置预演和正式服务器,使用Publish,内容管理员就能在正式发布之前预览所更新的内容。 * Transition: 用Transition来体现业务流程和执行业务规则。 * Media Library: 支持上传文件至云端或其他位置;支持图像裁剪和调整尺寸。 * Worker: 运行批处理进程,进行批量数据处理或其他耗时的计算。 * Exchange: 应...阅读全文

golang的协程原理

协程是应用层的线程。 应用层是相对于内核层而言,是操作系统的概念,对应的是cpu的运行级别。操作系统的核心代码运行的ring0级别,应用程序的代码运行在ring3级别。内核与应用层的级别设置保证了一些高权限的操作只有内核代码能做,应用程序要使用这些功能必须通过调用操作系统的API(linux上称为系统调用)来调用内核的代码。这个调用会导致cpu从ring3到ring0的上下文切换,这个切换是耗费一些cpu时间的。 线程是操作系统的内核对象,多线程编程时,如果线程数过多,就会导致频繁的上下文切换,这些cpu时间是一个额外的耗费。所以在一些高并发的网络服务器编程中,使用一个线程服务一个socket连接是很不明智的。于是操作系统提供了基于事件模式的异步编程模型。用少量的线程来服务大量的网络连接和I...阅读全文

博文 2017-03-15 15:00:43 徐学良

Golang信号处理和优雅退出守护进程

Golang中的信号处理 信号类型 个平台的信号定义或许有些不同。下面列出了POSIX中定义的信号。 Linux 使用34-64信号用作实时系统中。 命令 man signal 提供了官方的信号介绍。 在POSIX.1-1990标准中定义的信号列表 信号 值 动作 说明 SIGHUP 1 Term 终端控制进程结束(终端连接断开) SIGINT 2 Term 用户发送INTR字符(Ctrl+C)触发 SIGQUIT 3 Core 用户发送QUIT字符(Ctrl+/)触发 SIGILL 4 Core 非法指令(程序错误、试图执行数据段、栈溢出等) SIGABRT 6 Core 调用abort函数触发 SIGFPE 8 Core 算术运行错误(浮点运算错误、除数为零等) SIGKILL 9 Te...阅读全文

博文 2017-06-20 12:07:01 水滴穿石

用Go语言绘制Go语言地鼠吉祥物

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。但Go语言除了擅长处理服务器端任务外,它还可以用来做图。 package main import ( "log" "github.com/fogleman/pt/pt" ) func main() { scene := pt.Scene{} wall := pt.SpecularMaterial(pt.HexColor(0xFCFAE1), 2) scene.Add(pt.NewSphere(pt.Vector{4, 7, 3}, 2, pt.LightMaterial(pt.Color{1, 1, 1}, 1, p...阅读全文

博文 2015-03-05 11:29:45 techug

兄弟连区块链技术培训分享GO语言学习

Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。 兄弟连Go语言+区块链培训课程共计22周学习时长,划分为9个学习阶段,即区块链主流语言-Go语言开发实战、区块链后端技术体系-Go语言高并发和服务器开发、Go开发区块链公链(区块链密码学、分布式编程、共识算法、基本概念,Golan公链开发)、eth与智能合约与DAPP开发、区块链分布式应用开发、区块链系统框架开发-超级账本与区块链3.0EOS、Go与区块链面试强化和高级企业级项目实战。1.导入包,一个主函数中只有一个main函数,包含一个...阅读全文

博文 2018-08-28 15:35:16 兄弟连区块链培训

BoltDB 一个简单的纯 Go key/value 存储 [译]

boltDB Blot Bolt 是由 Howard Chu 的 LMDB 项目启发的一个纯粹的 Go key/value数据库。 该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速和可靠的数据库。 由于 Bolt 是用来作为这样一个低层次的功能,简单是关键。 该API将是小的,只专注于获取值和设置值而已。 项目状态 Blot 稳定,API固定,文件格式固定。 使用完整的单元测试覆盖率和随机黑箱测试来确保数据库一致性和线程安全性。 Blot 目前用于高达1TB的高负载生产环境。 Shopify 和 Heroku等许多公司每天都使用 Bolt 来支持服务。 A message from the author Bolt 最初的目标是提供一个简单的纯 ...阅读全文

Golang使用amqp发送消息

1.为什么使用信道(channel)而不使用TCP连接发送AMQP命令? 对操作系统来说频繁的建立和销毁TCP连接开销非常昂贵,而操作系统每秒建立的连接是有上限的,性能瓶颈不可避免,而只建立一条TCP连接无疑是一个很好的方案,在这条连接当中建立多条信道与RabbitMQ进行私密通信,相当于光纤电缆一样,一条电缆有多条光束,信道是没有限制的 2.队列 1)AMQP的命令basic.consume与basic.get 如果需要消息一到达队列就自动接收的话,应该使用basic.consume basic.get会订阅消息,获得单条消息,然后取消订阅,值得注意的是不应该循环basic.get来替代basic.consume,应该理性使用basic.consume实现高吞吐量 消息如果到达无人订阅的队...阅读全文

博文 2016-10-11 08:00:18 fyxichen

微服务架构

微服务架构·基础篇 看到最近“微服务架构”这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习。而架构师老王(不是隔壁老王)最近刚好在做公司基础服务的微服务化研究和落地,对此深有研究。 于是成小胖马上屁颠屁颠的跑过去向老王请教:“王哥,我看微服务架构这么火,我也想学,您给我讲讲啥是微服务架构呗?” 老王笑了笑说:“要想知道什么是微服务架构,你得先知道什么系统架构设计。” 成小胖的理想是成为一名架构师,平时积累了不少知识,因此对“系统架构设计”这个概念还是很熟悉的,因此他马上就给出了答案【1】: 系统架构设计描述了在应用系统的内部,如何根据业务、技术、组织、灵活性、可扩展性以及可维护性等多种因素,将应用系统划分成不同的部分,并使这些部分彼此之间相互分工、相互协作,从而为用户提供某...阅读全文

博文 2017-10-29 15:03:58 Leo_wl

2017 年 Go 语言编程的发展

导读 在 Go 开源之后的 7 年里,它已被全球采用。他们可以更轻松地在易读而可用于生产环境的应用程序中向他人展示数据模型。与此相结合的是 Go 的广泛使用,而且有数据专家创建“可用并且与其它程序配合”的程序。任何使用 Go 构建的应用数据科学家会在公司其他部分使用相同的语言,或者至少它非常适合现代架构。 今年像动态插件,Serverless Go 以及 HTTP/2 这些创新对开发意味着什么 Go 1.8 刚刚发布,它有几个新功能,包括: 1.HTTP/2 Push 2.HTTP 服务器平滑关闭 3.插件 4.缺省 GOPATH 这些新功能的影响力取决于你和开发团队如何使用 Go。 自从 Go 1.0 于 2012 年发布以来,其简单性、并发性和内置支持使其保持普及度不断增长,所以对“Go...阅读全文

博文 2017-03-13 12:00:38 linux-tao

令人激动的微服务2.0技术栈

作者|Christian 编辑|禚娴静 当下市场瞬息万变,新技术不断涌现,而微服务持续火热。如果说2014年是微服务的元年,那么2015年和2016年则是微服务走下神坛的时刻,越来越多的开发者、架构师们探讨着如何落地,如何解决各种实际问题,而很多技术栈和工具也纷纷涌现。构建微服务时,我们真的深深进入了分析分布式系统 - 一个已经研究了40年以上的技术主题,复杂的自适应系统理论已经深入人心有很长的时间。从技术的角度来看,我们需要解决的事情如下:部署交付API版本控制合同缩放/自动缩放服务发现负载均衡路由/自适应路由健康检查配置熔断器bulk-headsTTL / deadlining延迟跟踪服务因果跟踪分布式日志度量操作与收集Netflix和一些互联网公司作为早期微服务的采用者在这些领域做了很...阅读全文

博文 2017-03-14 11:05:54 Christian

golang 第三方包的使用总结

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> golang 第三方包的安装的方法: 1. go get 安装 # 比如要安装 "github.com/gin-gonic/gin" $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时候go get命令并不能安装,所以就需要手动下载源码包,然后拷贝到$GOPATH/sr/ 目录下 # 比如要安装"github.com/golang/protobuf/proto" # 去github.com/golang/protobuf下载源码包, # 拷贝到 $GOPATH/src/gith...阅读全文

博文 2018-09-01 14:33:04 科陆李明

Validator

https://github.com/smartwalle/validator ## Validator 这是一个用 Golang 写的数据验证组件,主要用于验证 Struct 的属性是否满足特定的规范。 Golang 已经存在很多类似的第三方组件,但是总感觉使用起来不够灵活,尤其是在开发 API 接口的应用程序中,如果数据验证错误,需要返回一个 code 和 message 字段。[Validator](https://github.com/smartwalle/going/tree/master/validator) 这是我之前写的一个,使用起来总觉得不方便。 新版本的 Validator 将数据验证的权限完全将由者处理,开发者为每一个需要验证的属性写相关的验证方法,...阅读全文

beego自动化部署

beego是Golang写的应用程序开源框架http://beego.me/,我使用`beego`写了一个项目小项目,golang是编译语言,需要编译之后再部署,每次部署到服务上是件很麻烦的事情。就写了一个自动打包部署到服务器的脚本,方便发布部署。 ##**项目结构**先看看beego项目的结构: beepkg |-- conf | `-- app.conf |-- controllers | `-- default.go |-- main.go |-- models |-- routers | `-- router.go |-- static | |-- css | |-- img | `-- js |-- tests | `-- default_test.go `-- views `--...阅读全文

博文 2017-02-10 14:46:23 姜家志

说一说golang的协程

协程是应用层的线程。 应用层是相对于内核层而言,是操作系统的概念,对应的是cpu的运行级别。操作系统的核心代码运行的ring0级别,应用程序的代码运行在ring3级别。内核与应用层的级别设置保证了一些高权限的操作只有内核代码能做,应用程序要使用这些功能必须通过调用操作系统的API(linux上称为系统调用)来调用内核的代码。这个调用会导致cpu从ring3到ring0的上下文切换,这个切换是耗费一些cpu时间的。 线程是操作系统的内核对象,多线程编程时,如果线程数过多,就会导致频繁的上下文切换,这些cpu时间是一个额外的耗费。所以在一些高并发的网络服务器编程中,使用一个线程服务一个socket连接是很不明智的。于是操作系统提供了基于事件模式的异步编程模型。用少量的线程来服务大量的网络连接和I...阅读全文

博文 2016-01-15 19:00:01 truexf

[Golang] base64加密与解密

首先解释以下什么是base64(来自百度百科): Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。 在golang里有base64库可以实现相关操作,我尝试实现了加密解密...阅读全文

博文 2016-08-07 17:00:00 vincentX

分布式系统跟踪框架 Apache HTrace

Apache HTrace是Cloudera开源出来的一个分布式系统跟踪框架,支持HDFS和HBase等系统。该项目目前还在孵化阶段。 ![htrace-f1](http://static.oschina.net/uploads/img/201606/06153821_NjbB.png) Apache HTrace是一个 Apache Incubator 项目, 可以与独立的应用程序和库使用。 HTrace是专为大的分布式系统使用的, 如Apache Hadoop分布式文件系统和Apache HBase存储引擎。 通过添加HTrace 支持到你的项目上,你将允许终端用户跟踪他们的请求。 此外,任何其他项目 使用HTrace都 可以使它 按照 你的项目的请求。  这就...阅读全文

Canonical 用 Go 做了这五个超酷的项目

前不久,Google 的 Go 问鼎 TIOBE 排行榜,成为 2016 年年度编程语言。Go 因其易学性及务实性受到大家的喜爱。抛开长篇累牍的理论,Go 更注重的是实践经验,因此越来越多的用户将其应用到工业环境中。在 Canonical 中也一样!作为 Go 的支持者,我们用 Go 做了五个超酷的项目: 1、Juju Juju 堪称是“DevOps工作经验的结晶”,能使用 Charms 将应用程序体系结构部署到 EC2,OpenStack,Azure,HP 数据中心,甚至是基于 Ubuntu 的笔记本电脑。它使得开发和部署过程中团队间的对话和工作流程变得极为清晰明了。 2、Snapcraft Snapd 和 snap工具使系统能够使用 .snap 文件。 为每个 Linux 桌面,服务器,...阅读全文

博文 2017-01-24 17:00:09 编辑部的故事

响应式网页设计(RWD)__Go:2015 及未来的技术

本文中,我们将一同看看当今 Web 开发的发展趋势,给大家分享我对 2015 年及未来的一些看法、观察和预测。我从 2000 年就开始做 Web 技术方面的工作,而近几年主要是做云架构解决方案。作为一名 Web 开发者,我曾在 .Net、Node.js 和 Go 技术栈上开发 Web 应用和 Web 服务。最近,我将 Web 技术和开发趋势作为整体研究了一遍,在这里分享一下我的想法和观察结果。 首先,让我分享一些我所观察到的可用性和体系结构目前的趋势。 可用性的趋势 如今,用户体验变得比以往更重要,响应式网页设计(RWD)也成为了网站必备的特性。RWD 能让最终用户在不同尺寸的设备上访问网站,包括手机和平板浏览器。有了 RWD 取代移动网站,我们便无需为移动用户单独开发额外的网站。特别是当我...阅读全文

博文 2014-10-12 02:00:05 oywl2008

golang graphviz与pprof

sudo port install graphviz fuyundeMacBook-Pro:~ fuyun$ sudo port install graphviz Warning: The Xcode Command Line Tools don't appear to be installed; most ports will likely fail to build. Warning: Install them by running `xcode-select --install'. ---> Computing dependencies for graphviz ---> Fetching archive for graphviz ---> Attempting to fetch gr...阅读全文

博文 2015-06-17 20:04:01 x_focus

单点登录设计方案

单点登录设计方案 随着业务复杂性的增加,作为一个整体的应用程序会被划分成许多“模块”,这通常需要考虑为这些子应用程序建立一个共同的基础,或者说,一开始就选择SOA的设计方式。不管怎样,我们开始运行多个单独的应用程序,并且需要它们无缝交互时,共同的基础就是必备的。实现单点登录服务便是其中必备功能之一。 授权与认证的概念 很多人容易搞混这两个概念。最典型的就是OAuth。比如我们要建立一个集中式统一认证体系,有人就会跳出来建议使用OAuth。但实际上OAuth是一个授权系统,而不是身份认证系统。 这个很具有迷惑性。比如,你可能想某网站X通过OAuth“验证”你的QQ账户,让你能直接访问该网站。 但你真正做的是允许该网站X使用OAuth provider(服务提供方,比如-腾讯)存储的你的信息。 ...阅读全文

你所不知道的 Go 语言的一些令人惊叹的优点

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-advantage/1.png) > 插图来自 https://github.com/ashleymcnamara/gophers 在这篇文章中,我将会讨论为什么你应该尝试下 Go 语言,并且应该从哪里开始下手。 Golang 是一种编程语言,在过去的几年中你可能听说过很多。尽管是在 2009 年创建的,但是近年来才开始流行。 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-advantage/2.png) > 上图是根据 Google Trends 得出...阅读全文

博文 2018-03-13 10:06:01 huangjian

高性能的消息框架 go-disruptor

这是Go编程语言里 LMAX Disruptor的接口。 它保留了Disruptor的本质和原理,并利用了很多相同的抽象概念和理论,但不会保持同样的API。 ** 简述: ** 在我的 MacBook Pro (Intel Core i7-4960HQ CPU @ 2.60GHz) 中,我使用了 Go 1.4.2, 此版本使我能在一秒内发送9亿多份邮件(是的,你没有听错), 从一个goroutine到另一个goroutine. 讯息在两台CPU间的传递很简单。 请注意,您的里程可能会有所不同,通过控制CPU并清除其缓存,不同的操作系统可以添加特定的“jitter”到App中。Linux和Windows系统有给定的进程分配给特定的CPU内核它通过将所有的CPU缓存热显著降低“jitter”...阅读全文

go 语言之ReadFromUDP使用

今日阅读GORTP代码的时候,发现其代码中收取UDP网络数据后总是可以认为是一个RTP包,而我一开始认为该代码逻辑存在问题,即如果对方发送的是半个RTP包,那不就存在问题?当经过修改代码验证,当接受数据的缓存缓存小于发送缓存时,ReadFromUDP就会报错。 后来,在网上查询资料得知,UDP的数据在缓存队列中是有边缘保证的,也就是说每一个udp的数据包都是游大小的,每次ReadFromUDP都会取一个完整的udp数据包上来,如果应用程序设置的缓存过小,不够一个udp数据包大小,那么ReadFromUDP就会报错。 以上问题,记录一下,以防下次忘记...阅读全文

博文 2015-12-29 21:00:02 wu2436428

Go基础学习记录之如何在Golang中使用Session

Session背后的基本原则是服务器维护每个客户端的信息,客户端依赖唯一的SessionID来访问此信息。当用户访问Web应用程序时,服务器将根据需要使用以下三个步骤创建新Session: 创建唯一的Session ID 打开数据存储空间:通常我们将Session保存在内存中,但如果系统意外中断,您将丢失所有Session数据。如果Web应用程序处理敏感数据(例如电子商务),这可能是一个非常严重的问题。为了解决此问题,您可以将Session数据保存在数据库或文件系统中。这使得数据持久性更加可靠,并且易于与其他应用程序共享,但需要权衡的是,读取和写入这些Session需要更多的服务器端IO。 将唯一SessionID发送到客户端。 这里的关键步骤是将唯一Session ID发送到客户端。在标准...阅读全文

博文 2018-10-26 22:34:42 DurbanZhang