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

Docker 管理工具lazydocker

lazydocker,一个简单的 docker 和 docker-compose 终端用户界面,用更懒惰的方式来管理所有的 docker。 其界面采用 [gocui](https://www.oschina.net/p/gocui) 开发。 #### **特点** * 可以清楚地查看 docker 或 docker-compose 容器环境的状态 * 查看容器/服务的日志 * 查看容器度量的 ascii 图 * 可以自定义图来测量任何想要测量的 * 重新启动、移除、重建容器和服务 * 查看给定图像的祖先层 * 清理占用磁盘空间的容器、图像或容量 ![image](https://static.oschina.net/uploads/space/2019/0630/1...阅读全文

Go 性能优化技巧 3/10

内置 map 类型是必须的。首先,该类型使用频率很高;其次,可借助 runtime 实现深层次优化(比如说字符串转换,以及 GC 扫描等)。可尽管如此,也不意味着万事大吉,依旧有很多需特别注意的地方。 ### 1、预设容量 map 会按需扩张,但须付出数据拷贝和重新哈希成本。如有可能,应尽可能预设足够容量空间,避免此类行为发生。 ![预设容量](http://studygolang.qiniudn.com/160531/ca4949649cd8bc36851fd04a04e48e8c.jpg) ![结果](http://studygolang.qiniudn.com/160531/c24756b385183e7c120d3d6a83e267a4.jpg) 从结果看...阅读全文

go语言内存分配之TCMalloc

tcmalloc tcmalloc 优点 速度更快,比glicbc 2.3 快 占用更少的内存空间,8倍8-byte的对象内存分配中占用大约8N*1.01byte的头空间,而ptmalloc则会占用16N*byte的头空间 使用 在程序中只需使用“-ltmalloc”连接标识将其链接到程序中 综述 TCMalloc为每一个线程分配本地缓存,以满足小对象分配的需求,当需要时候,对象从中央数据结构移动到本地缓存,周期性的垃圾回收则将内存从各个线程的本地缓存收回中央数据结构。 小对象分配 每个小对象映射到170个不同的大小空间。每个空间间隔8byte,0-8byte(8),8-24byte(16),24-48byte(24),最大间隔为256byte。大对象和小对象的界限为32kb。每个线程的缓存...阅读全文

博文 2016-04-16 19:00:02 tanghui_lin

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

golang之slice和map比较

最近在看golang的时候发现golang的map类型的元素比较特殊,也就是不能够取地址。因为map实际上是一张hash表,当map元素数量增加的时候,当前分配的内存不足以存放新的数据,就会重新分配更大的内存空间,并把原有的数据迁移过来。因此以前的地址保存的就不是当前map中的元素了。思考了一下,slice应该也是类似的但是slice是允许取地址操作的,因此做了一个小验证:s1 := make([]string, 1, 1) s1[0] = "a" a := &s1[0] *a = "c" fmt.Println(s1)//output: [c]s1 := make([]string, 1, 1) s1[0] = "a" a := &s1[0] s1 = append(s1, "b") *a...阅读全文

博文 2018-11-03 01:34:44 pysta

golang ioutil.ReadAll引发的内存异常

ioutil.ReadAll 是一个常用的数据读取方法,经常用来读取http请求的response数据,或者读取文件数据。 demo1: http func handle(r *http.Request, w http.ResponseWriter) { file, err := os.Open("tmp.zip") // error checks... b, err := ioutil.ReadAll(file) // error checks fmt.FPrintf(w, b) } demo2 : 模拟shell md5sum 获取文件MD5 func genmd5(file string) string{ cf, err := os.Open(file) //err check def...阅读全文

博文 2020-01-17 01:32:46 Cargador

【预警】新型勒索病毒来袭,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

MongoDB 3.0 新特性【转】

本文来自:http://www.open-open.com/lib/view/open1427078982824.html#_label3 更多信息见官网: http://docs.mongodb.org/manual/release-notes/3.0/ 参考文章: 测试:http://www.mongoing.com/archives/862 http://www.mongoing.com/benchmark_3_0 配置:http://www.mongoing.com/config_3_0 学习:http://www.mongoing.com/ 迁移:https://github.com/xbsura/mongo-migrate 引言 在历经版本号修改(2.8版本直接跳到3.0版本)和...阅读全文

博文 2015-08-07 03:00:00 zhoujinyi

[GoLang学习总结]Go语言中的Slice

概念 Slice切片是对底层数组Array的封装,在内存中的存储本质就是数组,体现为连续的内存块,Go语言中的数组定义之后,长度就已经固定了,在使用过程中并不能改变其长度,而Slice就可以看做一个长度可变的数组进行使用,最为关键的,是数组在使用的过程中都是值传递,将一个数组赋值给一个新变量或作为方法参数传递时,是将源数组在内存中完全复制了一份,而不是引用源数组在内存中的地址,为了满足内存空间的复用和数组元素的值的一致性的应用需求,Slice出现了,每个Slice都是都源数组在内存中的地址的一个引用,源数组可以衍生出多个Slice,Slice也可以继续衍生Slice,而内存中,始终只有源数组,当然,也有例外,后边再说。 用法 1.Slice的定义 Slice可以通过两种方式定义,一种是从源数...阅读全文

博文 2015-06-17 20:23:36 tiger435

Docker-Slim给Images一个苗条身姿

引言 我们通过Dockerfile或者docker build生成的Images往往都很大,对于磁盘空间的占用消耗什么大。因此,docker-slim的出现能够帮助我们精简docker image的体积。 1 docker-slim的介绍: docker-slime需要借助golang环境(推荐使用golang1.10+),点击访问docker-slim官网。 1.1 golang环境的安装配置: cd /opt wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz tar -xzvf go1.10.linux-amd64.tar.gz mkdir -p /usr/local/go cp -rfv /opt/go/* /usr/loc...阅读全文

博文 2018-06-20 16:34:46 cooling2016

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

Go语言中复合的数据类型

数组 数组是同一种数据类型元素的集合。在Go语言中,数组从声明时就确定,可以对其成员进行修改,但是不可以修改数组的大小。 数组的定义 数组的基本定义语法如下: var 数组名 [数组大小]类型 比如定义一个长度为3,类型是int的数组: var a [3]int 注意:长度必须是常量,它是数组类型的一部分,一旦定义,长度不能改变。 数组的初始化 (1)、初始化数组时可以使用初始化列表来设置数组元素的值。 func main() { var testArray [3]int //数组会初始化为int类型的零值 var numArray = [3]int{1, 2} //使用指定的初始值完成初始化 var cityArray = [3]string{"北京", "上海", "深圳"} //使用指...阅读全文

博文 2020-03-16 01:33:16 Uncle_Joker

程序员怎么会不知道 C10K 问题呢?

今天简单说下C10K 的问题,关于这个问题Ruby 的作者松本行弘在《代码的未来》- 云计算时代的编程 一章中有详细的阐述, 有兴趣的同学可以直接去购买。本人已经在某淘,购买一本 哈哈哈~~~ 在做技术规划和架构设计的时候,不要做过度设计,如果咱们只有一万用户,先别去操百万用户在线的心。淘宝那么大,也是从 Apache、PHP、MySql 发展起来的, 没人能预见到淘宝能发展到这样一个规模,一旦发展起来,业务的爆发增长会驱动技术的迅速发展,在业务还不及格的时候,不用为技术的未来担心。 这个思路在业务领域不会有太大的问题,因为需求的变化实在太快了,需要实时去应付。但在底层技术的发展上,我们就有可能遇到短视的报复,比如:这个数据长度不会超过16位吧,这个程序不可能使用到2000年吧。于是就有了千...阅读全文

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

区块链开发工程师要干什么?如何成为一名合格的区块链工程师,其必备技能有掌握加密技术、共识算法、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圣经-学习笔记入门bufio.Writer

Go圣经-学习笔记入门bufio.Scanner bufio标准库中的Reader和Writer,最好用于文件IO操作,把数据先缓存到内存中,然后再整体做文件IO操作,尽最大可能地减少磁盘IO,但是内存缓冲区的大小要合理设置,默认大小是4096个字节。 bufio.Writer使用 bufio标准库中的Writer提供的方法列表 type Writer struct { err error buf []byte n int wr io.Writer } // 实例化bufio.Writer, 实例化是会直接分配大小为len(w.buf)大小的内存空间,Writer.n表示内存缓冲区已经存放的字节大小 func NewWriter(w io.Writer) *Writer func NewWr...阅读全文

博文 2017-10-22 00:31:17 cdh0805010

Go实践-文件系统操作

由于自己的PC笔记本,用的是可怜的120G SSD硬盘,相对于现在浩瀚无比的WIN7,VS ,硬盘空间少的可怜,经常导致硬盘空间不足。没办法,每次都人肉清除临时文件比如 VS编译时,生成的.obj文件 连接时生成的.pdb文件还有就是,VS2010引入的为了提高智能提示而生成的.sdf文件。 所以想到用程序自动实现这个功能,刚好正在学习go语言,全当练手了。 程序很简单,就是从某个目录递归开始,删除某些类型的文件 //My first go little program that clean dirty files for vs package main import ( "fmt" "os" "path" "strings" ) var FileTypes2Clean = []string...阅读全文

博文 2015-06-18 09:09:15 simonzhao0536

golang的指针类型,unsafe.Pointer类型和uintptr类型的区别

一,区别 1,指针类型 golang支持指针类型,指针类型的变量存的是一个内存地址,这个地址指向的内存空间存的才是一个具体的值。 比如int,int32,A(自定义结构体类型),string等,都是指针类型。 golang的指针类型和c/c++的指针类型基本一样,但是多了几个限制: 1,int,int32等不同的指针类型不能相互转化. 2,指针类型不支持c/c++这样的指针运算。 2,unsafe.Pointer类型 这个类型比较重要,它是实现定位和读写的内存的基础。go runtime大量使用它。官方解释是: Pointer represents a pointer to an arbitrary type. There are four special operations availa...阅读全文

博文 2020-05-02 23:33:10 舒小贱

Go中使用Seed得到重复随机数的问题

1. 重复的随机数 废话不多说,首先我们来看使用seed的一个很神奇的现象。 func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now().Unix()) fmt.Println(rand.Intn(100)) } } // 结果如下 // 90 // 90 // 90 // 90 // 90 复制代码可能不熟悉seed用法的看到这里会很疑惑,我不是都用了seed吗?为何我随机出来的数字都是一样的?不应该每次都不一样吗? 可能会有人说是你数据的样本空间太小了,OK,我们加大样本空间到10w再试试。 func main() { for i := 0; i < 5; i++ { rand.Seed(time.Now().Unix()) f...阅读全文

博文 2019-10-08 20:34:28 SH的全栈笔记

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

英美重视IoT安全,漏洞披露和安全人才培养

摘要: 美参议员提出《物联网网络安全改善法案》,国政府推出“网络学校计划”,投资2000万英镑培养网络安全人才,美国司法部发布框架 引导企业建立“漏洞披露计划”,美国大选投票机在ebay上出售包含65万选民个人信息。 【全球政策趋势】 美参议员提出《物联网网络安全改善法案》,提高政府设备采购安全门槛。点击查看原文 概要:近日,美国数位参议院议员提出《物联网网络安全改善法案》,希望立法规范联邦政府采购的物联网(以下简称IoT)设备的安全标准,。该法案要求IoT厂商保证出售给政府的装置可修补漏洞,不可使用固定密码,杜绝已知安全漏洞;要求使用IoT的部门清点装置并建立安全要求。 点评:参议员表示,希望通过政府采购“...阅读全文

剖析使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 📺 **视频**: [什...阅读全文

使用 Golang 操作 Linux Namespaces

Linux 命名空间简介 Linux Namespaces(Linux 命名空间)机制提供了进程使用操作系统资源时的隔离方式,是基于内核实现轻量级虚拟化(容器化,例如 docker)的实现基础。 具体来说就是当我们创建一个进程时,可以给进程设置 flag 组合来构建进程的命名空间,处于不同命名空间的进程是相互隔离的。 命名空间分类 目前我们可以设置如下几种命名空间,它们分别从不同的资源纬度进行隔离。 CLONE_NEWPID 该标识用于创建一个新的 PID 命名空间,新进程将成为命名空间里的第一个进程。 一个 PID 命名空间为进程提供了一个独立的 PID 环境,其内部的 PID 将从 1 开始, 在该命名空间内创建的进程都将产生一个在该命名空间内独立的 PID。后续在该命名空间创建的进程都...阅读全文

Go语言中的运算符

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

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

初识golang之数组,slice,map学习

数组: 定义方式:var arr [n]type,n表示数组的长度,type表示存储元素的类型。定义好后,可以使用arr[0] = 42,这样指定下标来进行数组的读取和赋值。 注意:在go中长度也是类型的一部分,因此[3]int和[5]int是不同类型的。 go中数组不可以改变长度,数组之间的赋值是值的拷贝赋值,即当把一个数组作为一个参数传人函数的时候,传入的其实是数组的备份。arr := [10]int{1,2,5:6},da := [2][4]int{[4]int{1,2,3,4}, [4]int{5,6,7,8} },如果内部的元素和外部的一样,那么声明可以简化,直接忽略内部的类型 ea := [2][4]int{{1,2,3,4},{5,6,7,8}},如果不知道数组的个数,而是按照...阅读全文

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

MongoDB 3.0新增特性一览

插件式存储引擎APIMongoDB3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MySQL的设计理念。目前除了早期的MMAP存储引擎外,WiredTiger和RocksDB均已完成了对MongoDB的支持,前者更是在被MongoDB公司收购后更是直接引入到了MongoDB3.0版本中。插件式存储引擎API的引入为MongoDB丰富自己武器库以处理更多不同类型的业务提供了无限可能,内存存储引擎、事务存储引擎甚至Hadoop在未来都有可能接入进来。WiredTiger存储引擎如果说插件式存储引擎API为MongoDB3.0打造了一个武器库,那么WiredTiger绝对是武器库中第一枚也是最重要的一枚重磅炸弹。因为MMAP存储引擎自身的天然...阅读全文

博文 2015-07-28 23:00:01 散关清渭

golang 指针

package mainimport "fmt"//============================================//指针基本概念//指针:就是地址,指向内存地址空间,这个地址往往是在内存中存储的另一个变量的值的起始位置//指针变量:即存储地址的变量//go指针特点//1,默认值:nil//2,&取变量地址//3,*取目标对象的值//4,直接用.来访问成员/*func main() {//代码段01-解释&,*号的应用var num = 100 //声明int 类型numfmt.Printf("&a=%p\n", &num) //输出:&a=0xc042050080//代码段02-声明指针类型var p *int=nilp=&numfmt.Printf("a=%d,...阅读全文

博文 2018-08-12 21:35:12 中华虎

空结构体struct{}解析

本篇文章转自David的"The empty struct"一文,原文地址链接是http://dave.cheney.net/2014/03/25/the-empty-struct 。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 **Introduction** 这篇文章详细介绍了我最喜欢的Go数据类型,空结构体--struct{}。 空结构体是没有位段的结构体,以下是空结构体的一些例子: ``` type Q struct{} var q struct{} ``` 但是如果一个就结...阅读全文

Go语言内存分配机制

前言: 本文是学习<> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处! Go语言有两种内存分配机制 , 分别是内置函数 new() 和make(). - new() - 定义: func new(Type) * Type - 返回值是一个内存块指针 - new() 是一个内置函数, 不同于其他语言中的new操作符, 它只将内存清零, 而不是初始化内存. - make() - 定义: func make(Type, size IntegerType) Type - 在调用make() 函数时, Type必须是引用类型 (Slice , Map 或 Channel), Intege...阅读全文

boltdb 源码分析-MVCC/持久化-3

boltdb 持久化 在前面简介部分已经描述了一部分持久化相关的内容 boltdb采用单个文件来将数据存储在磁盘上,该文件的前4个page是固定的: 第1个page为meta 第2个page为meta 第3个page是freelist,存储了一个int数组, 第4个page是leaf page page page是boltdb持久化时,与磁盘相关的数据结构。page的大小采用操作系统内存页的大小,即getpagesize系统调用 的返回值,通常是4k大小。 每个page开始的几个字节存储的是page 的raw data: type page struct { id pgid // page的序号 flags uint16 // page的类型,有branchPageFlag/leafPage...阅读全文

Golang 语言中的 Slice

概念 Slice切片是对底层数组Array的封装,在内存中的存储本质就是数组,体现为连续的内存块,Go语言中的数组定义之后,长度就已经固定了,在使用过程中并不能改变其长度,而Slice就可以看做一个长度可变的数组进行使用,最为关键的,是数组在使用的过程中都是值传递,将一个数组赋值给一个新变量或作为方法参数传递时,是将源数组在内存中完全复制了一份,而不是引用源数组在内存中的地址,为了满足内存空间的复用和数组元素的值的一致性的应用需求,Slice出现了,每个Slice都是都源数组在内存中的地址的一个引用,源数组可以衍生出多个Slice,Slice也可以继续衍生Slice,而内存中,始终只有源数组,当然,也有例外,后边再说。 用法 1.Slice的定义 Slice可以通过两种方式定义,一种是从源数...阅读全文

切片的内部实现

最近比较忙也没有时间打理专栏,今天决定写一个关于切片的内部实现。 ---- 内部实现 ---- Go中的切片是一种数据结构,切片可以按照自己的方式增长或者减短,切片是一个很小的结构,在我的64位电脑上只有24字节,切片有三个字段如下: type slice struct { array unsafe.Pointer len int cap int } 阅读全文

博文 2017-08-10 00:54:32 诺唯

Golang 数据结构之【4.7环形队列】

package main import ( "errors" "fmt" ) //循环队列 const ( MaxSize int = 20 // 存储空间初始分配量 ) type QElemType int // QElemType类型根据实际情况而定,这里假设为int // 循环队列的顺序存储结构 type SqQueue struct { data [MaxSize]QElemType front int //头指针 rear int //尾指针 } //初始化队列 func (q *SqQueue) InitQueue() { q.front = 0 q.rear = 0 } //清空队列 func (q *SqQueue) ClearQueue() { q.front = 0 q....阅读全文

博文 2019-05-17 06:34:40 JiBadBoy

Kingbloc Pear是为中小企业云服务系统

Kingbloc Pear是什么:Kingbloc Pear是为中小企业云服务系统,应用系统,计算型,管理系统,数据处理平台准备的开发环境。系统整合企业可用案例及开发文档。Kingbloc Pear企业云系统开发平台特点:1 云计算领域主流开发语言golang,语法简洁易懂,部署方便,后期维护方便2 编译后不易被反编译,3 采用Nsq亿万级别消息分发工具,4 免费的开源数据库:mysql,5 高效,简洁的XORM框架,6 最新最靠谱的前端框架angular5 ( 相对与其它流行框架不需要各种额外集成,额外的扩展,整体架构需要提前精心规划)7 全新的前端组件库 ionic38 在大数据展示领域,灵活可控的D3js,和免费的图表展示库echartsjs9 PC 和 H5移动展示一套组件库10 可...阅读全文

go中的引用类型

首先,go中的赋值,都是值传递 a := 1 b := a x := Struct{} y := x 复制代码他们都是在内存中有独立空间的,也就是copy的过程,所以这里对y的某个属性的改动,并不会影响x 那么我们要让两个变量指向同一个内存怎么办呢,可以使用引用类型: y := &x 复制代码这时候,y的类型是*Struct,这时候我们可以对y进行修改,修改完之后,x也会发现变化,因为y现在是一个引用类型,他指向的是x结构体所在的内存 我们可以通过: y.variable = xxx 复制代码来直接调用引用类型的结构体赋值,但是要注意的是,这是go的语法糖,他只是帮助我们简化了通过指针来获取实际内存的过程,完整的写法应该是这样的: (*y).variable = xxx 复制代码*y是对指针...阅读全文

以太坊源码分析—账户的管理

前言 以太坊是一个巨大的状态机,在网络中,每一个全节点都保存着以太坊状态机的全部历史,只要愿意,我们可以查询到任何时刻的状态(黄皮书中 World State),其中账户状态便是其中的一部分,这部分功能由主要由state包提供 基本概念 账户地址 在以太坊中,无论是外部账户还是合约账户,都以一个160bit的数组表示地址,它是由特定椭圆曲线上的一个点表示的公钥经过Keccak Hash算法截取而来。 外部账户和合约账户的区别 账户内容 以太坊中,账户用 Account 表示 type Account struct { Nonce uint64 Balance *big.Int Root common.Hash CodeHash []byte } Nonce:账户发起交易的次数 Balance...阅读全文

博文 2018-11-13 19:34:40 187J3X1

boltdb 源码分析-简介-0

boltdb boltdb是一款golang实现的嵌入式K-V存储引擎。在boltdb的源码中的doc.go 对其有一个简要的说明。 其提供事务、ACID语言、无锁MVCC支持。数据提供零拷贝、B-TREE索引。其主要设计源于Howard Chu的LMDB。 持久化 boltdb采用一个单独的文件作为持久化存储。其将不同的文件部分划分为不同的page,不同的page 存储不同类型的数据(meta、key、value)等。当经过反复的增删改查后,文件中可能出现没有数据的 部分。此时boltdb并不打算搬移数据、截断文件来将多余的空间返还给操作系统。而是将这些部分, 加入内部的FreeList来维护,当有新的数据写入时,复用这些空间。因此从用户视角来看,boltdb 的持久化文件只会增大,而不会...阅读全文

Go语言之数组/Slice篇

自“灰子学技术”公众号原文链接:https://mp.weixin.qq.com/s/UDsbIcQMl57ROgBij8xxzQ一、数组的语法介绍Go中的数组与C++中的数组含义并无不同,表示的都是具有相同唯一数据类型的一组已经编号并且长度固定的数组项序列。```var varName [SIZE]type // 备注:该格式是声明格式,变量名 + 数组大小 + 数据类型```数组初始化:数组的初始化基本上是以下例子中的几种格式```package mainimport ("fmt")func main() { var name0s [2]string = [2]string{"hello","shanghai"} var names = [...]string{"hello", "wor...阅读全文

博文 2019-09-06 18:25:48 ZhDavis

golang 生成二维码海报

生成带头像的二维码 import ( "errors" "fmt" "github.com/nfnt/resize" "github.com/skip2/go-qrcode" "image" "image/draw" "image/png" "os" ) var err error func createAvatar() (image.Image, error) { var ( bgImg image.Image offset image.Point avatarFile *os.File avatarImg image.Image ) bgImg, err = createQrCode("http://www.baidu.com") if err != nil { fmt.Println(...阅读全文

URLOS是一款Linux容器云管理面板

URLOS软件介绍 URLOS是一个应用容器管理软件 URLOS是一个Docker管理面板,它把服务器端软件应用的安装行为简化到极致,堪称服务器端的应用宝,具有集群管理、自动故障转移、自动负载均衡等高级功能,可轻易搭建7*24小时在线的网站运行环境。 借助URLOS可轻松让网站在拥有多个主机的集群上运行,单机故障不会导致网站停止。 URLOS官方网站 https://www.urlos.com URLOS演示 演示网址:http://demo.urlos.com:9968(用户名和密码使用默认的urlos,填写验证码后即可登录) URLOS具备以下特征 |-- 安全: 基于Docker容器技术,应用均运行在具有隔离功能的容器中,如果某个应用出现问题(包括假死、真死、漏洞、后门等问题),并不会...阅读全文

博文 2018-11-20 17:34:46 低调的维斯