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

golang源码解读之map

golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。 详细的实现后续补充,这里先做个备忘。 在iterate整个map的时候,使用delete是安全的。这跟c++是不一样的,c++在delete的时候,会导致整棵树发生变化,所以不能在迭代的时候删除元素。 那为什么golang的map是安全的呢,从源码来看,golang的map使用了桶的概念,元素是被hash到桶存储,每个桶预设是存储八个kv,而且在头部有一个uint8 tophash[8]的结构,存储每个key的高八位(即hash(key) » (64 - 8)),如果该位置未被放置元素,则有一个特殊的标志Empty。在插入删除的时候,首先会比较该uint8跟hash(key)是否相等。当然,桶还利...阅读全文

博文 2014-10-04 19:26:15 weijiaen

golang--监控goroutine异常退出

在golang中,我们可以很轻易产生数以万计的goroutine,不过这也带来了麻烦:在运行中某一个goroutine异常退出,怎么办? 在erlang中,有link原语,2个进程可以链接在一起,一个在异常退出的时候,向另一个进程呼喊崩溃的原因,然后由另一个进程处理这些信号,包括是否重启这个进程。在这方面,erlang的确做得很好,估计以后这个特性会在golang中得到实现。 由此得到启发,我写了一个简单的程序,监控goroutine异常退出。 package main import ( "log" "runtime" "math/rand" "time" ) type message struct { normal bool //true means exit normal, otherw...阅读全文

博文 2014-10-04 19:26:02 getong

golang文件传输服务

续上篇,本篇介绍一个完整的golang文件传输服务器。 完整的代码可以看服务器,客户端 网络使用的框架如上篇介绍,这里就不再复述. 首先定义3个命令码: const ( request_file = 1 file_size = 2 transfering = 3 ) request_file用于请求文件传输,附带的命令参数是文件key. file_size用于通告客户端文件的大小. transfering用于传输文件内容,附带参数是文件内容的二进制数据. 服务器的文件配置示例 ../learnyouhaskell.pdf=haskell ../golang.1.1.2.chm=golang ../NodeJS.pdf=NodeJS 上面的文件配置了3个文件可供传输=左边是文件路径,右边是请求...阅读全文

博文 2014-10-04 19:25:59 sniperHW

【go语言】Goroutines 并发模式(一)

前言 由于前一阶段实习中接到的项目的告一段落,不知不觉便多出了许多空余的时间,于是就想总结一下最近因为个人兴趣而学习的一些东西。从这篇文章开始以及后面陆续的几篇关于GO语言的文章,均是博主最近对GO语言学习过程中的一些感悟、总结,类似于学习笔记的东西。记录下来并整理成博客一为对学习的知识做一个整理,二为分享出来给大家(因为国内关于GO语言的中文资料比较少),由于博主能力和知识有限,难免有所靡误,还望勘正。 由于Go最近一系列出色的表现,从一开始Go便紧紧地吸引住了我的眼球。类似于Erlang、Scala等语言,Go也是天生为并发而设计的语言,Go有着许多在原生层面对并发编程进行支持的优秀特性,比如大名鼎鼎的Goroutines、Channels、Select等原生特性。那么废话不多说,这一篇...阅读全文

博文 2014-10-04 19:26:21 何良瑞Nyanko君

被阿里云关停服务器始末

记录下最近使用阿里云服务器比较难受的一件事情。 背景:当前公司的业务服务是部署在阿里云上,大概 40+ ECS ,医疗行业。之前一直有一些不严重的报警,比如 OSS 服务器有一些违规图片呀(私密咨询,你懂的),又比如被检测到对外攻击(双手保证没干过非法的事情),已阻断该服务器对其它服务器端口(UDP:ALL)的访问等。大概4月底收到一封邮件,说是有一台服务器发现存在大量违法违规类内容,要求24小时内整改,逾期将关停服务器,因为确实没有做违法的事情,加上马上五一小长假就没有及时跟进,结果悲催了,五一回来第一天正写着代码,突然连不上了,一脸懵,一查才知道服务器被关停了。 image.png 刚开始还没意识到严重性,想着要是整改完成了应该再开通就行了吧,因为只是开发的机器,没有造成什么影响。 而事...阅读全文

博文 2019-05-10 17:35:15 epicmr

收集Go语言技术文档,欢迎提供线索!!

各位好! 我们最近计划对Go语言的技术文档进行一个系统的收集和整理,现在向大家公开征集,希望大家推荐一些不错的Go语言技术文档,中英文皆可。 我这里先列一些,欢迎补充。 GO官方文档地址 http://golang.org/doc/ 《the way to GO》的中文版:《go入门指南》https://github.com/Unknwon/the-way-to-go_ZH_CN GO语言(FAQ) 英文 http://golang.org/doc/faq 《Go Web 编程》开源图书 https://github.com/astaxie/build-web-application-with-golang 《学习Go语言》中文版 http://mi...阅读全文

阴历阳历的相互转换(支持1900~2100年)

背景 最近做到一个项目, 需要阴历与阳历的相互转换, 网上找了很多资料, 发现很多都是不准的, 但是给了我参考价值 算法 借用百度百科的 : 阳历 太阳历又称为阳历,是以地球绕太阳公转的运动周期为基础而制定的历法。太阳历的历年近似等于回归年,一年12个月,这个“月”,实际上与朔望月无关。阳历的月份、日期都与太阳在黄道上的位置较好地符合,根据阳历的日期,在一年中可以明显看出四季寒暖变化的情况;但在每个月份中,看不出月亮的朔、望、两弦。如今世界通行的公历就是一种阳历,平年365天,闰年366天,每四年一闰,每满百年少闰一次,到第四百年再闰,即每四百年中有97个闰年。公历的历年平均长度与回归年只有26秒之差,要累积3300年才差一日。 阴历 希吉来历系太阴历,其计算方法是: 以太阴圆缺一周为一月,...阅读全文

博文 2018-09-09 14:34:40 兰茗翔

程序员之路

我目前是某公司游戏后端工程师,从业时间较短,些许见识,大牛勿喷。 12年,自己作为萌新初次接触软件工程这门在当时看起来高大上的学科,怀着些许忐忑,用c写下hello world;18年,写下这片文章时,参与的某款游戏DAU维持在百万量级并维护超过半年。 结合自己的经历,我想谈谈对于程序员的看法。 一:什么人适合做程序? 抽象思维能力。我在做高中物理 - 带电微粒在磁场中的运动问题时,仿佛自己就是那个微粒,在哪个点收到怎样的力,做怎样的运动。当我学习补码运算、累加器时感触更深, 善于发现事物的关联。我和我的朋友有这样的共同点:此时明明在讲这件事情,突然就跳到了另一件事。还记得与大学同学小A的对话,我说:“谁规定上课不能穿拖鞋呢?穿拖鞋与尊重老师之间没有必然联系”,小A说:“那也没人规定出门要穿...阅读全文

博文 2018-11-05 18:34:46 ysdyyy

go 对 json 的处理

json不用多说,一种跨语言的交换协议,这里探讨一下Go语言对json的支持。 Go对于json有官方自己的解析包,先谈一下json的解码方式。解码的api如下: func Unmarshal (data []byte, v interface{}) 在go中,json解码的数据结构有两种,一种是解析到结构体,一种是解析到空的interface。 以数据 {"changes": [{"index":5, "armid":6},{"index":9,"armid":10}]} 为例 1,解析到结构体 package main import ( "encoding/json" "fmt" ) func main() { type change struct { Index int Armid i...阅读全文

博文 2014-10-04 19:26:53 houzongzhi

go语言 安装编译体验

直接下载 go的安装包,解压后,即可使用 需要配置对应的环境变量 export GOROOT=/home/go/go export GOBIN=$GOROOT/bin export GOPATH=/home/go/src export PATH=$PATH:$GOBIN:$GOPATH 比较重要的是 GOROOT 和GOPATH GOROOT 是安装包的地址,GOPATH为开发环境的地址。 在使用中 go build 文件 会编译出可执行文件 go install 会把 工程中使用的pkg编译成.a文件 go的 package查找路径 首先会从 GOPATH /src/ 中查找 然后会从GOROOT/src/pkg/中查...阅读全文

博文 2014-10-04 19:26:01 ssdxiao

GN5i华东华南可以购买啦

摘要: 自从9月12日的媒体沟通会之后,很多用户都申请了购买预约,让大家好一番苦等。终于,GN5i和大家见面了,可以购买喽 GN5i华东华南可以购买啦 ————为AI推理计算而生———— 购买网址:https://www.aliyun.com/product/ecs/gpu?spm=5176.8142029.388261.207.4WMfA5(猛点) GN5i实例基于NVIDIA的Tesla P4 GPU,最多提供2个NVIDIA P4 GPU,56个vCPU和224GB主机内存,以及共计16GB的GPU显存,最高11 TFLOPS的单精浮点计算能力和44 TOPS的int8定点运算处理能力。 45TOPS,INT8整型计算能力 ![0](https:...阅读全文

如何快速掌握一门新技术/语言/框架...

IT行业中的企业特点是都属于知识密集型企业。这种企业的核心竞争力与员工的知识和技能密切相关。而如果你在企业中扮演的是工程师的角色的话,那么你的核心竞争力就是IT相关的知识与技能的储备情况。而众所周知,IT行业是一个大量产生新知识的地方,就拿Web前端举例,短短的5,6年时间,Web前端已经经历了数次变革,就目前来看变革还将继续下去。从以前的div+css网格化布局到JavaScript的方兴未艾,然后是各种JavaScript框架的百家争鸣,HTML5和CSS3的落地,移动web冲击下带来的响应式设计,jQuery,AngularJs,ReactJs等操作DOM元素截然不同的理念和方式,web component的标准化进程……为什么现在企业到处都在招前端工程师?好像突然之间,前端工程师成了...阅读全文

博文 2015-10-10 14:35:57 huang0925

ipfs 的御用包管理器 gx 入门指南

何为 gx 源码位置:https://github.com/whyrusleeping/gx 官方称其为一个通用包管理器,构建于 IPFS 之上,gx 最初的设计灵感来自 nodejs 的 npm ,用来处理 golang 项目中的依赖包。如果从源码来欣赏 IPFS 并且心存二次开发的愿望,那么对 gx 的掌握还是非常有必要的。 本人在年初学习 IPFS (v0.4.12) 时并没有重视 gx 这个工具,甚至还在二次开发的过程中放弃了 gx 而改用 govendor 来进行 deps 的管理,这在后期升级 libp2p 时简直就是一场灾难。由于工作需要现在又需要使用 go-libp2p 来做一个 p2p 应用,所以下定决心一定要征服 gx 想要了解更多需要仔细阅读源码的 README,此处用...阅读全文

博文 2018-11-30 20:34:41 cc14514

自己业余时间学习GO语言,参考网上文章,利用layUI+Go+MySQL写了个小网站(博客+后台管理+即将开始的进销存系统)

#### 自己业余时间学习GO语言,参考网上文章,利用layUI+Go+MySQL写了个小网站(博客+后台管理+即将开始的进销存系统),欢迎大家提意见,多交流,有能一起开发进销存的最好了 ### [我的测试网站 http://www.haowd.top](http://www.haowd.top "我的测试网站") ### 第一次用WEB方面的程序,见笑了,大家多指导。 #### 部分代码示例: **控制器:** ``` package controllers import ( "strings" "github.com/astaxie/beego" "github.com/lwx3i/ydd/models" "github.com/lwx3i/ydd/util" ) // NextPrep...阅读全文

golang学习笔记[4] 网络编程

golang搭建一个网站只是需要简单的几句就可以了 package main import ( "fmt" "log" "net/http" "strings" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数,默认是不会解析的 fmt.Println(r) fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息 fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.URL.Scheme) fmt.Println(r.Form["url_long"]) for k, v := range r.Fo...阅读全文

博文 2015-06-17 20:03:43 zhouyunxuan

融云开发漫谈:你是否了解Go语言并发编程的第一要义?标题文章

2007年诞生的Go语言,凭借其近C的执行性能和近解析型语言的开发效率,以及近乎完美的编译速度,席卷全球。Go语言相关书籍也如雨后春笋般涌现,前不久,一本名为《Go语言并发之道》的书籍被翻译引进国内,并迅速引起广泛关注,本书由融云的一位研发工程师赵晨光联合翻译,旨在帮助Go语言学习者了解并发设计的模式和应用场景,更加深入理解Go语言特性,从而提升自身技术研发水平。 “Go语言并发编程快速入门的第一要义”《Go语言并发之道》主要讲解了Golang语言的最佳实践和模式,引导读者如何选择并发模型以及如何组合利用。全书详细剖析了并发与并行的关键性区别、Go语言的内存同步原语,并列举了帮助学习者编写大规模分布式系统的技巧和工具。关于Go语言学习的思考,赵晨光认为,“Go语言并发编程快速入门的第一要义是...阅读全文

博文 2019-02-26 13:34:42 杨同超

秋高气爽,好工作不可挡!

立秋之后天气渐渐凉爽小伙伴们找工作的心也跃跃欲试起来 那么什么样的工作机会让你收入体面、购买五险升职稳定,前景光明……话不多说先睹为快吧~铛铛,接下来是超正经滴的自我介绍姓名:行不更名坐不改姓,我就是我要家网络科技有限公司。特征:一家面向未来、拥有浓郁互联网思维的、从事互联网+行业定制软件的高新科技企业,汇聚来自北上广深一线城市技术大牛的自己的核心技术研发团队。目标:致力于解决传统行业痛点,为广大企业提供PC端、web端和移动端的研发、运营、推广、服务等一体化的行业解决方案。优势:公司高度重视知识产权保护,目前已顺利通过ISO五大国际标准化体系认证,拥有45个商标、17个计算机软件著作权证书,以及以隐号直拨为代表的诸多国家发明专利,彰显着公司虽系新创公司但拥有着较好的软实力(但这都不算什么,...阅读全文

博文 2019-08-21 16:02:53 我要家网络科技有限公司

NSQ 源码阅读 (四) diskqueue 文件读写

引言 我们在这个系列第一篇文章中提到过,如果需要消息落地而对存储子系统的选择上,从速度上来说 文件系统>分布式KV(持久化)>分布式文件系统>数据库。而NSQ选择了文件系统作为存储子系统。这篇文章将重点介绍nsq 对于文件的操作。 何时写入文件? 在内存的msg chan buffer 已满的时候,会将msg 写入文件,代码如下: func (c *Channel) put(m *Message) error { select { case c.memoryMsgChan <- m: default: b := bufferPoolGet() err := writeMessageToBackend(b, m, c.backend) bufferPoolPut(b) c.ctx.nsqd.S...阅读全文

博文 2017-09-19 15:34:45 buptztd

先睹为快 ▏Kubernetes 1.5有哪些你不得不知的新功能?

今年9月份我们迎来了Kubernetes 1.4的惊喜发布,一大波新功能让人眼花缭乱。经过将近三个月时间的打磨,如今Kubernetes再推出新版本,翘首以盼的Kubernetes 1.5重磅发布,本次版本更新涵盖了**4个主题、12个新特性以及4个原有基础上的重大变更**。期待不如眼疾手快,翻阅文章内容,享受一场Kubernetes 1.5的饕餮大餐吧~ ## 主题简介: **1、StatefulSets (原名PetSets)** - StatefulSets 现在是 beta 版 (主要是修复和稳定性) **2、改善联邦支持** - 新命令:kubefed - DaemonSets - 部署 - Configmaps **3、简化集群部署*...阅读全文

面试:从尾到头打印链表

题目:从尾到头打印链表 要求:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 题解1:递归法 因为是从尾到头返回每一个节点的值,所以很容易想到如果从最后的节点将值放入数组中,然后再往前逐步将数据放入数组,最后回到头节点返回即可,可以想到递归就能轻松做到,只要注意递归函数的结束条件即可。 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reversePrint(head *ListNode) []int...阅读全文

博文 2020-02-28 16:32:40 若鱼治水

面试:从尾到头打印链表

题目:从尾到头打印链表 要求:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例: ` 输入:head = [1,3,2] 输出:[2,3,1] ` 限制: 0 <= 链表长度="" <="10000 题解1:递归法 因为是从尾到头返回每一个节点的值,所以很容易想到如果从最后的节点将值放入数组中,然后再往前逐步将数据放入数组,最后回到头节点返回即可,可以想到递归就能轻松做到,只要注意递归函数的结束条件即可。 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reversePrint(head *ListNode...阅读全文

博文 2020-02-28 16:34:31 若鱼治水