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

GoLang学习 -- array(数组)和slice(切片)

在使用golang过程当中,经常会用到数组类型。可在查看golang官方文档中发现,在golang语言当中,除了存在数组类型之外,还存在有切片类型。这个切片类型在其他语言都没有出现过,那么这个切片类型到底是一种什么类型呢?切片和数组又有什么区别? 下面就谈谈在golang中数组和切片的故事。 首先我们看一下数组: golang中的数组是一种由固定长度和固定对象类型所组成的数据类型。例如下面: var a [4]int a[0] = 1 i := a[0] // i == 1 a是一个拥有4个int类型元素的数组。当a一旦被声明之后,元素个数就被固定了下来,在a这个变量的生命周期之内,元素个数不会发生变化。而此时a的类型就是[4]int,如果同时存在一个b变量,为[5]int。即便两个变量仅仅...阅读全文

博文 2015-09-26 20:00:48 vikings_1001

Go中运用chan的简单案例

开发环境:windows7 64位、编辑器:sublime text3 简要说明:Go中可以创建有缓冲的chan(比如: c1:=make(chan int,4)就是缓冲区大小为4的chan了 ),也可以创建没有缓冲的chan(比如: c2:=make(chan int)就是没有缓冲的chan)。 代码如下,代码中有注释: package main import ( "fmt" ) func main() { c := make(chan int, 2) //创建带有缓冲的chanel,缓冲大小是2 //这样调用函数,那么f1和f2就是并发执行了 go f1(c) //将参数c传递给f1() go f2(c) //将参数c传递给f2() c1 := <-c c2 := <-c //main函...阅读全文

博文 2015-11-14 09:00:01 汉斯-冯-拉特

Go 系列教程 —— 26. 结构体取代类

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 26 篇。 ## Go 支持面向对象吗? Go 并不是完全面向对象的编程语言。Go 官网的 [FAQ](https://golang.org/doc/faq#Is_Go_an_object-oriented_language) 回答了 Go 是否是面向对象语言,摘录如下。 > 可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提供了一种不同的方法,我们认为它易于使用,也更为普遍。Go 也可以将结构体嵌套使用,这与子类化(Subclassing)类似,但并不完全相同。此外,Go 提供的特性比 C++ 或 Java ...阅读全文

博文 2018-03-20 09:56:47 heyulong

毛剑:Bilibili 的 Go 服务实践(上篇)

前言在微服务流行的当下,bilibili(B站)也在业务快速增长的压力下,对历史系统进行了不断的优化,在所谓“大系统小做”的背后付出了挺多的努力,尤其是 Go 作为开发语言的整体运维的支撑相对比较薄弱,例如开发、部署、测试、集成、监控,调试等。在 GopherChina 2017大会上,B 站技术总监毛剑分享了微服务化道路上踩的“坑”以及最终演进后对整个微服务框架的思考。本次演讲的内容会包含以下几块:1.B站微服务的演进过程;2.高可用;3.中间件;4.持续集成和交付;5.运维体系。作者介绍2015年起,在 bilibili(B站)负责 UGC平台和基础架构,开发了直播弹幕开源推送服务 goim ,B站分布式存储 BFS ,引导开发了B站 cache proxy,bili twemproxy...阅读全文

博文 2017-10-09 05:25:15 毛剑

Go语言实现将[]string转化为[]byte

Go语言实现将[]string转化为[]byte 假设你想实现Go语言的string数组到byte数组的转化。演示函数如下所示: func convertStringsToBytes(){ stringContent := []string{"通知中心","perfect!"} byteContent := "\x00"+ strings.Join(stringContent, "\x02\x00") // x20 = space and x00 = null fmt.Println([]byte(byteContent)) fmt.Println(string([]byte(byteContent))) } 完整代码: package main import ( "fmt" "string...阅读全文

博文 2016-05-22 18:00:00 GreatElite

rabbitmq 客户端golang实战

rabbitmq消息模式 rabbitmq中进行消息控制的组建可以分为以下几部分: exchange:rabbitmq中的路由部件,控制消息的转发路径; queue:rabbitmq的消息队列,可以有多个消费者从队列中读取消息; consumer:消息的消费者; rabbitmq在使用过程中可以单独使用queue进行消息传递(例如celery就可以使用单个queue进行多对多的消息传递),也利用exchange与queue构建多种消息模式,主要包括fanout、direct和topic方式,模式的使用方式在此放一张图,不再此做详细解释。 我在使用的rabbitmq的过程中,主要是进行消息的广播及主题订阅: [producer] -> [exchange] ->fanout-> [queue ...阅读全文

博文 2018-04-26 23:33:05 hiker_urey

golang中container/list包中的坑

golang中list包用法可以参看http://blog.csdn.net/chenbaoke/article/details/42780895 但是list包中大部分对于e *Element进行操作的元素都可能会导致程序崩溃,其根本原因是e是一个Element类型的指针,当然其也可能为nil,但是golang中list包中函数没有对其进行是否为nil的检查,变默认其非nil进行操作,所以这种情况下,便可能出现程序崩溃。 1.举个简单例子,Remove()函数 package main import ( "container/list" "fmt" ) func main() { l := list.New() l.PushBack(1) fmt.Println(l.Front().Val...阅读全文

博文 2015-09-21 15:00:06 chenbaoke

NSQ的重塑之路

在 Gopherchina 2017 中,杭州有赞科技的李文带来了题为《NSQ 重塑之路》的分享,以下是对他演讲内容的整理。今天我会分享有赞 NSQ 重塑的一个过程,主要分为以下几个部分:第一,回顾旧的架构;第二,在使用的过程中遇到的一些问题,以及为什么要做重构;第三,重构具体的细节和架构;第四,测试的整个流程。第五,与其他产品进行对比;第六,有赞的使用场景。Original Architecture Overview首先,什么是 MQ?MQ 大多数在微服务或者一些业务之间的消息投递过程。一般情况下,如果直接调用它的接口会导致两个业务之间有很多耦合,业务之间依赖比较重。所以在微服务改造过程中,MQ 是非常重要的组件。NSQ 是其中主要的一个产品,类似 kafka。我们当时用 NSQ 是为这个...阅读全文

博文 2017-08-23 02:36:41 李文

golang中image/color包的用法

color包是image包对于color重点介绍,实现了基本的颜色库 color中定义了如下几个变量 var ( Black = Gray16{0} White = Gray16{0xffff} Transparent = Alpha16{0} Opaque = Alpha16{0xffff} ) func RGBToYCbCr(r, g, b uint8) (uint8, uint8, uint8) //RGBToYCbCr将RGB的三重色转换为Y'CbCr模型的三重色 func YCbCrToRGB(y, cb, cr uint8) (uint8, uint8, uint8) //YCbCrToRGB将Y'CbCr上的三重色转变成RGB的三重色。 type Alpha //Alpha代表...阅读全文

博文 2015-06-18 17:04:31 chenbaoke

Go--包引用介绍

最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理)。 和其他大多数语言一样,Go也存在包,并使用package关键字定义一个包。首先介绍在程序中如何引入包,引入包有以下几种方式: 1. 最简单的方式引入一个包的方式是直接引入包,例如: import "fmt" import "os" 2. 也可以通过下面的方式将包一块引入,并写在括号内: inport ( "fmt" "os" ) 通过上面的方式,可以引入系统包或第三方的包,下面重点介绍如何引入自定义的包和函数: 一般我们将主程序放在src的mian文件夹下(主程序中包含main函数,并将主程序的包名写为package main),将其他模块放在相应的文件夹下,例如下图所示 主函数在main.go文件中,主函数名也可以为其他...阅读全文

博文 2015-11-02 03:00:01 sunshiming

Go 中 Set 的实现方式

本篇主要讲述如何利用Go语言的语法特性实现Set类型的数据结构。需求对于Set类型的数据结构,其实本质上跟List没什么多大的区别。无非是Set不能含有重复的Item的特性,Set有初始化、Add、Clear、Remove、Contains等操作。接下来看具体的实现方式分析吧。实现仍然按照已有的编程经验来联想如何实现基本Set功能,在Java中很容易知道HashSet的底层实现是HashMap,核心的就是用一个常量来填充Map键值对中的Value选项。除此之外,重点关注Go中Map的数据结构,Key是不允许重复的,如下所示:m := map[string]string{ "1": "one", "2": "two", "1": "one", "3": "three", } fmt.Print...阅读全文

博文 2017-09-27 03:29:22 allenwu.itscoder.com

Golang 中 print 与 fmt.print的区别

结论: print 在golang中 是属于输出到标准错误流中并打印,官方不建议写程序时候用它。可以再debug时候用 image.png fmt.print 在golang中 是属于标准输出流,一般使用它来进行屏幕输出. image.png By the way : fmt.Printf是格式化输出 fmt.Println是输出后换行 fmt.Sprint 是返回一个格式化的字符串 image.png One more word: 上图中所示的第10行输出结果为"宋佳",但打印区却优先显示了第12行的打印结果,我猜想可能是go语言这个内置函数print是用一个协程去跑,所以每次打印出现位置都不一样。但是fmt是一直在main协程里面调用,所以在控制台的输入是固定的.所以把第12行替换成fm...阅读全文

博文 2019-04-15 04:34:39 右哼哼丨左哼哼

Go Web 开发之 Beego 框架初探

又到周末啦。干完活之后,喷了一篇关于学习 Beego 的文章。这应该是 2016 年最后一篇技术文章啦,也是一气呵成,没有什么技术含量。选择 Go 语言断断续续看了 Go 几个星期了,讲真的真是喜欢的不得了。认真学过之后,你会觉得非常的优雅,写东西很舒服。学习 Go 我觉得很有必要的是,Go 中自带的数据结构很少,类似于 List 或者 Tree 之类的,最好尝试一下如何去设计一些常用的数据结构。话说回来,Go 的出身始终是一门后端语言。我非常后悔用 Flask 或者 Django 来作为我的后端入门框架或者选择。封装的太好了,往往对于一个入门新手来说学习不到什么。而 Go 就不一样了,它天生被设计是一门后端语言。也就是说,你将会学习到非常多的后端知识。看看下面这一张图,当时我看着就有一种很...阅读全文

博文 2017-09-27 11:28:25 allenwu.itscoder.com

微服务实践(七):从单体式架构迁移到微服务架构

【编者的话】这是用微服务开发应用系列博客的第七篇也是最后一篇。第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点;接续文章讨论了微服务架构不同方面:使用API网关,进程间通信,服务发现,事件驱动数据管理以及部署微服务。本篇,我们将探讨将应用从单体式架构迁移到微服务架构需要考虑的策略。 @Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自Rancher、携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、腾讯游戏、数人云、点融网、华为、轻元科技、中兴通讯等公司的技术负责人将带来实践经验分享,5月7日之前购票只需438元,欢迎感兴趣的同学抢购。 希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及...阅读全文

博文 2016-05-11 10:46:15 hokingyang

Go的List操作上的一个小“坑”

一直想不清楚一个问题,简单设计的东西到底是“坑多”还是“坑少”呢? 复杂的设计,考虑的太全面,使用起来更麻烦,使用者容易陷入乱,落入自身的陷阱;而简单的设计呢,在许多方面上又顾及不周,如果使用者对其“设计”没仔细研究,或者其实现本身又是一个黑盒子,也容易掉入到设计本身遗留下来的“陷阱”。下面是我刚开始使用Go写代码时碰到的一个小“坑”,这个“坑”的原因我归结为后者。 这个“小坑”来自于go的container/list package的使用上。导致“坑”的代码大概如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package main import ( "container/list"...阅读全文

博文 2014-10-25 17:00:00 kjfcpua

LiteIDE 在 Windows 下为 Go 语言添加智能提示代码补全

本文以 Windows 7 64 位为环境,go1.4.2.windows-amd64 和 liteidex27.2.1.windows-qt5 为例。 成功搭建开发环境后,发现 LiteIDE 没有代码智能提示,这极为不方便啊~ 在 Github nfs/gocode 下载 gocode 源代码,重新编译成 exe 文件,覆盖 LiteIDE 的就行。 1,将下载的 gocode-master 解压,我放在了 C:\ 根目录下。 解压后内容如图 1 所示: 图 1 nfs/gocode 内容 2,在 Windows 命令行运行如下命令: C:\gocode-master>go build gocode.go autocompletecontext.go autocompletefile.g...阅读全文

博文 2015-05-19 03:00:11 liuning8023

Go 字符串编码,Unicode 和UTF-8

1.字符串字符串在Go语言中以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、 float32、foat64等)一样。 字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ASCⅡ码字符 Go语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下所示 转移符 含义 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠 2.字符串实现基于UTF-8编码 go 语言里的字符串的内部实现使用UTF8编码. 通过rune类型,可以方便地对每个UTF-8字符进行访问。 当然,Go语言也支持按传统的ASCII码方式进行逐字符访问。 3.字符 字符串中的每一个元素叫做“字符”,在遍历或者单个获取字...阅读全文

博文 2019-06-01 23:04:38 nicce

开放分布式追踪(OpenTracing)入门与 Jaeger 实现

http://click.aliyun.com/m/1000005975/应用架构开始从单体系统逐步转变为微服务,其中的业务逻辑随之而来就会变成微服务之间的调用与请求。资源角度来看,传统服务器这个物理单位也逐渐淡化,变成了看不见摸不到的虚拟资源模式。从以上两个变化可以看到这种弹性、标准化的架构背后,原先运维与诊断的需求也变得越来越复杂。为了应对这种变化趋势,诞生一系列面向 DevOps 的诊断与分析系统,包括集中式日志系统(Logging),集中式度量系统(Metrics)和分布式追踪系统(Tracing)。Logging,Metrics 和 TracingLogging,Metrics 和 Tracing 有各自专注的部分。Logging - 用于记录离散的事件。例如,应用程序的调试信息或...阅读全文

博文 2018-07-12 15:34:54 rewq123

beego框架——快速开发go应用的http框架

beego是一个快速开发Go应用的http框架,作者是SegmentFault 用户,go 语言方面技术大牛@Asta谢。beego可以用来快速开发API、Web、后端服务等各种应用,是一个RESTFul的框架,主要设计灵感来源于tornado、sinatra、flask这三个框架,但是结合了Go本身的一些特性(interface、struct继承等)而设计的一个框架。 beego的架构 beego的整体设计架构如下所示: beego是基于八大独立的模块之上构建的,是一个高度解耦的框架。当初设计beego的时候就是考虑功能模块化,用户即使不适用beego的http逻辑,也是可以在使用这些独立模块,例如你可以使用cache模块来做你的缓存逻辑,使用日志模块来记录你的操作信息,使用config模...阅读全文

博文 2015-11-10 18:00:01 u011032846

Golang三色标记、混合写屏障GC模式图文全分析

创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次的迭代优化来解决这个问题。 〇、内容提纲 本文将系统的详细介绍Golang中GC的全分析过程,包括垃圾回收的方式递进。内容包括: G0 V1.3之前的标记-清除(mark and sweep)算法 Go...阅读全文

博文 2020-03-16 11:33:05 aceld

十年•杭研技术秀 | “网易云存储服务”从0到1发展之路

欢迎访问网易云社区,了解更多网易技术产品运营经验。2016年对于网易杭州研究院(以下简称“杭研”)而言是重要的 – 成立十周年之际,杭研正式推出了网易云。“十年•杭研技术秀”系列文章,由杭研研发团队倾情奉献,为您展示杭研那些有用、有趣的技术实践经验,涵盖云计算、大前端、信息安全、运维、QA、大数据、人工智能等领域,涉及前沿的分布式、容器、深度学习等技术。正是这些宝贵的实践经验,造就了今天高品质的网易云产品。本文的分享来自网易杭州研究院云计算平台产品部,翔实地描述了网易云存储系统从无到有以及一路披荆斩棘不断完善的历程。 一、从0诞生 2012年云计算在业界已经风起云涌,其为企业带来的价值为世界所认同,按需提供的计算、存储、网络等底层IaaS基础设施,以及丰富的PaaS和SaaS服务,为IT公司...阅读全文

博文 2018-11-23 01:34:43 yijian2595

十年•杭研技术秀 | “网易云存储服务”从0到1发展之路

本文由网易云 发布。网易杭州研究院(以下简称“杭研”) 成立十周年之际,杭研正式推出了网易云。“十年•杭研技术秀”系列文章,由杭研研发团队倾情奉献,为您展示杭研那些有用、有趣的技术实践经验,涵盖云计算、大前端、信息安全、运维、QA、大数据、人工智能等领域,涉及前沿的分布式、容器、深度学习等技术。正是这些宝贵的实践经验,造就了今天高品质的网易云产品。本文的分享来自网易杭州研究院云计算平台产品部,翔实地描述了网易云存储系统从无到有以及一路披荆斩棘不断完善的历程。一、从0诞生2012年云计算在业界已经风起云涌,其为企业带来的价值为世界所认同,按需提供的计算、存储、网络等底层IaaS基础设施,以及丰富的PaaS和SaaS服务,为IT公司产品的开发、运营和快速可持续发展提供了强有力的支撑。云计算犹如肥...阅读全文

博文 2018-07-25 17:35:06 网易云社区

Golang调度器

文: http://morsmachine.dk/go-scheduler 为什么在内核的线程调度器之外Go还需要一个自己的调度器? POSIX线程API是对已有的UNIX进程模型的逻辑扩展,因此线程和进程在很多方面都类似。例如,线程有自己的信号掩码,CPU affinity(进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性),cgroups。但是有很多特性对于Go程序来说都是累赘。 2. 另外一个问题是基于Go语言模型,OS的调度决定并不一定合理。例如,Go的垃圾回收需要内存处于一致性的状态,这需要所有运行的线程都停止。垃圾回收的时间点是不确定的,如果仅由OS来调度,将会由大量的线程停止工作。 单独开发一个Go的调度器能让我们知道什么时候内存处于一致性的状态。也...阅读全文

博文 2017-03-18 02:17:37 imec

Go使用grpc+http打造高性能微服务

大家可以发现,Go越来越流行,其一是目前云计算领域基本是使用Go作为底层开发语言;其二是随着区块链的火爆,引申出了其背后很多开源项目,很多都是使用Go语言进行开发;其三就是在微服务方面,Go也展示很大的优势性。那么微服务是什么,如何将其与Go做一个整合,来提升整体开发生产效率,下面会进行详细讲解。什么是微服务微服务的概念最早由 Martin Fowler 提出,在他的理论当中,微服务是一整套小的服务,其中每一个服务互相之间都是独立的,它们之间通过 lightweight 机制进行交互。图 1图 1 所示是最传统的一个应用软件架构,最顶层是 load balancer ,下面布局很多cuisine,这些cuisine共享一个数据库。图 2图 2 是微服务的架构图,由图中我们可以看出整体架构分布...阅读全文

博文 2017-11-22 09:32:26 astaxie

TIOBE 2 月编程语言排行榜:VB 又有人要了,Go 一直在跌

这个月公布的排行榜中,我们惊奇地发现,VB 上升到了第 12 名的位置,同样取得一定涨幅的还有 Visual Basic.NET。回过头去看看,我们可以看到,1 月 VB 就出现了上涨趋势,没想到这个月还能继续增长。 Visual Basic(简称 VB)是 Microsoft 公司开发的一种通用的基于对象的程序设计语言,作为早期的一种开发语言,开发了很多较为大型的企业级应用程序,但似乎并不受资深程序员的欢迎。其最后的发布时间是 2015 年,最近也没在发布新版本。 上周,微软的 Mads Torgersen 还宣布他们将停止与 C# 和 Visual Basic 的共同进化策略。 这意味着如果与新的 C# 特性相比,Visual Basic 将会落后。 所以,VB 的这种涨势能保持多久,还...阅读全文

博文 2019-02-19 11:35:12 IT爱好者都

Go 在百万亿级搜索引擎中的应用

Poseidon 系统是由 360 开源的日志搜索平台,目前已经用到了生产环节中,可以在数百万亿条、数百 PB 大小的日志数据中快速分析和检索特定字符串。因为 Golang 得天独厚的支持并发编程,Poseidon 的核心搜索引擎、发报器、查询代理是用 Golang 开发的,在核心引擎查询、多天查询、多天数据异步下载中大量使用了 goroutine+channel 。大家上午好,我是郭军,很高兴今天在这里和大家交流。我今天演讲题目,Golang 在百万亿搜索引擎中的应用。Poseidon在希腊意思是海神,在这里是海量数据集的主宰者。之前我的工作一直面向海量用户,去年年中我接触大数据以及海量数据这样的场景,在今天的演讲中,主要会涉及以下几方面内容:设计目标 Go 应用场景与遭遇的挑战 怎样应对...阅读全文

博文 2017-09-13 14:32:59 郭军

go总结

1.数组和切片 如果一个切片是使用一个数组进行初始化的,改变切片或者在切片后增加内容都会导致原数组的变化 这里,其实可以把切片理解为对数组的引用,所以切片元素的增删改,必然会影响数组 http://blog.csdn.net/marcky/article/details/7307985 2.struct 数据可以有匿名数据,这个功能类似于继承,匿名数据不需要变量,直接写类型即可 函数在struct外定义,若修改struct内数据,可以使用指针形式,如果不需要,声明一个即可 http://blog.csdn.net/chuangrain/article/details/9335041 3.make 和new都在堆中分配内存,但是他们却有很大不同 1.new(T)新建了T类型的item,将内存清...阅读全文

博文 2014-10-04 19:26:00 luan_tianjiao

阿里云基于 Go 的微服务架构分享

作者介绍花名聪心,阿里云技术专家,主要负责阿里云OpenAPI,Services architectre 技术服务的实现。云产品前端架构众所周知,阿里是以 Java 开发为主,最近引用 GO 在微服务架构上面进行开发,本次分享也是围绕这个主题进行叙述。图 1图 1 所示,是我们最早期的前端微服务架构图,当时不存在API网关服务、天象全链路监控以及外部服务这几个模块,并且蓝色这部分也并没有被应用起来。因此进行了一场微服务重构过程,产生了最新的前端微服务架构图(图 2)。图 2图 2 是目前的前端微服务架构,其中,OpenAPI是前端入口;API网关目前被商业化,由它来调度内部的dubbo服务;其次是最为重要的中间件,由其支撑注册中心、控制台、阿里云日志服务、消息队列服务以及内部的天象全链路监控...阅读全文

博文 2017-10-16 03:25:24 聪心

搭载在webstorm上的go语言开发插件安装

1. 2.搜索框内搜索go,单击“Browse repositories... ”没有匹配结果(因本人已安装好插件,所以go已经显示在上面了) 3.单击"Manage repositories...",在弹出的对话框里单击“+”(对话框内原本是空的),添加如图所示网址,即https://plugins.jetbrains.com/plugins/alpha/5047,单击“OK”。 4.此时搜索列表里就有go选项了,单击右侧的"Install plugin"按钮,即可安装,安装完成后重启webstorm。 5.再重启webstorm后,打开settings下的"Languages&Frameworks",若出现如图所示Go列表,即为安装成功...阅读全文

博文 2016-02-23 03:00:01 luoyishamai

Ubuntu下安装配置Go环境

一、安装 sudo apt-get install golang 二、创建工作空间 在/home目录下, 建立一个名为gopath(名字任意)的目录,在该目录中建立三个子目录(名字必须为src、pkg和bin)。创建目录过程如下图所示: image.png src -- 里面每一个子目录,就是一个包。包内是Go的源码文件 pkg -- 编译后生成的,包的目标文件 bin -- 生成的可执行文件。 三、配置环境变量 1,打开配置文件 运行以下命令: $ gedit ~/.bashrc 2,添加命令 在文件尾部添加以下命令: export GOPATH=/home/gopath 3,命令生效 运行以下命令 $ source ~/.bashrc 四、测试环境 运行以下命令 $ go version...阅读全文

博文 2018-07-14 13:34:44 朱建涛

基于Go语言构建的万亿级流量大数据平台架构

党合萱 硕士毕业于西安电子科技大学,曾就职于阿里云存储部门,主要从事存储服务相关功能的设计与开发工作。于2016年加入七牛云,主要负责流式计算与离线计算服务pipeline的架构和开发工作。目前pipeline承载公司每天超过千亿、超过百TB的数据处理。 今天的分享主要围绕七牛在最近一年时间里面开发的大数据平台进行展开,目前我们的平台已经承载了公司核心业务的运营;关于我们的产品,主要会从一个场景展开进行介绍,当中包含了我们在设计过程中遇到的挑战以及解决方案。也欢迎大家基于这些问题和我们展开交流与讨论。 场景.产品 对于运维人员来说,在进行每日常规的线上运维时,日志当中的一天内访问量的波动、线上错误分布、其他业务指标这些数据对于运维人员来说并非是一个透明的过程,那么如何将这些东西做到可视化,或...阅读全文

博文 2017-09-21 09:35:12 NewTech观察圈

golang基础 -- 引用外部函数

如下所示,main.go文件中函数如果要调用与main.go同级目录下的func文件夹中func1.go中的Test()函数的具体实现方法。test |--func |--func1.go |--func2.go |--main.go在main.go文件中需要写入的是package main import( "test/func" ) func main(){ func.Test() } 其中需要注意的是: 1、test项目要在golang的$GOPATH路径下。 例如$GOPATH=/home/data而test文件路径是/homg/data/src/test那么main.go中import引用的路径就是"test/func"。如果文件路径是/home/data/src/XXX/test那...阅读全文

博文 2017-04-28 12:30:34 TonnyAlmend

Golang 格式化json忽略指定的字段

如下的结构体,格式化为json时我想忽略DataSource字段 type RealTimeData struct { Code string `json:"code"` Time time.Time `json:"time"` OpenPrice float32 `json:"openPrice"` PrevClosePrice float32 `json:"prevClosePrice"` LastPrice float32 `json:"lastPrice"` HighPrice float32 `json:"highPrice"` LowPrice float32 `json:"lowPrice"` MarketValue float32 `json:"marketValue"` P...阅读全文

博文 2019-08-10 23:32:56 鹅鹅鹅_

GoWeb开发_Iris框架讲解(一)

Golang介绍Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。谷歌资深软件工程师罗布·派克(Rob Pike)表示,“Go让我体验到了从未有过的开发效率。”派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,“使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。”Golang语言的一些的功能:具有现代的程序语言特色,如垃圾回收,帮助程序设计师处理琐碎和重要的内存管理等问题。Go的速度也非常快,几乎和C或C++程序一样快,且能够快速制作程序。该软件是专为构建服务器软...阅读全文

博文 2019-03-27 19:34:49 qfzhangxu

golang逐行处理文件

golang 提供了package bufio。bufio.NewReader()创建一个默认大小的readbuf,当然,也可以bufio.NewReaderSize。 func NewReader(rd io.Reader) *Reader NewReader returns a new Reader whose buffer has the default size(4096). func NewReaderSize(rd io.Reader, size int) *Reader NewReaderSize returns a new Reader whose buffer has at least the specified size. If the argument io.Reade...阅读全文

博文 2015-08-25 22:00:01 冷絮

解剖Go语言map底层实现

``map``是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢? # ``map``的整体结构图 Golang中``map``的底层实现是一个散列表,因此实现``map``的过程实际上就是实现散表的过程。在这个散列表中,主要出现的结构体有两个,一个叫``hmap``(``a header for a go map``),一个叫``bucket``。这两种结构的样子分别如下所示: hmap: ![hmap.png](https://static.studygolang.com/180826/09d0c94fc2946bba795ecc2ae0c97ac2.png) 图中有很多字段,但是便于理解``map``的架构,你只需要关心的只有一个,就是标红的字段:bucke...阅读全文

博文 2018-09-01 02:46:44 RyuGou

大型分布式网站架构实战项目分析

一、分布式系统是什么?1、定义distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages(分布式系统是指位于网络计算机的组件仅通过传递消息来通信和协调其行为的系统。)所以,从这可以总结出这几个重点:1、组件是分布在网络计算机上2、组件之间仅仅通过消息传递来通信并且协调工作2、特性2.1、副本(Replica)是分布式系统最常见的概念之一,指分布式系统对数据和服务提供的一种冗余方式。在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理。1)数...阅读全文

博文 2018-04-28 11:54:24 掘金

Docker和Go的安装和使用

感觉现在的Docker就像2013年的Spark一样,势不可挡,因此很有必要对Docker进行深度学习。我们使用的操作系统为CentOS Linux release 7.2.1511 (Core)(64位)。主要介绍Docker的安装和使用,Go的安装和使用。 一. Docker的安装和使用 1. Docker的安装 yum -y install docker 说明:Docker软件包已经包括在默认的CentOS-Extras软件源里。 2. 启动Docker服务 systemctl start docker.service systemctl enable docker.service 说明:并且将Docker设置为开机启动。3. 下载官方的CentOS镜像到本地 docker pull ...阅读全文

博文 2016-01-02 03:00:00 shengshengwang

Go语言的构建方法总结

趁着近期要换工作的空闲时间,看了一下Go语言,与C++相比,Go语言的确在不少地方轻便了不少,例如:增加了内置的字符串类型、多个返回值、支持协程、简单的构建方法等等。使得在生产效率方面有了不少的提高。今天这里对Go语言的构建方法做个简单的总结。 在C/C++的工程中,极少使用单个命令来编译代码,一般是通过一些工具来进行自动化的编译,刚开始的时候手动写makefile,再后来是繁复的Autotools,之后又出现了CMake,按照时间的推移,所需我们做的工作越来越少,例如在Autotools我们大致需要如下工作: autoscan扫描工作目录,之后手动修改生成的configure.ac。 使用aclocal命令,通过configure.ac来生成aclocal.m4。 使用autoconf命令...阅读全文

博文 2015-03-21 03:00:01 yetuweiba

使用Golang实现的快速排序

一、舞动的快速排序 在实现排序算法前,先让我们来欣赏一段关于快速排序的视频,本段视频展示了快速排序的原理,如果没有看懂,请看完本文后再回头来看一下,应该就明白了吧。 O(∩_∩)O~ 二、快速排序实现 2.1 快速排序基础版 通过下面一组数据,将最左边的数设定为轴,并记录其值为 s。 (注意:*表示要交换的数,[]表示轴) [41] 24 76* 11 45 64 21 69 19 36* [41] 24 36 11 45* 64 21 69 19* 76 [41] 24 36 11 19 64* 21* 69 45 76 [41] 24 36 11 19 21 64 69 45 76 21 24 36 11 19 [41] 64 69 45 76 回圈处理: 令索引 i 从数列左方往右方找...阅读全文

博文 2014-10-09 16:00:06 u012797015

大佬带玩-一个旧手机的威力

这里的手机指安卓机。 大家都知道安卓机用的是Linux内核,所以理论上Linux可做的事情,手机都能做,下面列举一些有意思的事情。 必备技能: 会Linux。 安装Linux发行版 其实这个比较简单,只需装一个App, 但是有些技巧可以讲讲。 所需材料 安卓手机 必须 拥有公网IP的机器 非必须 无限流量卡 非必须 root权限 必须 Root root手机根据手机信号的不同,会有不同的办法,所以这里就不细讲,请自行百度,或google. 安装linux deploy 通过某个应用市场下载并安装 在线安装 在线安装是比较扯淡的,因为在国内实在是比较慢的,原因你懂的。 离线安装 通过以下地址可下载自己所需的镜像 http://sourceforge.net/projects/linuxonan...阅读全文

博文 2018-10-27 19:34:40 还未如愿见着不朽365

Gopher面试中的Coding

从四月份下半月开始,陆陆续续面试了几家公司,都是golang的岗位。每一次面试,侧重点都会有不同,有的会直接给过来一道试题, 然后边解题,边讲述自己的思路,然后面试官根据你的思路和你交流沟通;有的呢,让讲述自己最近做过的项目,遇到的难点, 自己怎么解决的问题思路,而无独有偶的呢,这样的面试中,都要需要展示编码能力。这篇文章就把自己最近面试中遇到的每一个编程问题, 分三步阐述出来:问题描述,解题思路,实际编程。 交替打印数字和字母 问题描述 使用两个 goroutine 交替打印序列,一个 goroutinue 打印数字, 另外一个goroutine打印字母, 最终效果如下 12AB34CD56EF78GH910IJ 。 解题思路 问题很简单,使用 channel 来控制打印的进度。使用两个 ...阅读全文

博文 2017-08-27 16:05:00 brantou

golang 如何解析url中的多个参数

以下面的url为例,这个例子实际上是《go语言圣经》中7.7章节http.handler的一个例子。我们需要更新袜子socks的价钱为16,鞋子shoes的价格为100。我们把它们写到同一个url中。对于这种一个url有多个参数的情况该如何处理呢? http://localhost:8000/update?item=socks&price=16&item=shoes&price=100 使用如下的代码来查看请求参数。req.URL.Query()的返回值是Values类型,这个类型实际上是type Values map[string][]string,因此我们可以遍历这个map。 func (db database) update(w http.ResponseWriter, req *ht...阅读全文

博文 2020-04-21 17:36:02 yufeifly

gohost -- go 开发的命令行hosts配置管理工具

前几天在微博上看到有人推荐了lazygit这个工具,让人眼前一亮,什么时候命令行也可以这么抢到了,????,调研了下,发现它使用了gocui,使用它可以做出来很多很炫的命令行工具。 现有的hosts工具里面也有switchosts!,但我是用的时候发现他还是有bug,也只能用在界面化平台。想了下,准备着手搞一个命令行的hsots配置工具,这个类库完全可以满足。 界面设计 在界面设计上,还是做个copycat,抄袭switchosts!的,分两栏,左侧是hosts分组,右边儿是当前聚焦hosts分组内容,控制开关放在左侧,如下所示。左侧开关控制每个组的开启关闭与否,系统当前的hosts是左侧所有打开hosts的集合。 *------*-------------------* |×name1|#...阅读全文

博文 2018-08-24 09:34:56 天生的黑

DockOne微信分享(七十六):容器化ICT融合初体验

【编者的话】本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的“微服务”管理架构,能够有效支撑应用快速上线和自动扩缩容,最大化IT基础设施资源利用率并降低总体拥有成本(TCO)。未来的网络正在向IT化、云化方向发展,容器与微服务技术,完美契合“网络即服务”、网络切片等发展理念,将有助于实现更加灵活、智能、高效和开放的5G新型网络。 2015年,NFV和容器无疑都是最热门的技术,被很多业内人士认为是未来的发展趋势;2016年,当NFV遇上容器,会碰撞出什么新的火花?当容器化的CT/IT业务在同一平台内融合部署,又会产生怎样新的体验?下面和大家分享一下,从2015年到2016年,我们做的容器化CT-IT融合方面的工作。I...阅读全文

博文 2017-06-25 16:25:12 yezi

ElasticSearch入门

1 使用Docker安装 docker 安装说明,查看 docker run -d -p 9200:9200 elasticsearch 2 查看ElasticSearch是否运行 方式一:查看正在运行的进程 docker ps 如下图所示: 方式二:浏览器访问localhost:9200,出现如下图所示: 3 开始使用 先了解请求格式 localhost:9200/index/type/id index: 相当于数据库名 type: 相当于表名 id: 唯一ID 以下操作使用的是Postman工具,用来进行对数据库的请求操作,下载地址 以下请求方式遵循RESTfule风格 get: 查询 post/put: 创建修改数据,post可以省略id delete: 删除 1) 存储数据 2) i...阅读全文

