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

Go 性能优化技巧 10/10

垃圾回收不是万能的,Go 一样存在资源泄露问题。 ##SetFinalizer 虽然垃圾回收器能很好地处理循环引用,可一旦加上 SetFinalizer,事情就不那么美妙了。 ![gc1](http://studygolang.qiniudn.com/160614/9610a9ee5f2f443fceb1bcb271b9bc84.jpg) ![gc2](http://studygolang.qiniudn.com/160614/b7a72410161fdb53585cc0e2178a680d.jpg) 显然,这些对象并未被释放。在标准库文档里有这样的描述: > Finalizers are run in dependency order: if A point...阅读全文

golang 数组切片(一)

Array与Slice 1、array 静态数组 [len]type,数组类型包括数组长度与元素的数据类型,数据类型完全相同后才可赋值 声明 var array [5]byte //声明时自动将默认初始化为各自类型对应的零值 声明初始化 array := [5]byte{1,2,3,4,5} //长度为5的字节数组 声明初始化 array := […]byte{1,2,3,4,5}//go编译器将根据元素推导出长度 5 2、Slice 动态数组 slice 是对底层数组的抽象和控制。它包含 Go 需要对底层数组管理的三种元数据,分别是: 指向底层数组的指针 slice 中元素的长度 slice 的容量(可供增长的最大值) 声明: //A、创建一个nil slice;slice==nil va...阅读全文

博文 2015-10-21 16:00:09 xia_xing

使用Gin框架构建一个简单的注册登录后台(Go语言)

一、Gin框架介绍 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了2.0版本。具有快速灵活,容错方便等特点。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。 二、gin安装 首先需要安装,安装比较简单,使用go get即可 go get github.com/gin-gonic/gin 如果安装失败,直接去Github clone下来,放置到对应的目录即可。 三、简单介绍构建过程 1、文件夹结构 https ————main.go ————data ————————...阅读全文

博文 2018-12-13 21:34:46 一梦千嬅

Go实现Websocket消息推送

1.websocket 简介 以往浏览器要获取服务端数据,都是通过发送 HTTP 请求,然后等待服务端回应的。也就是说浏览器端一直是整个请求的发起者,只有它主动,才能获取到数据。而要让浏览器一侧能够获取到服务端的实时数据,就需要不停地向服务端发起请求。虽然大多数情况下并没有获取到实际数据,但这大大增加了网络压力,对于服务端来说压力也直线上升。 image.png 由于 WebSocket 是全双工通信,所以当建立了 WebSocket 连接之后,接下来的通信就类似于传统的 TCP 通信了。客户端和服务端可以相互发送数据,不再有实时性的问题。 image.png image.png 2.开发包的选择 在 Go 官方的 SDK 中,并不包含对 WebSocket 的支持,所以必须使用第三方库。 ...阅读全文

博文 2018-08-19 01:35:07 tuzisir

go局部变量的存储空间是堆还是栈?

