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

基于 Graphviz 的可视化数据结构工具memviz

memviz 是一个基于 Graphviz 的可视化数据结构工具。 如下图所示,你更喜欢哪种调试数据结构的方式? ![image](https://static.oschina.net/uploads/space/2018/0128/195104_ghWN_2720166.png) memviz 需要一个指向任意数据结构的指针,然后生成一个易于理解的图片。 只需传递如下的数据结构:`memviz.Map(out, &data)`,然后将输出结果到 graphviz...阅读全文

go反射之后接口断言问题

这个问题困扰了我一晚上,但是最终还是被我试出来了。 问题场景: 1.我通过反射获取一个指针的value v := reflect.ValueOf(ptr).Elem() 这个指针指向了一个结构体,因为是指针所有我用了Elem()函数获取了指向的值。 2.因为ptr指针指向的结构体实现了一个接口,所以我用接口断言方法来调用接口的函数。 if _,ok := v.Interface().(XXX);ok{ ... } XXX是我实现的接口,看起来一切都没问题,但是问题来了。 //我用一个接口接收ptr的值 var i interface{} i = ptr if _,ok := i.(XXX);ok{ //ok为true ... } 如上所示,我用反射之前,接口断言没问题。但是v.Interfa...阅读全文

博文 2016-10-11 03:01:26 i冬瓜

Go语言基础

1、变量声明 Go语言的变量声明方式与C和C++语言有明显的不同。Go语言引入了关键字var,并且Go语言把变量类型放在变量名之后;实例如下: 1)、声明一个变量 //定义一个类型为"int"的变量 var vName int //定义一个类型为"string"的变量 var vName2 string //定义一个类型为"int",且大小为10的数组变量 var vName3 [10]int //定义一个类型为"int"的数组切片 var vName4 []int //定义一个结构体变量 var vName5 struct{ vn int } //定义一个类型为"int"的指针变量 var vName6 *int //定义一个数据字典,key类型为"string",value类型为"int...阅读全文

博文 2016-02-18 16:00:01 dgh_84

小窥Go ast库及初步使用

小窥Go ast库及初步使用 2016-07-09 本文需要你有写Golang代码经验,阅读大概需要20分钟。 最近一直在研究Go的依赖注入(dependency injection),方便日后写比较容易测试的代码(以便偷懒)。目前学到ast解析代码,现拿出来跟大家分享一下:) Tokenizer 和 Lexical anaylizer 如果你知道tokenizer和lexical anaylizer是什么的话,请跳到下一章,不熟的话请看下面这个最简单的go代码 package main func main() { println("Hello, World!") } 这段go代码做了什么?很简单吧,package是main,定义了个main函数,main函数里调用了println函数,参数...阅读全文

博文 2017-02-11 16:35:50 蒙卓

go实现LRU cache

1. LRU简介 1.1 概述 缓存资源通常比较昂贵,通常数据量较大时,会竟可能从较少的缓存满足尽可能多访问,这里有一种假设,通常最近被访问的数据,那么它就有可能会被后续继续访问,基于这种假设,将所有的数据按访问时间进行排序,并按驱逐出旧数据,那么存在缓存的数据就为热点数据,这样既节省了内存资源,又极大的满足了访问.LRU(Least recently used)算法就是基于这种假设的一直缓存置换算法. 1.2 算法流程 假设缓存大小为4,而写入顺序为A B C D E D F.访问顺序分为写入以及读取两种操作,写入需要更新访问时间,并且当数据到达最大缓存时需要逐出数据,而读取只会更新访问时间,写入置换算法流程如上图所示. 当未到达缓存大小时,所有数据按写入存储,并记录写入次序.写入E时缓存...阅读全文

博文 2018-04-19 15:34:52 沐风

Go 语言基础之变量

这小节我们将要介绍如何定义变量、常量、Go内置类型以及Go程序设计中的一些技巧。 定义变量 Go语言里面定义变量有多种方式。 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: //定义一个名称为“variableName”,类型为"type"的变量 var variableName type 定义多个变量 //定义三个类型都是“type”的变量 var vname1, vname2, vname3 type 定义变量并初始化值 //初始化“variableName”的变量为“value”值,类型是“type” var variableName type = value 同时初始化多个变量 /* 定义三个类型都是"type"的变量,并且分别初始化为相应...阅读全文

