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

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

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

毛剑: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--包引用介绍

最近在学习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

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

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

Go Web 开发之 Beego 框架初探

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

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

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

NSQ的重塑之路

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

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

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

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中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 中 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

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

搭载在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

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

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

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

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

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逐行处理文件

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 的微服务架构分享

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

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

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 朱建涛

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

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语言构建的万亿级流量大数据平台架构

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

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

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

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

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

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

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

使用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

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

Gopher面试中的Coding

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

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

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

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

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

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

一、分布式系统是什么?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 掘金

开放分布式追踪(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

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

IntelliJ IDEA 14安装Golang插件go-lang-idea-plugin

1,下载IntelliJ IDEA旗舰版,我用的是14.1.3版本: http://www.jetbrains.com/idea/download/ 2. 下载golang官方SDK和go-lang-idea-plugin插件源码 http://golang.org/dl/ (要翻==墙) https://github.com/go-lang-plugin-org/go-lang-idea-plugin 3,将下载的go-lang-idea-plugin压缩包解压,IDEA点击File -> open 打开该工程。打开后有很多编译错误,先不管,接下来一步一步配置。 4,点击File -> Project Structure 打开项目结构配置窗口。 如图所示,添加JDK和IntelliJ Pl...阅读全文

博文 2015-08-17 22:00:01 Cbping

Mac下进行golang的交叉编译

由于golang的出身,对于linux的支持是最好的,相应来说,Mac的支持也很不错,对windows的支持是最差的。 进行交叉编译最好是从源码开始编译,而且在交叉编译中是不支持cgo的,这点请注意。 1. 获得golang的源码 这个当然是从官方网站下载了,只是golang是google推出的语言,所以需要翻个墙。我下载了1.4.2的golang的tar包,然后解压。虽说只需配置正确,可以放到任意位置,但还是推荐放到/usr/local目录下。请注意,这个时候还没有编译工具,不仅交叉编译不行,本地编译都是不行的。 设置GOROOT环境变量,PATH里面增加路径 2. 编译本机的工具链 cd $GOROOT\src ./make/bash 编译之后就能看到/usr/local/go目录下多了...阅读全文

博文 2015-11-11 13:00:01 sakulafly

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

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

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 右哼哼丨左哼哼

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

Golang实现的红黑树

红黑树是一种基于二叉查找树的数据结构,它具有如下性质: (1) 二叉查找树的性质它都有 (2) 每个节点都有一个颜色属性,每个节点或是红的或是黑的 (3) 根节点必须是黑的 (4) 每个叶子节点(nil节点)为黑 (5) 如果一个节点为红的,那么它的两个孩子都是黑的 (6) 每个节点到它子孙叶子节点的路径上的黑色节点个数是相同的 相比二叉查找树,红黑树在添加或删除元素的同时还需要调整树的深度,所以需要用到对树结构的一些旋转操作,下面的实例代码给的非常详尽了,可以看看LeftRotate()和RightRotate()函数式如何实现旋转的。如果有人发现了BUG请在留言中发表~ 这个代码是在之前的"Golang以OO的方式实现二叉查找树"里的代码加工实现的,因为本人技术不到位。。。出了好几次BU...阅读全文

博文 2015-06-17 20:03:52 u011774512

golang gc机制学习

以下针对go1.5 gc方法 参考官方文章:https://blog.golang.org/go15gc,go的gc看起来类似于宽度优先搜索算法。 1. 将heap看作是一个图,其内部存储的变量之间有指针相互联系。所有变量最初都被着色为白色 2. 遍历heap,选择root节点,将它们标记为灰色 3. 针对上面选择的每一个root节点,首先将其颜色变为黑色,然后迭代的去访问他的孩子节点(即其所代表的变量内部的指针成员所指向的其他节点) 4. 针对每个孩子节点,返回第2步进行相同的处理 最后,所有能够被访问到的节点颜色都被标记为黑色,无法访问到的节点则依然是白色,这些白色节点就是孤立节点,它们的内存会被回收。 整个过程图1所示。 GC控制 Go语言提供了一个变量GOGC,用来对gc进行控制。该...阅读全文

博文 2016-04-29 11:00:02 sivolin

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 鹅鹅鹅_

go array和slice区别

来源: http://www.2cto.com/kf/201401/274536.html 老虞http://www.cnblogs.com/howDo/ 一 数组简介 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的参数传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。 注意:和C中的数组相比,又是有一些不同的 1. Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份 2. 如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。这个和C...阅读全文

博文 2014-10-08 11:00:11 lmxmimihuhu

MongoDB基本管理命令

MongoDB命令帮助系统 在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控。看一下MongoDB的命令帮助系统: root@dev2:~# mongo MongoDB shell version: 1.8.3 connecting to: test > help db.help() help on db methods db.mycoll.help() help on collection methods rs.help() help on replica set methods help connect connecting to a db help help admin administrative help hel...阅读全文

博文 2015-02-15 08:00:01 Linux_He

rete算法学习

在上篇博客中,介绍了策略型业务逻辑处理中几种选择,其中有一种选择就是利用规则引擎来进行逻辑处理。其实藏在规则引擎的底层中还是有很多算法的,其中有一种算法是rete算法,最近正好也关注算法,就简单的学习了一下,因为对这个算法理解的非常清楚,所以如果有有对这个算法熟悉的朋友,可以给予指正。 RETE算法是一个用于产生式系统的高效模式匹配算法。在一个产生式系统中,被处理的数据叫做working memory,用于判定的规则分为两个部分LHS(left-hand-side)和RHS(right hand side),分别表示前提和结论。主要流程可以分为以下步骤:Match:找出符合LHS部分的working memory集合Confilict resolution:选出一个条件被满足的规则Act:执...阅读全文

博文 2017-11-29 01:46:20 lfsf802

解剖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