博文 2018-10-29 15:35:13 aside section ._1OhGeD

GO函数的使用

熟悉Go函数的语法结构 因为GO没有类的概念,所以使用结构体来模拟。代码中的函数分别计算两个整数的平方根和取数值的绝对值。 package main import ( "fmt" "math" ) type MyFloat float64 type Vertex struct { X, Y float64 } //Vertex指针对应的Abs方法 func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } //MyFloat结构体对应的Abs方法 func (f MyFloat) Abs() float64 { if f < 0 { return float64(-f) } return float64(f) ...阅读全文

博文 2016-04-17 00:00:01 genispan

beego.InsertFilter过滤器

beego.InsertFilter过滤器是为某些router提供过滤功能,可以设置在某个路由访问时进行额外的操作。通过参数设置可以设置过滤器执行的时刻。 如下所示beego.InsertFilter有一下几个参数: InsertFilter(pattern string, pos int, filter FilterFunc, params …bool) pattern:路由规则,过滤器作用的路由 pos : 过滤器执行的时刻,有以下5种 beego.BeforeStatic beego.BeforeRouter 访问路由之前 beego.BeforeExec 访问路由之后执行controller之前 beego.AfterExec 执行controller之后调用 beego.Finis...阅读全文

博文 2018-09-11 10:13:11 JimPang