博文 2016-09-11 14:00:00 chenxun2009

Go之Json的struct tag

自“灰子学技术”公众号原文链接:https://mp.weixin.qq.com/s/W6yL8aqXvmU7Vyd0riWIJw最近使用go的json包的时候,有一个struct tag标识,关于它的使用规则如下所示:1.这个标识在json调用marshal做序列化操作的时候,会把key值解析为struct tag定义的值。2.如果没有这个标识,在Key值是大写的时候,会将这个值的名字解析为序列化之后的Key值。如果是小写就会忽略,这个是因为Go规定首字母是大写字母是公有,小写字母是私有导致的。问题:一旦我们需要json序列化之后的结果中的Key值名称,希望是小写字母的时候,我们该怎么办?答案就是用struct tag,因为它可以讲大写字母重名命成小写字母。例子:​备注:小写字母 Mars...阅读全文

Go 语言内存管理(四):垃圾回收

介绍 编写 Go 代码不需要像写 C/C++ 那样手动的 malloc和 free内存,因为 malloc 操作由 Go 编译器的逃逸分析机制帮我们加上了,而 free 动作则是有 GC 机制来完成。 虽说 GC 是一个很好的特性,大大降低了编程门槛,但这是以损耗性能为代价的。Go 的 GC 机制是不断进化提升的,到现在也没有停止。其进化过程中主要有一下几个重要的里程碑: 1.1 版本: 标记+清除方式,整个过程需要 STW(stop the world,挂起所有用户 goroutine) 1.3 版本: 标记过程 STW,清除过程并行 1.5 版本: 标记过程使用三色标记法 1.8 版本: Hibrid Write Barrier 未来: 类似 JVM 的分代机制? 下面详细介绍下这整个演...阅读全文

博文 2019-05-02 19:34:37 达菲格

golang kafka小试消息队列

Kafka 安装配置、更多资料请参考其官网。 启动 kafka server 在这之前需要启动 zookeeper 做服务治理(单机)。 $ bin/zkServer.sh status conf/zoo_sample.cfg 如提示权限限制加上 sudo 。 启动 kafka server $ bin/kafka-server-start.sh config/server.properties 启动消息队列(本部分仅为测试 server) 新建 Topic $ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test $ bin/kaf...阅读全文

博文 2018-06-23 21:34:47 EthanJay

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

用队列求解迷宫最短路径及其应用(围住神经猫)