go局部变量的存储空间是堆还是栈? 编译器会自动选择在栈上还是在堆上分配局部变量的存储空间,但可能令人惊讶的是,这个选择并不是由用var还是new声明变量的方式决定的。 var global *int func f() { var x int x = 1 global = &x } func g() { y := new(int) *y = 1 } f函数里的x变量必须在堆上分配,因为它在函数退出后依然可以通过包一级的global变量找到,虽然它是在函数内部定义的;用Go语言的术语说,这个x局部变量从函数f中逃逸了。相反,当g函数返回时,变量y将是不可达的,也就是说可以马上被回收的。因此,y并没有从函数g中逃逸,编译器可以选择在栈上分配*y的存储空间(译注:也可以选择在堆上分配,然后由Go语...阅读全文

博文 2017-12-07 08:04:45 卢春风

Mesos 架构以及源码浅析

Mesos 按照官方的介绍,是分布式操作系统的内核。目标是 ”Program against your datacenter like it’s a single pool of resources”,即可以将整个数据中心当做一台电脑一样使用。可以说这个目标是所有宣称自己是DCOS的系统的共同目标,本文从架构和源码层面分析Mesos以及周边框架,看看Mesos是如何实现这个目标的,当前距这个目标还有多大差距。最后比较了一下Mesos和Kubernetes这两个都受Google的Borg影响的系统的异同。 阅读对象:对Mesos或者分布式系统感兴趣的技术人 设计理念以及架构 引用Mesos paper里的一句话,来说明Mesos的设计理念: define a minimal interface...阅读全文

博文 2017-02-09 19:54:11 jolestar

千城千站这款优化系统 或许能减少你50%的优化成本

很多企业在做网站优化时,一般的操作就是不断的更新网站原创文章,进行站外推广,页面调整,数据分析,用户分析,有些企业甚至会付费增加百度竞价,360推广,这需要专门的优化人员去负责,而且这种做法效果时间长、工作效率低、竞争力弱,钱投进去了但是难以达到理想的效果。 举个简单的例子,比如你做站外推广发送外链,早几年很多外网还支持发送外链文章,随着近几年文章监管严格,发送的文章都需要审核,发现无关的外链都会遭受屏蔽,这也是为什么你发送一百个平台最后收录寥寥无几。 ![1.jpg](https://static.studygolang.com/180503/8b092222d171654ac71ccd06d080a82d.jpg) 人员成本以及时间都花销进去了,但是效果不成效,直接...阅读全文

B站日志系统的前世今生

作者简介王翔宇Bilibili资深运维研发工程师。曾就职于百度、饿了么,2017年加入B站,负责B站日志平台的设计和开发工作。B站的日志系统(Billions)从2017年5月份开始建设,基于elastic stack,面向全站提供统一的日志采集、检索、监控服务。目前集群规模20台机器,接入业务200+,单日日志量10T+。借此机会跟大家分享一些B站在日志系统的建设、演进以及优化的经历。由于经验尚少,抛砖引玉,欢迎大家一起交流讨论。文章主要分为三个部分:原有日志系统,现有系统演进,未来的展望。原有日志系统在Billions之前,B站内部并没有统一的日志平台,基本是业务之间各自为战,既有基于ELK的比较前瞻的方式,又有服务器上使用tail/grep比较基本原始的方式,水平参差不齐。在了解各个产...阅读全文

博文 2017-10-21 08:06:41 王翔宇

移动APP测试要点之性能、兼容、接口、交叉测试

之前有写过APP功能测试和安全测试的要点,今天在分享一部分,包括,性能测试、兼容性测试、借口测试、交叉测试。 性能测试:评估App的时间和空间特性 ; 极限测试:在各种边界压力情况下,如电池、存储、网速等,验证App是否能正确响应。包括:内存满时安装App、运行App时手机断电、运行App时断掉网络 响应能力测试:测试App中的各类操作是否满足用户响应时间要求。包括:App安装、卸载的响应时间、App各类功能性操作的影响时间 压力测试:反复/长期操作下、系统资源是否占用异常。包括:App反复进行安装卸载,查看系统资源是否正常、其他功能反复进行操作,查看系统资源是否正常。 性能评估:评估典型用户应用场景下,系统资源的使用情况。 容...阅读全文

Go语言学习(二):array、slices和map

前言 近来个多月忙于论文,各方面原因的综合,说多都是泪,等着结果了。关于Go语言的学习,本文的内容老早就学习了,之前时间也不知去哪了,而且也没心思,现在誊写上来吧。 数组array 定义形式: [n],n标示array长度,标示类型。 // e.g: [32]byte // 长度32的数组,每个元素为1个byte [16]*float64 // 指针数组 [3][5]int // 二维数组 在Go语言中,数组长度在定义后不可更改。获取array元素个数方法:arrLength := len(array) 元素访问与C一致。需要注意的一点,Go语言中数组属于值类型,不能像C一样用于指针传递。也就是说,如果数组作为函数入参,则在调用该函数时,函数将对数组做一份拷贝副本,...阅读全文

博文 2014-11-08 00:00:02 fzy0201

Android开发中 React Native生命周期如何划分?

熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期。今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android中,React Native组件的生命周期,大致分为三个阶段,分别是: 1、组件第一次绘制阶段,这个阶段主要是组件的加载和初始化; 2、组件在运行和交互阶段,这个阶段组件可以处理用户交互,或者接收事件更新界面; 3、组件卸载消亡的阶段,这个阶段主要是组件的清理工作。 在Android React Native组件的整个生命周期中,还有10个回调函数,不得不知。 1、object getDefaultProps()在组件类创建的时候调用一次,然后返回值被缓存下来。...阅读全文

Git超实用总结,再也不怕记忆力不好了

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[腾讯工蜂](https://cloud.tencent.com/developer/user/3246935?fromSource=waitui)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/6041?fromSource=waitui) # Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码。 Git 仓库主要是由是三部分组成:本地代码,缓存区,提交历史,这几乎是所有操作的本质,但是为了文章更加简单易...阅读全文

博文 2018-10-16 10:54:50 qcloudcommunity

Golang上传文件到七牛云

### 获取 首先要获取的是七牛云官方的SDK ``` go get -u github.com/qiniu/api.v7 ``` ### 七牛云 - [七牛云](https://www.qiniu.com/)没有帐号的去注册一个帐号。 - [个人中心](https://portal.qiniu.com/user/key)有账号的直接进个人中心,去查看秘钥 AccessKey/SecretKey ### 代码 一些常变量 ``` const ( //本地保存的文件夹名称 upload_path string = "/files/" ) var ( //BUCKET是你在存储空间的名称 ACCESS_KEY = "******EA09VCy5EfN_*******************" S...阅读全文

博文 2018-04-17 22:38:30 mu1er

Go 1.5 实现自举、引入并发垃圾收集器

在经历了几个Beta版本和一个rc版本之后,Go 1.5终于正式发布了。这是一个很重要的版本,实现方面有很多变化。因为这个版本仍然遵循Go 1兼容性承诺,开发团队预计,所有的Go程序应该都可以和以前一样编译和运行。二进制和源码包已提供下载。 在实现方面,最大的变化有以下几点: 编译器和运行时是完全用Go语言编写的(还有少量汇编),实现了自举。实现中不再涉及C语言,所以构建时也就不需要C编译器了。 并发的垃圾收集器,可能的情况下,垃圾收集可以和其他goroutine并发进行,可以极大降低响应时间。 默认情况下,Go程序运行时的GOMAXPROCS会被设置为可用的核数,之前默认为1。 对internal packages的支持扩展到所有repositories,不再是仅供核心包...阅读全文

GO起源、特性

自https://juejin.im/entry/5705f83a8ac247004c04900c Go的核心贡献者Go主要有静态语言、天生并发、内置GC、安全性高、语法简单、交叉编译和编译快速这几个方面的特性。这些特性决定了Go的三个高富帅特性:运行快、开发快和部署快,而这些特性都是针对Google遇到的一些痛点来设计的。在说痛点之前,我们先来了解一下Go的作者和主要核心开发者们,图1是Go的三个作者从左到右分别是:Robert Griesemer, Rob Pike 和 Ken Thompson。Robert在开发Go之前是Google V8、Chubby和HotSpot JVM的主要贡献者;Rob主要是Unix、UTF-8、plan9的作者;Ken主要是B语言、C语言的作者、Unix之...阅读全文

博文 2019-04-28 10:31:04 sunweiliang

【golang】内存逃逸常见情况和避免方式

为什么要尽量避免内存逃逸? 因为如果变量的内存发生逃逸,它的生命周期就是不可知的,其会被分配到堆上,而堆上分配内存不能像栈一样会自动释放,为了解放程序员双手,专注于业务的实现,go实现了gc垃圾回收机制,但gc会影响程序运行性能,所以要尽量减少程序的gc操作。 常见内存逃逸情况 1、在方法内把局部变量指针返回,被外部引用,其生命周期大于栈,则溢出。 2、发送指针或带有指针的值到channel,因为编译时候无法知道那个goroutine会在channel接受数据,编译器无法知道什么时候释放。 3、在一个切片上存储指针或带指针的值。比如[]*string,导致切片内容逃逸,其引用值一直在堆上。 4、因为切片的append导致超出容量,切片重新分配地址,切片背后的存储基于运行时的数据进行扩充,就会...阅读全文

博文 2020-06-06 11:32:41 dongzaidong

【预警】新型勒索病毒来袭,eCh0raix紧盯NAS设备

病毒预警 近日,研究人员发现了新型勒索病毒eCh0raix,该勒索病毒针对QNAP网络附属存储(NAS)设备进行攻击,其攻击行为类似于Ryuk和LockerGoga勒索病毒,亚信安全将其命名为Ransom.Linux.ECHORAIX.A。NAS设备是网络连接的存储设备,主要用于文件存储和备份系统。由于其成本低,效率高并且可扩展,受到用户欢迎,其市场占有率高达80% 。受本次勒索病毒影响的NAS设备包括QNAP TS-251、QNAP TS-451、QNAP TS-459 Pro II和 QNAP TS 253B。病毒技术细节分析eCh0raix勒索病毒使用Go/Golang语言编写,该病毒通过检查语言来确定被感染的NAS设备所处的位置,如果其位于俄罗斯、乌克兰和白俄罗斯等国家,其会终止自身...阅读全文

博文 2019-07-19 23:32:43 鸿萌数据恢复

Go 在 Google I/O 2011 的视频

Google I/O 2011 的官方视频大部分都已经放出了。昨天 Golang 团队也发布了 Google I/O 2011 上关于 Go 的相关视频。 由于众所周知的原因,大家不能拜访“油吐伯”。所以视频我放到土豆上了。 大家看到的这个蓝色毛绒公仔叫“Gopher”,很有爱的 Golang 吉祥物,这次也出现在 Google I/O 2011 的现场。 不知道能不能搞到一个正版的。其实我严重怀疑这个来自悉尼的公仔是东莞产的……你们懂…… 用 Go 编写 Web 应用 演示文稿下载(英文) 这个演讲通过一步步开发并部署第一个 Go App Engine 应用:Moustachio,展示了 Go 版本的 App Engine 的应用开发。 Go 实例 演示文稿下载(英文) 这是在 I/O B...阅读全文

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

基于TableStore构建简易海量Topic消息队列

摘要: 12月7日,2017苏州·云栖大会上,阿里云发布全新的混合云数据存储和灾备方案,此次发布的内容包括最新推出的混合云容灾服务HDR和混合云备份服务HBR,以及全面升级的混合云存储阵列CSA2000和CSA3000。 12月7日,2017苏州·云栖大会上,阿里云发布全新的混合云数据存储和灾备方案,此次发布的内容包括最新推出的混合云容灾服务HDR和混合云备份服务HBR,以及全面升级的混合云存储阵列CSA2000和CSA3000。 ![3d6b1826d99c00df1619050f7111bd2d417523c2[1].png](https://static.studygolang.com/171213/1c82ed88ac1bbb5c35c7c3896c1971a7....阅读全文

【GO for java programmers】面向Java开发者的GO编程2

英文原文在此www.nada.kth.se/~snilsson/go_for_java_programmers 译文同步至http://blog.csdn.net/kkkloveyou/article/details/8308534 http://bbs.gocn.im/thread-73-1-1.html ====================接上文,以下正文========================. 条件语句 Go在条件语句中并不使用括号,像 if条件语句 , for 条件语句的表达式, switch 条件语句的值. 另一方面,它并不需要在if或 for条件语句中加花括号 if a < b { f() } if (a < b) { f() } // 括号是不必要的. if (a...阅读全文

博文 2014-11-19 01:00:02 kkkloveyou

PaaS 系统 Kel

Kel 是一个开源的基于 [Kubernetes](http://www.oschina.net/p/kubernetes) 构建的 PaaS 系统,采用 Python 和 Go 语言开发。Kel 可简化管理 Web 应用发布和托管整个软件生命周期。Kel 帮助开发和运维人员轻松管理他们的应用架构,通过一组工具和组件让 K8S 使用非常简单。 Kel 包括如下组件: * kel-api * kel-router * kel-identity * kel 命令行客户端 * kelctl * kel-cluster Kel 使用 Apache 许可证,同时可由 Eldarion 公司提供商业支持...阅读全文

打造一款开源的WAF网关

本文首发于作者的微信公众号:网络安全生命周期原文链接: 打造一款开源的WAF网关 【背景】 在互联网行业,Google将安全做到基础设施里面,素来是各大公司学习的榜样,在Web方面,通过GFE (Google Front-End) 统一对外发布,业务只需要在GFE登记,GFE就会调取正确的证书,保障用户到GFE的TLS连接安全。 Microsoft在Web方面,有一款叫做Azure Application Gateway的产品,提供了统一的Web路由、负载均衡,以及WAF(Web应用防火墙)功能。遗憾的是,这几款产品均不能用于私有化部署,Google Front-End 和 Azure Application Gateway只服务于他们自身业务以及他们自己的云客户。想要使用他们的产品,得使用...阅读全文

博文 2018-07-18 23:34:44 _U2_

SmartRaiden 无网微支付解读

SmartRaiden 无网微支付解读 在互联网十分发达的今天,很多人已经习惯了数字支付,只要有网,随时都可以进行转账操作;但是依旧有许多情况下没有网络连接,比如一些偏远地区、岛屿、地下室等网络信号难以覆盖的地方或者手机停机等突发状况,这时候如何进行支付呢?有人可能会说支付宝微信即使没有网络也可以出示付款码,但这种方式的前提是对方(收款方)必须有网,我们在前面列举的一些场景中是交易双方都没有网络连接的,这就需要某些新技术和解决方案了,SmartRaiden 无网微支付就很好地解决了这一问题,下面我们就来看看它到底是什么。 介绍 SmartRaiden 无网微支付是基于 Raiden 网络扩展的 SmartMesh 支付协议,SmartMesh 用户之间通过手机 WiFi 或其他直连信号,P2...阅读全文

Golang 实现LRU算法

缓存文件置换机制是计算机处理缓存存储器的一种机制。 计算机存储器空间的大小固定,无法容纳服务器上所有的文件,所以当有新的文件要被置换入缓存时,必须根据一定的原则来取代掉适当的文件。此原则即所谓缓存文件置换机制。 缓存文件置换方法有: 先进先出算法(FIFO):最先进入的内容作为替换对象 最近最少使用算法(LFU):最近最少使用的内容作为替换对象 最久未使用算法(LRU):最久没有访问的内容作为替换对象 非最近使用算法(NMRU):在最近没有使用的内容中随机选择一个作为替换对象 type Lru struct { max int l *list.List Call func(key interface{}, value interface{}) cache map[interface{}]*l...阅读全文

博文 2019-08-29 11:33:03 howie_矜暮

Go语言二分之查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列查找过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。算法要求:1.必须采用顺序存储结构。2.必须按关键字大小有序排列。要求:请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存 在此数,并且求出下标,如果没有就 ...阅读全文

博文 2019-03-11 20:35:22 GoDevops

自己动手写Android插件化框架,让老板对你刮目相看

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[达文西](https://cloud.tencent.com/developer/user/2182846?fromSource=waitui)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/3523?fromSource=waitui) 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪费不少时间,如插件Context和主工程Context的区别,权限必须在主工程申明等,因此花了...阅读全文

博文 2018-10-15 16:55:25 qcloudcommunity

golang gc 问题(转的)

在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究。本文对研究的结果进行一下总结。 什么是垃圾回收? 曾几何时,内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种办法: 内存泄露检测工具。这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起到辅助作用。 智能指针。这是c++中引入的自动内存管理方法,通过拥有自动内存管理功能的指针对象来引用对象,是程序员不用太关注...阅读全文

博文 2016-05-07 15:00:00 jackluo

双11同款!阿里云发布全局事务服务GTS:每秒处理10万笔事务

摘要: 5月30日,阿里云宣布全局事务服务产品GTS正式商用,每秒可处理10万笔事务,将分布式事务这个“贵族技术”变为“平民技术 ”,可解决跨数据库、消息、服务的分布式环境下的事务一致性问题,让开发者无需考虑复杂的事务问题,加速微服务落地,效率比传统的XA协议提升了10倍之多。 5月30日,阿里云宣布全局事务服务产品GTS正式商用,每秒可处理10万笔事务,将分布式事务这个“贵族技术”变为“平民技术 ”,可解决跨数据库、消息、服务的分布式环境下的事务一致性问题,让开发者无需考虑复杂的事务问题,加速微服务落地,效率比传统的XA协议提升了10倍之多。 分布式事务是企业在搭建微服务时无法绕过的一道墙,全局事务服务GTS可以将复杂分布式事务逻辑与具体的业务系统分离,实现分布式事务的生命周期...阅读全文

golang 网络编程之如何正确关闭tcp连接以及管理它的生命周期

欢迎访问我的个人网站获取更佳阅读排版 golang 网络编程之如何正确关闭tcp连接以及管理它的生命周期 | yoko blog (https://pengrl.com/p/47401/) 本篇文章部分内容涉及到tcp协议以及socket编程的通用底层知识。讨论的tcp连接对象皆为golang的net.conn对象。如果存在错误,请一定指正,谢谢。 先上结论 Read方法返回EOF错误,表示本端感知到对端已经关闭连接(本端已接收到对端发送的FIN)。此后如果本端不调用Close方法,只释放本端的连接对象,则连接处于非完全关闭状态(CLOSE_WAIT)。即文件描述符发生泄漏。 Write方法返回broken pipe错误,表示本端感知到对端已经关闭连接(本端已接收到对端发送的RST)。此后本...阅读全文

博文 2019-06-22 15:32:39 notokoy

区块链开发工程师要干什么?

区块链开发工程师要干什么?如何成为一名合格的区块链工程师,其必备技能有掌握加密技术、共识算法、Go/java/C++、以太坊平台等内容,才能够完成公司区块链项目的研发和维护工作内容。 区块链开发 目前学完区块链专业的课程的两个就业方向: 一是Go编程开发工程师,多从业于软件开发公司,从事以下领域的编程:服务器编程、分布式系统编程、网络编程、数据库操作、开发云平台等。 目前很多云平台采用Go开发,Go语言是目前项目转型区块链首选的语言,也是软件工程师转型首选的语言,是添加技术栈的首选语言。 二是区块链开发工程师,当前区块链开发人员多需要在以下行业:互联网金融行业、电子商务行业、物流行业、游戏行业等。 区块链工程师岗位职责:负责区块链底层技术研发。 以下是小编网罗的几个区块链工程师岗位要求: 1...阅读全文

博文 2018-12-13 21:34:47 晚qkl

数据结构-(队列顺序存储)循环队列的实现(golang)

import ( "errors" ) //循环队列结构体(顺序存储) type CirularQueue struct { elem []ElemType //储存的数据 front int //头指针 rear int //尾指针 } //初始化循环队列 func InitCQueue() *CirularQueue { cqueue := new(CirularQueue) cqueue.elem = make([]ElemType, MAXSIZE) cqueue.front = 0 cqueue.rear = 0 return cqueue } //清空循环队列 func (cqueue *CirularQueue) ClearCQueue() { cqueue.front = 0...阅读全文

博文 2017-02-09 16:59:44 卑微了承诺-life

大规模指标储存平台Uber M3

M3  是 Uber 开源的一个基于分布式时序数据库 M3DB 构建的度量平台,可每秒聚合 5 亿个指标,并且以每秒 2000 万笔的速度持续存储这些结果。 M3 目前拥有超过 66 亿条时序数据,每秒聚合5亿个指标,并在全球范围内每秒持续存储 2000 万个指标(使用 M3DB),批量写入将每个指标持久保存到不同区域的三个副本中。它还允许工程师编写度量策略,以不同的时间长度和不同粒度对资料进行保存。这使得工程师和数据科学家能以不同的留存规则,精细和智能地存储有不同保留需求的时序数据。 基于 Uber 日益增长的度量存储工作负载的经验,M3 具备以下特性: 优化指标管道的每个部分,为工程师提供尽可能多的存储空间,以实现最少的硬件支出成本。 通过自定义压缩算法 [M3TSZ](...阅读全文

Go基本概念(1)

1.Go 的安装 1.1需要提前安装JDK 1.2安装Go server ubuntu系统: 预先下载好.deb安装包 dpkg -i go-server-${version}.deb 服务状态查看,启动,停止 sudo /etc/init.d/go-server status sudo /etc/init.d/go-server start sudo /etc/init.d/go-server stop Redhat安装: 预先下载好rpm包 rpm -i go-server-${version}.noarch.rpm 服务状态查看,启动,停止 相关安装文件: /var/lib/go-server 二进制文件,数据库文件 /etc/go pipeline配置文件/var/log/go-se...阅读全文

博文 2014-12-23 17:00:08 biheyu

go mobile 得生命周期事件

生命周期事件,就是状态从一个阶段切换成另外一个状态时触发的事件。所以我们可以看到 lifecycle.Event 的定义如下: 生命周期一共有下面四个阶段: lifecycle.StageDead, lifecycle.StageAlive, lifecycle.StageVisible, lifecycle.StageFocused, 具体定义如下图: 一个可以用来分析各个事件先后顺序的代码: // +build darwin linux package main import "log" import "golang.org/x/mobile/app" import "golang.org/x/mobile/event/lifecycle" import "golang.org/x/mo...阅读全文

go的学习记录(二)--- 数组与数组切片

在go语言的学习中,少不了接触的就是数组和数组切片,并且这两者的使用也是非常频繁的。因此如果不能进行很好的理解,或许很容易犯错。那么在go中,数组和数组切片都有什么特点,又是怎么声明赋值的,如何使用的呢,下面我就自己的理解总结一下,个人总结可能不全或者有错,望指点。 一、数组和数组切片的特点 数组是什么就不用多说了,作为开发者,这是经常会用到的东西,相信大家都有自己的理解。现在先总结一下数组的特点 1. 数组的长度在定义之后就不可被更改 2. 数组声明时的长度必须为常量或常量表达式,即可以在编译器确定长度,分配内存 3. 数组的下标从0开始,最后一个元素的下标为(长度-1),即在go中可以写为 len(arr)-1 4. go语言的数组是值类型,在作为参数传递时会做数组的复制操作。因此作为参...阅读全文

博文 2016-01-27 13:00:00 haust_wang

分布式文件存储gdfs

# gdfs 分布式文件系统 #### 介绍 gdfs分布式文件服务基于GO语言,前端页面使用vue-admin,主要用于小型文件存储。 它使用了带权重RoundRobin算法实现的负载均衡,使用技术框架gin+jwt+viper+gorm...等. #### 软件架构 网关和存储服务关系,如下图所示。 网关下一级是节点,每个节点下可以有N个服务,服务之间数据互相同步,互相备份。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/1028/170052_eca3d8a8_4814434.png "gdfs架构.png") #### 网关服务介绍: 主要功能 ...阅读全文

开源项目 2021-11-01 09:49:09

剖析使Go语言高效的5个特性(1/5): 变量的处理和存储

翻译原文链接 转帖/转载请注明出处 英文原文链接 发表于2014/06/07 我最近受邀在Gocon会议上做了一个演讲。Gocon是一个非常棒的,每半年一次在日本东京举行的Go会议。Gocon 2014是完全由社区举办的一整天活动。它包括了培训以及一个下午的演讲。演讲的主题主要围绕在Go语言在线上环境中的应用。 以下是我的演讲稿。原始的演讲稿强调慢而清楚的演讲,所以我做了略微的修改使得它更具可读性。 这里我要感谢Bill Kennedy,Minux Ma,特别是Josh Bleecher Snyder。Josh为准备这次演讲给予了很多的帮助。 下午好,我的名字叫David。我很高兴今天能够参加Gocon会议。我两年前就打算要参加这个会议,非常感谢会议组织者给我这个演讲的机会。我想让我的演讲以...阅读全文

博文 2017-08-13 05:34:57 曼托斯

分布式文件系统JuiceFS

## JuiceFS JuiceFS 是一款高性能 POSIX 文件系统,针对云原生环境特别优化设计,在 GNU Affero General Public License v3.0 开源协议下发布。使用 JuiceFS 存储数据,数据本身会被持久化在对象存储(例如,Amazon S3),而数据所对应的元数据可以根据场景需求被持久化在 Redis、MySQL、SQLite 等多种数据库引擎中。JuiceFS 可以简单便捷的将海量云存储直接接入已投入生产环境的大数据、机器学习、人工智能以及各种应用平台,无需修改代码即可像使用本地存储一样高效使用海量云端存储。 **项目地址**: https://github.com/juicedata/juicefs 📺 **视频**: [什...阅读全文

Go语言中的运算符

1 概述 Go语言提供了,算术,关系,逻辑,位,指针,赋值运算符。本篇整体说明一下。 2 算术运算 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 几个细节,需要留意一下。 整数与浮点数进行运算,会将整数转化为浮点数,再运算。 两个整数相除,结果是整数,取整数部分。5/3 结果会是 1。 求余,如果被除数或除数存在负数,那么余数与被除数保持一致。此处是求余不是取模。 ++/--,不区分前后,只有变量后的语法,就是 v++。同时++/--构成语句而不是表达式,意味着不能直接赋值。 3 字符串连接运算 + +运算符,也可以完成字符串的连接运算。 "Hello" + " " + "Hank!" 4 关系运算 == 检查两个值是否相等 != 检查两个值是否不相等 \> 检查...阅读全文

博文 2018-10-28 07:35:08 小韩说课

西天取经尚需要一个团队,App开发亦是如此

“将一切不可能变为可能!” 这正是互联网赋予这个时代的定义。 在移动互联网的发展进程中,app成就了手机在智能设备中的霸主地位,手机也同样成就了app无可限量的商业价值! 现如今,app已成为人们日常生活中再寻常不过的一种工具,在享受app带来便捷服务的同时,可能大家并不会关注开发一款app到底有多难,但对于很多移动创业公司,如何让业务能够快速落地,迈出产品到运营的第一步,却成为很多创业者头疼的问题。 那么,到底需要具备什么样的能力才能开发一款app呐?柚子君通过本文为你一一揭晓! 售前工程师 在大部分软件服务公司,每个项目都配有售前工程师的岗位,在立项时,需要具备一份完整的开发需求文档,前期准备的越充分,后续问题出现的几率就越少。 【具备技能】对不同产品的功能、技术实现、开发周期、行业技术...阅读全文

博文 2018-08-24 11:35:52 APICloud

10年大数据架构师:日访问百亿级,如何架构并优化日志系统?

日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台为例,双 11 大促活动期间,它们可能每小时的日志数量达到百亿规模,海量的日志数据暴增,随之给技术团队带来严峻的挑战。 本文将从海量日志系统在优化、部署、监控方向如何更适应业务的需求入手,重点从多种日志系统的架构设计对比;后续调优过程:横向扩展与纵向扩展,分集群,数据分治,重写数据链路等实际现象与问题展开。日志系统架构基准 有过项目开发经验的朋友都知道:从平台的最初搭建到实现核心业务,都需要有日志平台为各种业务保驾护航。 如上图所示,对于一个简单的日志应用场景,通常会准备 master/slave 两个应用。我们只需运行一个 Shell 脚本,便可查看是否存在错误信息。随着业务复杂度的增加,应用场景也会变得复杂。虽然监控系统能够显示...阅读全文

博文 2018-08-17 10:34:57 养码场

Go语言中的数组(array)和数组切片(slice)

在Go语言中,数组长度在定义后就不可更改,在声明时长度可以为一个常量或者一个常量表达式(常量表达式是指在编译期即可计算结果的表达式)。数组的长度是该数组类型的一个内置常量,可以用Go语言的内置函数len()来获取。 数组的长度在定义后无法再次修改;数组是值类型,每次传递都产生一份副本。 初看起来数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是一个指针。数组切片的数据结构可以抽象为以下3个变量: 一个指向原生数组的指针 数组切片中元素的个数 数组切片已分配的存储空间 从底层实现的角度看,数组切片实际上仍然使用数组来管理元素,基于数组,数组切片添加了一系列管理功能,可以随时动态扩充存放空间,并且可以被随意传递,而不会导致所管理的元素被复制。 下面用 reflect 包来反射...阅读全文

博文 2014-10-28 10:44:53 ghj1976

Golang goroutine的生命周期及其控制权

开了goroutine如何才能退出呢?如何控制它并了解其生命周期?这里包括主动退出和外部的被动退出 一. 如何退出goroutine? 1. 主动自己退出: 经过多少时间后主动退出 (channel) func main() { var wg sync.WaitGroup quit := time.Tick(time.Second * 2) // 给个定时器 wg.Add(1) go func() { defer wg.Done() <-quit fmt.Println("over goroutine") return }() wg.Wait() fmt.Println("over all") } 通过context通知goroutine退出: func main() { var wg sy...阅读全文

博文 2018-11-24 19:34:40 Gopherzhang

Mirantis决定采用Kubernetes作为 Openstack的生命周期管理工具

Mirantis是OpenStack的主要贡献者,今天他宣布将使用Kubernetes作为底层编排引擎重写其私有云平台。我们认为这是推进OpenStack和Kubernetes 社区伟大的一步。 Openstack的用户将会享受到Kubernetes带来的巨大的效率、可管理性与弹性的提升,同时他们的应用将能够使用更多的云原生模式。 在一个平台上管理基于容器与虚拟机的应用也让Kubernetes社区更加有信心。 ## 云原生路径 谷歌花了十几年时间开发、应用和提炼云原生计算的原则。云原生应用是: ● 容器封装,应用程序是由封装好的、可在多种环境重用的单元组成的 ● 动态调度,提高基础设施的效率和降低操作开销 ● 基于微服务,松耦合的组件大大...阅读全文

运维架构服务监控Open-Falcon

摘要:监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。一、 介绍监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的...阅读全文

博文 2017-10-12 08:38:14 肆虐的悲傷

Go 1.7 中值得关注的几个变化

零、从Release Cycle说起 从Go 1.3版本开始,Golang核心开发Team的版本开发周期逐渐稳定下来。经过 Go 1.4 、 Go1.5 和 Go 1.6 的实践,大神 Russ Cox 在 Go wiki 上大致定义了 Go Release Cycle 的一般流程: 半年一个major release版本。 发布流程启动时间:每年8月1日和次年2月1日(真正发布日期有可能是这个日子,也可能延后几天)。 半年的周期中,前三个月是Active Development,then 功能冻结(大约在11月1日和次年的5月1日)。接下来的三个月为test和polish。 下一个版本的启动计划时间:7月15日和1月15日,版本计划期持续15天,包括讨论这个major版本中要实现的主要功能...阅读全文

博文 2016-08-18 04:00:03 wming0523

Logrus源码阅读(2)--logrus生命周期

上一篇介绍logrus的基本用法, 本篇文章介绍logrus的整个生命周期 func main() { log.Info("hello logrus") } 从上面这个简单的例子, 追踪logrus的整个生命周期 初始化 // exported.go:L108 func Info(args ...interface{}) { std.Info(args...) } Info函数的参数是一个可变参数, 接收任意类型的参数 // exported.go:L11 var ( // std is the name of the standard logger in stdlib `log` std = New() ) func StandardLogger() *Logger { return st...阅读全文

博文 2019-10-09 22:32:44 aside section ._1OhGeD

[易学易懂系列|rustlang语言|零基础|快速入门|(6)]

有意思的基础知识 我们现在回过头来看看,一些基础知识。 因为理解了前面的重要概念:所有权,借用,生命周期。 我们现在看基础知识就很简单了。 先看变量定义: let a = true;//rust不要求显式定义类型,编译器女王自动会根据上下文和用途,来自动定义类型,这里 //是:bool let b: bool = true;//如果显式定义类型,则通过:分号+类型 let (x, y) = (1, 2); let mut z = 5; z = 6; 在rust,这些变量定义叫变量绑定。 为什么这样说?因为rust的变量,默认是不可变的。 如果,要变成可变变量,要用关键字:mut。 那如果是常量呢? 看代码: 常量(const): const N: i32 = 5; 静态变量(static):...阅读全文