蚂蚁金服开源 MOSN 核心概念解析

前言 MOSN 是一款使用 Go 语言开发的 Service Mesh 数据平面代理,2018 年 7 月由蚂蚁金服开源,开源地址 https://github.com/sofastack/sofa-mosn,MOSN 旨在为服务提供分布式、模块化、可观察和智能化的代理能力。MOSN 是 Modular Observable Smart Network 的简称。MOSN 可以与任何支持 xDS API 的 Service Mesh 集成,亦可以作为独立的四、七层负载均衡使用。未来 MOSN 将支持更多云原生场景,并支持 Nginx 的核心转发功能。 本文根据蚂蚁金服烈元 2019 年 11 月 30 日在 Gopher China Meetup 北京站上的分享整理而成,查看分享回顾,同时本文...阅读全文

博文 2019-12-12 17:32:47 ServiceMesher

drools -Rete算法

Rete算法是Charles Forgy在1979年的论文中首次提出的,针对基于规则知识表现的模式匹配算法。目前来说,大部分规则引擎还是基于rete算法作为核心,但都有所改进,比如drool,jess等等,下面介绍rete算法的概念 1.rete 算法 Rete算法是一种高效的模式匹配算法用来实现产生式规则系统 (空间换时间,用内存换取匹配速度) 它是高效的算法,它通过缓存避免了相同条件多次评估的情况,但是带来了大量的内存使用 Rete 在拉丁语中是 ”net” ,有网络的意思;Rete算法通过规则条件生成了一个网络,每个规则条件是网络中的一个节点 rete可以被分为两部分:规则编译和运行时执行。规则编译是指根据规则集生成推理网络的过程,运行时执行指将数据送入推理网络进行筛选的过程。 2.规...阅读全文

博文 2017-11-29 01:45:52 u012373815