问题 给定一个M×N的迷宫图,求一条从指定入口到出口的最短路径.假设迷宫图如图所示(M=8, N=8) 对于图中的每个方块,空白表示通道,阴影表示墙。所求路径必须是简单路径,即在求得路径上不能重复出现同一通道块。为了算法方便,在迷宫外围加了一道围墙。对应迷宫数组为: var gameMap = [M + 2][N + 2]int{ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 1, 0, 0, 0...阅读全文

博文 2017-07-29 17:05:06 火蜥蜴

(一)golang工作区

环境变量介绍 GOROOT:Golang的安装路径。 GOPATH:可以理解为工作目录或者工作区,也是平时接触最多的一个变量。它可以是一个目录,可以是多个目录路径,每个目录代表一个工作区。这些目录用于放置Go语言的源码文件(src),以及安装(命令go install)后的归档文件(pkg目录)和可执行文件(bin目录)。 GOBIN:GOROOT目录下的可执行文件放置目录,一般指bin。 理解构建和安装Go的过程 go build命令 go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。go build 还有一些附加参数,可以显示更多的编译信息和更多的操作,详见下表所示。 go build编译时的附加参数 -v 编译时显示包名 -...阅读全文

博文 2018-11-10 21:34:38 杰克曼

golang注记

map不是线程安全的,对其进行并发访问时需要加锁。 struct的匿名成员所有成员变量和函数都被外围struct获得,如下代码所示,C获得了Mutex和D的成员: type C struct { sync.Mutex m int D } type D struct { tt int } func main() { counter := C{m: 5} counter.D.tt = 5 //C可以直接通过D来对其成员进行访问 fmt.Println(counter.tt) //C获得了D的tt变量 } 目前go的编译器主要有gccgo和gc。gccgo以gcc作为编译器后端,因而支持大多数gcc支持的系统架构,而gc则目前只支持x86和ARM。 $(function () { $('pre.p...阅读全文

博文 2016-04-29 05:00:01 sivolin

Casbin 实现访问控制

简介 Casbin可以做到: 支持自定义请求的格式,默认的请求格式为{subject, object, action}。 具有访问控制模型model和策略policy两个核心概念。 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。 支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源。 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo* Casbin不能做到: 身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。 管理用户列表...阅读全文

博文 2019-12-21 14:32:41 雨澍生

第三课:递归的三个例子

概述 前文中讲解了递归的运行机制,并讲解了简单的递归情况。从程序设计的角度来将,递归其实是现代程序设计不可或缺的一种方法,对于很多问题,用递归可能是一种较为合适的解决方法。但是如何设计递归需要设计或者求解出递推公式,才能转换为递归,其中的重点是设计递推公式。本文如下部分讲解三个例子,一个是人人皆知的汉诺塔,一个是求排列,一个是求整数划分,重点讲解如何设计递归公式。更详细的代码请见我的github 例1:汉诺塔 汉诺塔是学程序设计的童鞋必备的一环,其约束为:始终保持小圆盘不能在大圆盘之上,从一根柱子一到另一根柱子,中间可以借助一根柱子,示意图如图1所示: 图1:汉诺塔示意图,摘自维基百科 直觉上这应该是一个递归问题,但是如何设计递推公式是很多童鞋觉得比较头疼的问题。设计递推公式的本质就是形式化...阅读全文

博文 2017-03-05 11:28:37 CodingTech

Implement Domain Object in Golang

序言 笔者在《软件设计的演变过程》一文中,将通信系统软件的DDD分层模型最终演进为五层模型,即调度层(Schedule)、事务层(Transaction DSL)、环境层(Context)、领域层(Domain)和基础设施层(Infrastructure),我们简单回顾一下: ddd-layer-with-dci-dsl.png 调度层:维护UE的状态模型,只包括业务的本质状态,将接收到的消息派发给事务层。 事务层:对应一个业务流程,比如UE Attach,将各个同步消息或异步消息的处理组合成一个事务,当事务失败时,进行回滚。当事务层收到调度层的消息后,委托环境层的Action进行处理。 环境层:以Action为单位,处理一条同步消息或异步消息,将Domain层的领域对象cast成合适的ro...阅读全文

博文 2017-05-02 12:09:13 _张晓龙_

Go文件操作

读取文件中的内容 假设你想获取文件中感兴趣的内容,但是,你不希望获取所有内容。假设文件的内容如下所示: 1. 网页视觉设计理论之少些质感,多些版式. http://www.ynetx.com/theory/560-1.html 2. 设计理论: http://www.ynetx.com/design/theory/ 3.Google的新设计理念Material Design http://www.infoq.com/cn/news/2014/07/google-material-design-android/ 你只想获取http开头的行内容。实现代码如下: line, err := reader.ReadString('\n') // skip all line starting witho...阅读全文

博文 2016-08-04 20:00:05 abcijkxyz

大数据架构师:日访问百亿级

日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台为例,双 11 大促活动期间,它们可能每小时的日志数量达到百亿规模,海量的日志数据暴增,随之给技术团队带来严峻的挑战。本文将从海量日志系统在优化、部署、监控方向如何更适应业务的需求入手,重点从多种日志系统的架构设计对比;后续调优过程:横向扩展与纵向扩展,分集群,数据分治,重写数据链路等实际现象与问题展开。我自己是一个从事了6年的Java全栈工程师,最近整理了一套适合2019年学习的Java\大数据资料,从基础的Java、大数据面向对象到进阶的框架知识都有整理哦,可以来我的主页免费领取哦。日志系统架构基准有过项目开发经验的朋友都知道:从平台的最初搭建到实现核心业务,都需要有日志平台为各种业务保驾护航。 如上图所示,对于一个简单的日志应...阅读全文

博文 2019-05-23 07:34:47 编程小世界

golang-101-hacks(6)——init 函数

顾名思义init函数就是开展一些初始化任务,比如初始化变量值,或程序状态。一个源文件可以包含一个或多个init()函数,如下所示: package main import "fmt" var global int = 0 func init() { global++ fmt.Println("In first Init(), global is: ", global) } func init() { global++ fmt.Println("In Second Init(), global is: ", global) } func main() { fmt.Println("In main(), global is: ", global) } 执行结果如下: In first Init(...阅读全文

博文 2019-05-27 03:34:38 羊羽share

Go语言——垃圾回收GC

Go语言——垃圾回收GC 参考: Go 垃圾回收原理 Golang源码探索(三) GC的实现原理 引用计数:对每个对象维护一个引用计数,当引用该对象的对象被销毁时,引用计数减1,当引用计数器为0是回收该对象。 优点:对象可以很快的被回收,不会出现内存耗尽或达到某个阀值时才回收。 缺点:不能很好的处理循环引用,而且实时维护引用计数,有也一定的代价。 代表语言:Python、PHP、Swift 标记-清除:从根变量开始遍历所有引用的对象,引用的对象标记为"被引用",没有被标记的进行回收。 优点:解决了引用计数的缺点。 缺点:需要STW,即要暂时停掉程序运行。 代表语言:Golang(其采用三色标记法) 分代收集:按照对象生命周期长短划分不同的代空间,生命周期长的放入老年代,而短的放入新生代,不同...阅读全文

博文 2018-10-25 17:34:49 陈先生_9e91

Go语言基础:method

我们在C语言中,struct中声明函数,而Go中则不能再struct中声明函数。而是采用另外一种形态存在,Go中叫method。 method的概念 method是附属在一个给定的类型上,语法和函数的声明语法几乎一样,只是再func后面增加了一个recevier(也就是method所依从的主体) method的语法格式 func (r ReceiverType) funcName(parameters) (results) 形象一点说,就是 ReceiverType 类型的所有字段,方法 funcName 都是可以使用的,可以认为 funcName 属于 ReceiverType。 method简单应用 package main import ( "fmt" "math" ) type Re...阅读全文

博文 2016-09-15 06:00:02 uudou

如何结束子 goroutinue 求助

最近遇到一个难题,求助一下各位大神。 如下面部分代码所示。 computedata 内部 调用的dosomething函数是一个很耗时的函数,通过复杂的计算返回一个结果,用于其他函数计算。但是dosomething 函数在一秒之内,仍然没有返回结果。那么就直接超时,timeout掉。 但是目前遇到的困难是 即使我们这个computedata函数杀死,dosomething函数让着后台运行,该函数会修改一些全局函数,下次调用是,会影响下次的计算结果,因此必须彻底杀死,如何才能杀死它呢?求助高手? ```go func main() { computedata() for{ } } func computedata() { var c = ...阅读全文

Go转型——数据结构初级(三)

**1**.链式线性表 从之前的例题来看,线性表的顺序存储结构如果需要插入和删除i(1<=i<=n)元素,需要移动大量元素,所以我们可以看一下线性表另一种表示方式——链式存储结构。它不要求逻辑上相邻的元素物理位置也相邻,因此,链式存储结构没有顺序线性表的缺点,同样,它也失去了顺序线性表可随机存储的优点。 线性链表的特点是,使用一组任意的存储单元存储线性表的数据元素(遮住存储单元可以是连续的,也可以是不连续的),因此为了表示数据元素a(i)和其直接后继元素a(i+1)之间的逻辑关系,对于数据元素a(i)来说,除了要保存自身存储的数据信息,还需要存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分结合起来组成数据元素a(i)的存储映像,称为**结点**。它包含两个域,其中,包含自身存储...阅读全文

博文 2018-01-23 11:14:31 yinshidaoshi

Go coding in Go way-Gopher China演讲分享

导言:不同语言编程思维造就了编程风格以及代码形式的不一,那么如何运用GO编程思维去写GO代码?今天的分享就是基于对GO编码的一些观点分析,带领大家使用GO的编程思维来编写代码,当然本次分享中如果有不足之处也请大家指出和谅解。 |语言与思维方式我们首先从人类学语言假说开始,萨丕尔.沃夫假曾说过,语言可以影响或决定思维方式。在这里我要提一个大家可能都熟知的美国电影——《降临》,这部大片是根据美国华裔作家的小说改编的,主要剧情理论核心便印证了上述我们提到的假说——“语言影响思维并决定思维”。女主角在政府的委托下学习外星人语言,在学了外星人语言之后,她整体的思维方式发生质的改变,有强大的超能力,可以预知未来。当然这仅仅是电影,但是从中我们可以得到,选择语言是非常重要的,在座的各位应该非常庆幸,因为我...阅读全文

博文 2017-09-02 15:07:29 白明

Go语言项目(kingshard)性能优化实例剖析

kingshard性能优化网络篇 最近kingshard的功能开发节奏慢了许多。一方面是工作确实比较忙,另一方面是我觉得kingshard的功能已经比较完善了,下一步的开发重点应该是性能优化。毕竟作为一个MySQL proxy,如果转发SQL的性能很差,再多的功能都无济于事。所以这个周末一直宅在家里优化kingshard的转发性能。经过两天的探索发现,将kingshard的转发SQL性能提升了18%左右,在这个过程中学到了一下知识。借此机会分享一下,同时也是督促一下自己写博客的积极性。:) 1. 发现kingshard的性能瓶颈 首选,对kingshard进行性能优化,我们必须要找到kingshard的性能瓶颈在哪里。Go语言在性能优化支持方面做的非常好,借助于go语言的pprof工具,我们...阅读全文

博文 2017-02-09 14:19:13 flike

Mac下 golang连接数据库(mysql、sqlserver、oracle)

1.连接mysql数据库 注:驱动都用 go get 下载 如下图所示,需使用mysql驱动 // mysql 驱动 _ "github.com/go-sql-driver/mysql" 代码示例: // 连接mysql数据库 s := "%s:%s@tcp(%s)/%s?charset=utf8&multiStatements=true" url := fmt.Sprintf(s, userName, password, linkAddr+":"+port, "") db, err := sqlx.Connect("mysql", url) if err != nil { return nil, err } db.SetMaxIdleConns(1) db.SetMaxOpenConns(...阅读全文

博文 2019-04-03 13:34:39 118877

做JAVA开发的同学一定遇到过的爆表问题,看这里解决

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[净地](https://cloud.tencent.com/developer/user/1126000?fromSource=waitui)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/3994?fromSource=waitui) > 记一次Java线上服务器CPU过载问题的排查过程,详解排查过程中用到的Java性能监测工具:jvisualvm、jstack、jstat、jmap。 背景:Java线上服务运行一周后,某个周六晚上CP...阅读全文

博文 2018-10-11 17:38:16 qcloudcommunity

[golang]golang time.After内存泄露问题分析

无意中看到一篇文章说,当在for循环里使用select + time.After的组合时会产生内存泄露,于是进行了复现和验证,以此记录 内存泄露复现 问题复现测试代码如下所示: 1 package main 2 3 import ( 4 "time" 5 ) 6 7 func main() { 8 ch := make(chan int, 10) 9 10 go func() { 11 var i = 1 12 for { 13 i++ 14 ch <- i 15 } 16 }() 17 18 for { 19 select { 20 case x := <- ch: 21 println(x) 22 case <- time.After(3 * time.Minute): 23 print...阅读全文

博文 2019-07-13 21:35:41 luoming1224

Go 冒泡排序 ( Bubble Sort )

冒泡排序 冒泡排序 ( Bubble Sort ),是排序算法中最简单的一种 一般都是我们新了解一门语言时拿来练手使用 今天也不例外,虽然用 C# 写过无数次的冒泡排序,但是毕竟换了一门语言,所以有必要再来实现一次 原理 1.冒泡 既然决定写文章记录,那么就要好好的写 我们说冒泡排序简单,那么为什么简单呢?就是因为容易理解 冒泡 Bubble,如其意,就像气泡一样,他会慢慢的从海底浮出水面 那么这一层一层的浮现也是我们冒泡排序的实现方式 2.原理 假设我们有如此数组 : 7 2 9 22 16 93 202 0 33 29 84 一共是 11 个数字 我们先给数字加上下标 7[0] 2[1] 9[2] 22[3] 16[4] 93[5] 202[6] 0[7] 33[8] 29[9] 84[...阅读全文

博文 2018-07-17 01:34:44 SeaConch

Go 语言基础之变量

这小节我们将要介绍如何定义变量、常量、Go内置类型以及Go程序设计中的一些技巧。 定义变量 Go语言里面定义变量有多种方式。 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面: //定义一个名称为“variableName”,类型为"type"的变量 var variableName type 定义多个变量 //定义三个类型都是“type”的变量 var vname1, vname2, vname3 type 定义变量并初始化值 //初始化“variableName”的变量为“value”值,类型是“type” var variableName type = value 同时初始化多个变量 /* 定义三个类型都是"type"的变量,并且分别初始化为相应...阅读全文

博文 2016-09-06 12:00:02 chenxun2009

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

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

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

一个高性能MySQL proxy(kingshard)的性能测试报告

kingshard的性能测试报告 之前的几篇blog,给大家分享的都是kingshard(https://github.com/flike/kingshard )的架构与设计。其实很多人对kingshard的性能也非常关心。最近热心的网友bigpyer对kingshard做了详细的性能测试。在此分享一下。 1.测试环境 1.1服务器配置 类别 名称 OS 云主机 Ubuntu 14.04 LTS CPU Common KVM CPU @ 2.40GHz *4 RAM 8GB DISK 500GB kingshard master分支 Mysql v5.6.25 Sysbench v0.5 2.性能需求 测试通过kingshard转发SQL请求与直连DB发送SQL请求这两种情形下的性能差距。 ...阅读全文

Docker 文件系统以及启动容器的文件系统变化

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 本文主要介绍一下 Docker 基础的东西,先介绍一下我的实现环境: 1. windows 10 正式版 1. Docker Toolbox 1. Docker version 1.8.2 1. 官方镜像 ubuntu:latest 这里我们主要只说 aufs/containers/graph 这三个目录。 1. 先进入 Docker 文件系统目录 ll /var/lib/docker #其中目录是这样的 /var/lib/docker -> /mnt/sda1/var/lib/docker/ df -h # 查看挂载情况 Filesystem Size Used Available Use%...阅读全文

博文 2017-02-09 18:41:30 widuu

Go语言之循环语句

```灰子学技术: 原文链接:https://mp.weixin.qq.com/s/ITS8CjBup5ZmXPsdz30RQQ``` Go语言中的循环语句只有for,没有while和do/while这两种格式。 Go语言中的for语句的表达形式有三种实现方式: **1、基于计数器的实现。** 语法规则如下所示,这与C++的for循环实现模式基本类似,不过没有()。 ``` for i := 0; i阅读全文

博文 2019-09-08 17:05:36 ZhDavis

go反射之后接口断言问题

这个问题困扰了我一晚上,但是最终还是被我试出来了。 问题场景: 1.我通过反射获取一个指针的value v := reflect.ValueOf(ptr).Elem() 这个指针指向了一个结构体,因为是指针所有我用了Elem()函数获取了指向的值。 2.因为ptr指针指向的结构体实现了一个接口,所以我用接口断言方法来调用接口的函数。 if _,ok := v.Interface().(XXX);ok{ ... } XXX是我实现的接口,看起来一切都没问题,但是问题来了。 //我用一个接口接收ptr的值 var i interface{} i = ptr if _,ok := i.(XXX);ok{ //ok为true ... } 如上所示,我用反射之前,接口断言没问题。但是v.Interfa...阅读全文

博文 2016-10-03 03:00:02 i冬瓜

Go 语言内存管理(二):Go 内存管理

介绍 了解操作系统对内存的管理机制后,现在可以去看下 Go 语言是如何利用底层的这些特性来优化内存的。Go 的内存管理基本上参考 tcmalloc 来实现的,只是细节上根据自身的需要做了一些小的优化调整。 Go 的内存是自动管理的,我们可以随意定义变量直接使用,不需要考虑变量背后的内存申请和释放的问题。本文意在搞清楚 Go 在方面帮我们做了什么,使我们不用关心那些复杂内存的问题,还依旧能写出较为高效的程序。 本篇只介绍 Go 的内存管理模型,与其相关的还有逃逸分析和垃圾回收内容,因为篇幅的关系,打算后面找时间各自整理出一篇。 池 程序动态申请内存空间,是要使用系统调用的,比如 Linux 系统上是调用 mmap 方法实现的。但对于大型系统服务来说,直接调用 mmap 申请内存,会有一定的代价...阅读全文

GO语言环境在Red Hat Linux 7.5上的配置

这篇文章是我根据goland的官方文档及自己的实践总结出来的一份基础向GO语言环境在Linux系统上的配置教程,使用的Linux版本:Red Hat Enterprise Linux Server release 7.5 (Maipo)首先,我们应该先进入下载网站:www.Jetbrains.com 网站如图所示我们选择顶部的Languages选项,可以看到如下页面此时发现“GO”的光标是暗着的,无法选取; 我们往下拉取页面,可以看到左端有Languages选项且正在选中着它;我们应该取消它的选中,可以看到取消后,GO变为可选项。在选取“GO”选项后,会出现如下所示界面; 我们把鼠标移到GoLand上即可看到下载键;点击“DOWNLOAD”; 之后会进入如下界面,根据自己的操作系统选择合适版...阅读全文

博文 2018-08-17 14:35:25 YIBOWAY

书签创建工具Geekmarks

Geekmarks 提供免费开源、API 驱动的 Greeky 书签服务。 安装 Chrome 扩展,点击 g 图标: ![image](https://static.oschina.net/uploads/space/2017/0216/111520_uAiZ_2903254.png) 用 Google 账户登录,完成后,菜单如下所示: ![image](https://static.oschina.net/uploads/space/2017/0216/111602_Vgev_2903254.png) 点击“创建书签”(Create bookmark),输入新标签的书签并保存,不存在的标签将在飞行中创建: ![image](https://static.oschina.n...阅读全文

开源项目 2017-02-17 03:56:13 dimonomid

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

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

博文 2017-09-18 07:05:02 肆虐的悲傷

Docker 问题 集装箱 不断更新中

本文档已经更新到GitHub上: 查看地址 docker 问题列表 Error parsing reference: "golang:alpine as builder" is not a valid repository/tag: invalid reference format 解决措施? 查看docker的版本 docker --version Docker version 1.13.1, build 94f4240/1.13.1 需要升级docker的版本 具体升级过程,可以查看007---如何升级docker的版本.md文档 Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting ...阅读全文

博文 2018-09-18 18:34:41 故新_d4ef

Go之一步步学习RabbitMQ(一)

本文来自公众号“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/YDtJzDYn7EMeoupRFwrulg写在前面的话:最近笔者在学习RabbitMQ,便尝试着通过下面的学习过程,来尽量还原RabbitMQ为什么如此设计,以及它是如何解决这些问题的。当中如有不对或者理解偏差的地方,还请大家不吝赐教,多多留言。如果你觉得这篇文章真的帮到了你,还请你顺手转发下。背景知识:在学习RabbitMQ之前,我们需要对下面的知识有些概念,生产者(producer):产生并发送消息的程序。队列(queue):存在RabbitMQ中的邮筒,虽然消息是在应用程序和RabbitMQ中进行传递,但队列才是唯一能够存储消息的地方。队列的大小取决于宿主机器的内存和磁盘容量,它本质上是一个...阅读全文

博文 2019-11-04 08:47:02 ZhDavis

使用 Go 和 ReactJS 构建聊天系统(五):优化前端

本节完整代码:[GitHub](https://github.com/watermelo/realtime-chat-go-react/tree/part-5) > 本文是关于使用 ReactJS 和 Go 构建聊天应用程序的系列文章的第 5 部分。你可以在这里找到第 4 部分 - [处理多个客户端](https://studygolang.com/articles/22430) 欢迎来到本系列的第 5 部分!如果你已经学到这儿了,那么我希望你享受学习 Go 的乐趣并运用 Go 和 React 建立自己的聊天系统! 在本节中,我们将再次关注前端,并对其进行优化,以便可以输入自定义的聊天消息,并且以更好的方式显示新的聊天消息。 ## 聊天输入组件 我们需要创建一个新的组件。该组件基本上只渲染 ...阅读全文

博文 2019-08-03 11:50:27 watermelo

关于go语言的虚拟地址空间

经常在书上看到C程序的虚拟空间,如下面链接中的图片所示 想知道,这个模型是否是语言无关的? go语言是否也是使用这样的方式组织虚拟地址空间的? https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Virtual_address_space_and_physical_address_space_relationship.svg/773px-Virtual_address_space_and_physical_address_space_relationship.svg.pn...阅读全文

Go接口之nil != nil

本文来自“灰子学技术”,原文链接如下所示:https://mp.weixin.qq.com/s/ZBd1UcIJFk_DonkxVNgERA一、引出话题:在开始这个话题之前,我们先看一段代码以及其输出结果,代码如下所示:​Output: ​从上面的输出结果来看,GetA()返回的类型为*A就算赋值为nil,也不等于nil。看到这里笔者觉得很奇怪,明明是GetA()返回值是nil,为什么nil的判断条件是false呢?二、原因分析:在研究了interface之后,笔者发现了真相,原来Go语言中的interface是不是nil的条件,不单单是interface中的值是nil,类型还需要是nil才行。通过Go的官方文档描述来看,原因如下:// 原文链接:https://golang.org/doc...阅读全文

博文 2019-11-21 09:18:36 ZhDavis

VPN网关最佳实践系列(一)如何让VPC之间互通

摘要: 话题引入 VPN网关是阿里云新推出的一项网络服务,可以帮助你的企业轻松构建安全、稳定、高可用的网络互联方案。相比传统VPN软件和自建VPN,阿里云VPN网关部署方便,即开即用,售后支持专业。 今天,我们来谈一谈如何如何部署和配置VPN网关,使两个VPC之间能够私网互通,把你的云上网络连接起来。 话题引入 VPN网关是阿里云新推出的一项网络服务,可以帮助你的企业轻松构建安全、稳定、高可用的网络互联方案。相比传统VPN软件和自建VPN,阿里云VPN网关部署方便,即开即用,售后支持专业。 今天,我们来谈一谈如何如何部署和配置VPN网关,使两个VPC之间能够私网互通,把你的云上网络连接起来。 VPN部署 提示:VPN网关是基于Internet建立加密隧道进行通信,通信质...阅读全文

以编程方式查找 DNS 记录

DNS 记录是与 DNS 服务器关联的映射文件,无论每个域名与哪个 IP 地址关联,它们都能处理发送到每个域名的请求。net 包包含各种方法来查找 DNS 记录的细节。让我们运行一些示例,收集有关 DNS 服务器的信息以及目标域名的相应记录: ## Go 程序查找域名的 A 记录 net.LookupIP() 函数接受一个字符串(domain-name)并返回一个包含主机的 IPv4 和 IPv6 地址的 net.IP 对象切片。 ```go package main import ( "fmt" "net" ) func main() { iprecords, _ := net.LookupIP("facebook.com") for _, ip := range iprecords { ...阅读全文

博文 2019-10-15 10:59:24 lovechuck

DockOne微信分享(一二四):轻松筹监控系统实现方案

【编者的话】监控系统是服务管理最重要的组成部分之一,可以帮助开发人员更好的了解服务的运行状况,及时发现异常情况。虽然阿里提供收费的业务监控服务,但是监控有很多开源的解决方案,可以尝试自建监控系统,满足基本的监控需求,以后逐步完善优化。这样既可以更灵活的满足自身业务的监控需求,也可以为以后自建机房提供技术积累。通过以下7个方面来建设监控系统。 【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次培训我们理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试效率、存储、网络、监控、安全等角度进行。 1 . 日志打印完善的日志是实现监控的基础,如何打印日志关系到之后的日志过滤、存储以及分析。除了选择合适的日志库,还要...阅读全文

博文 2017-06-25 16:25:42 jiadas

golang 程序在 docker 无法找到其他容器

阅读对象 假设阅读者了解 docker,docker-compose以及 go 的语法 问题描述 我有三个应用分别叫做mysql,goApp,javaApp。 他们的依赖关系如下图所示: image.png goApp 通过调用 javaApp 的服务完成逻辑。 javaApp 直接和 mysql 数据库打交道。 为了让他们三个很容易的在 docker 容器里跑起来我使用了 docker-compose。具体的配置文件如下: version: '2' services: mysql: container_name: mysql image: mysql:5.7 restart: always hostname: mysql environment: MYSQL_DATABASE: ${MYS...阅读全文

博文 2017-08-10 14:05:10 耿宜超

Go语言基础:method

我们在C语言中,struct中声明函数,而Go中则不能再struct中声明函数。而是采用另外一种形态存在,Go中叫method。 method的概念 method是附属在一个给定的类型上,语法和函数的声明语法几乎一样,只是再func后面增加了一个recevier(也就是method所依从的主体) method的语法格式 func (r ReceiverType) funcName(parameters) (results) 形象一点说,就是 ReceiverType 类型的所有字段,方法 funcName 都是可以使用的,可以认为 funcName 属于 ReceiverType。 method简单应用 package main import ( "fmt" "math" ) type Re...阅读全文

博文 2016-09-06 23:00:03 uudou