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

语义导入版本控制

本文译自 Semantic Import Versioning, Go & Versioning 的第 3 部分, 版权@归原文所有. 如何将不兼容的更改部署到现有软件包 ? 这是任何包管理系统中的根本挑战和决断. 问题的答案决定了所产生的系统的复杂性, 它决定了如何轻松或难以使用包管理. (它还决定如何轻松或难以实现包管理, 但用户体验更重要.) 为了回答这个问题, 这篇文章首先介绍了 Go 的导入兼容性规则: 如果旧包和新包具有相同的导入路径, 新软件包必须向后兼容旧软件包. 我们从 Go 一开始就主张这个原则, 但我们没有给它一个名字或者这样一个直接的陈述. 导入兼容性规则大大简化了使用不兼容版本的软件包的体验. 当每个不同版本具有不同的导入路径时, 关于给定导入语句的预期语义没有歧义...阅读全文

google go 语言介绍(一)

翻译自golang.org 介绍 这是一篇为熟悉c或c++语言的开发人员提供的介绍go语言的基础教程。本文不是综合性的语言指南,而更接近于语言规范。在你阅读本教程后,你可以继续阅读“如何更有效率的编写Go程序”这篇文章,更深入的了解这门语言应该如何被使用。同时,这里还提供了一个Go语言的三天教程:第一天,第二天,第三天。 接下来将通过一系列适度的例子程序来展现这门语言的关键特性。所有的程序都存放在/doc/progs/目录中。 程序片断都标注了该片断在原始文件中的行号。为了代码的清晰,空白行将被保留。 Hello,World 让我们以一种常用的方式开始我们的教程: 05 package main 07 import fmt "fmt" // Package implementing form...阅读全文

博文 2014-10-04 19:26:20 fffvvvzz

mac idea golang 配置

mac idea golang 配置 今天只写了最关键的地方 基本配置可以参见这篇文章 http://www.cnblogs.com/clivelee/p/3870186.html 由于golang plugin背墙了 所以idea1.4无法配置 1. 进入https://github.com/go-lang-plugin-org/go-lang-idea-plugin/releases/ 下载最新的插件 注意——-mac 直接下完整的zip文件 1.0.0 2. 打开plugins -》install plugin from disk 从硬盘安装 直接选择刚才下的zip文件 3 file - project structure - Sdks 配置go sdk 4 大功告成 $(functi...阅读全文

博文 2015-06-17 20:01:44 csapr1987

Go:内存管理与内存清理

![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191109-Go-Memory-Management-and-Memory-Sweep/01.png)

Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.

*这篇文章基于 Go 1.13 版本。有关内存管理的讨论在我的文章 ”[Go:内存管理与分配](https://medium.com/a-journey-with-go/go-memory-man...阅读全文

博文 2020-03-12 21:14:10 shiluo

Go语言,编译时不生成bin目录的原因

今天照着例程想把工程管理好好研究下,忽然发现怎么都不自动生成bin目录,google半天,发现这篇文章 https://golang.org/doc/code.html 原来是GOBIN环境变量的问题,如果设置了这个环境变量,则不生成bin目录,可执行文件都存到GOBIN里了,删去,再试,ok了。 还是有必要把google的文档好好吃透下...阅读全文

博文 2015-06-17 23:02:26 zha_stef

Go 开发进程说明

Go in Go随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编)C 已经成为过去时了。注: gccgo 仍然很强大 这篇文章主要探讨原始编译器 gcc为什么之前用 C 编写?启动(而且 Go 的主要目的不是作为一个编译器实现语言)为什么编译器使用 Go 重写?不单单是验证,我们还有更多实际的原因:Go 比 C 容易编写(实际上)Go 比 C 容易调试(即使没有调试器的情况下)Go 将成为你唯一需要会的语言,鼓励贡献 Go 有更好的模块化,工具链,测试工具,配置工具等等Go 很简单就能进行并行操作虽然看起来很多优势,但是还是夸的太早了:)设计文档: golang.org/s/go13compiler 为什么运行时也是用 Go 重写?我们有自己的 C 编译器来...阅读全文

博文 2015-05-29 12:00:00 叶秀兰

Go是面向对象的语言吗?

该篇文章首发于boyn.top,转载请声明 Go语言是面向对象的语言吗? 如果某个开发人员在学习Go之前,对于Java,C#那套面向对象设计方法很熟悉的人员,在学习Go的时候,面对Go中的结构体struct,接口interface等概念,也许会产生疑问:Go语言是一门面向对象的语言吗.这个问题的答案是:Yes and No. 我们来看看官方是怎么说的 Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a dif...阅读全文

博文 2020-03-29 17:32:42 Boyn

IT江湖--这个冬天注定横尸遍野

今年江湖大事繁起,又至寒冬,冻的不仅是温度,更是人心。这两天上班途中看到多个公众号和媒体发了很多 "XXX公司裁员50%" 等等诸如此类的文章,也真是撼动人心。寒冬,比以往来的更快一些。人在江湖,身不由己。在看看诸如博客园等IT人士聚集之地,各种 "35岁该何去何从"的文章比比皆是,非危言耸听。低头冥想一下,自己也在30+的被淘汰之路。一直在问自己为什么还要写诸如此类的博文?作为一个小老鸟,虽然今天是周末,但是我还是有话要说。持续学习廉颇老矣尚能饭否?用于我们IT,我觉得是一句很讽刺的话,许多跨进30+年龄段的"勇士"还只会curd,为什么只会curd,说来可笑,多半是自己不争气(此句接收反驳)。林子之大,xxxx。看到此文的人能否回忆一下多年来自己在学习之路上是否尽力?包括小编在内,每次想...阅读全文

博文 2018-12-13 20:34:48 java技术分享师

未来你是CTO,还是架构师?

春节就要到了,每到年末就非常适合总结、反思,思考过去一年的成长(就),过去一年的收获,过去一年的改变,所以接下来两三周的时间,我想给大家分享一些技术以外的思考。 这次先跟大家分享关于未来的思考,职业目标和规划决定了你以后的职业高度、职业角色,你本来想成架构师、技术VP、CTO,结果就是没有了结果。 后面可能分享理财和读书等方面的思考,因为技术人,首先是一个人,那必然就有生活,生活就需要money,你不理财,最后只能一穷二白,辛辛苦苦一年的劳动,可能所剩无几,甚至负数了,几年后别人过着舒服的生活了,而你还在苦逼的挤公交、地铁。 读书是获取知识最廉价的方式,知识改变命运不是闹着玩的,读大学没用这些言论是扯淡的,你看那些CEO、CTO,或者你身边的非常牛的人,哪个不读书?如果你不喜欢读书,大概是心...阅读全文

[以太坊] Mac install abigen 安装abigen

这篇文章本不该有,但是我安装abigen的经历实在是太艰辛了,还是记录下吧。 1. 正确姿势 先说正确姿势,希望你能顺利。 一般来说,安装abigen命令,只需要三步就可以搞定的,下载,编译,安装。 go get github.com/ethereum/go-ethereum cd $GOPATH/src/github.com/ethereum/go-ethereum/ make make devtools abigen --help 2. 坑一之科学上网 在执行make devtools时,需要下载相关依赖,有golang.org的,也有github的,可怜的我一会开一会关,仍然不行,原因是Makefile里是这么写的 Makefile (看到-u了吧?你一定看到了!) 我不想修改Make...阅读全文

博文 2018-10-23 20:35:01 ytxing

golang time操作整理

这里的内容大部分是从他人处整理得到 http://my.oschina.net/1123581321/blog/190942 时间戳 当前时间戳 fmt.Println(time.Now().Unix()) # 1389058332str格式化时间 当前格式化时间 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) # 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5 # 2014-01-07 09:42:20时间戳转str格式化时间 str_time := time.Unix(1389058332, 0).Format("2006-01-02 15:04:05") fmt.Println(str_...阅读全文

博文 2016-03-02 16:00:07 shenlanzifa

升级go版本导致vscode智能提示失效

经过网上查找解决方法,也按照这篇文章修改了vscode 的配置,但依然无法进行代码提示。 参考:https://www.cnblogs.com/Dennis-mi/p/8280552.html { "go.autocompleteUnimportedPackages": true, "go.useCodeSnippetsOnFunctionSuggest": true, "go.gopath": "/home/chensl004/Workspace/go/", "go.useCodeSnippetsOnFunctionSuggestWithoutType": true, "go.inferGopath": true, "go.gotoSymbol.includeImports": true,...阅读全文

博文 2019-03-20 00:34:42 哆啦在这A梦在哪

Golang视角下的设计模式

这篇文章想聊聊Golang语言下的设计模式问题,我觉得这个话题还是比较有意思的。Golang没有像java那样对设计模式疯狂的迷恋,而是摆出了一份“看庭前花开花落,望天空云卷云舒”的姿态。 单例模式: Gloang的单例模式该怎么写?随手写一个,不错,立马写出来了。但这个代码有什么问题呢?多个协程同时执行这段代码就会出现问题:instance可能会被赋值多次,这段代码是线程不安全的代码。那么如何保证在多线程下只执行一次呢?条件反射:加锁。。。加锁是可以解决问题。但不是最优的方案,因为如果有1W并发,每一个线程都竞争锁,同一时刻只有一个线程能拿到锁,其他的全部阻塞等待。让原本想并发得飞起来变成了一切认怂串行化。通过check-lock-check方式可以减少竞争。还有其他方式,利用sync/a...阅读全文

博文 2017-09-21 10:04:57 ieasy_tm

Go语言的前景分析

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 GO语言前景分析 这段时间比较忙,相信很多朋友大概都知道,如果不知道的话,可以参考我上篇文章跨维度的打击,是可以直接秒杀的,里面有介绍,大家可以看看。 抓住时代的趋势 在上篇文章中,也就是那个跨维度的打击,是可以直接秒杀的中,提到这个时代的问题,这次针对go语言的前景分析,其实我也想讲一下时代的问题。还记得2010年的时候,那个时候移动互联网时代刚刚兴起,很多以前做java的,也就是做J2EE的人(当时J2EE是红海),抓住了这个机会进行的转型,然后得到红利,甚至实现了人生的转变,这个真的不是夸张的。...阅读全文

博文 2018-10-17 19:42:35 飞雪无情

关于Go 和Erlang的一些想法

关于Go 和Erlang的一些想法 原文链接:http://blog.erlware.org/some-thoughts-on-go-and-erlang/ 以下为本人翻译,仅用于交流学习,版权归原作者所有,转载请注明出处,请不要用于商业用途。 更新: 我发现我这篇文章没有把观点说明白。我并不是说Go不行或者应该改进,因为它跟Erlang是不一样的。我想说的是在可用性和低延迟不可缺少的高并发后端领域来说,Go仍然不能替代Erlang。 需要注意的是,我写这篇文章并不是要关于某一种语言比如Julia。我听说不仅仅在新项目里,还有在一些老项目要替换新语言里,Go慢慢成了Erlang的替代者。没有人说Julia也是这样,但是Go和Node.js却被一些人看作是Erlang的友好的替代者。Erlan...阅读全文

博文 2015-04-27 15:00:30 wang8118

后端工程师入手了树莓派 pi 3B和SIM 900

po 主是苦逼码农一枚,软件工程师,做服务端方向,主要写 nodejs & golang 偶尔写点 python,所以这是一篇刚刚拥有第一个开发板的小白写的小白文,以上是背景 前段时间为了改善生活买了一块树莓派3,装了 debian 8 jessie。 1. 换清华的源: sudo vi /etc/apt/sources.list 注释掉其他的源插入这两个: deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-free contrib deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-fr...阅读全文

博文 2017-06-15 19:06:38 HughFace

《7天以太坊源码解读》— 第二天,节点是如何编译以及启动的

>>> geth 可执行文件怎么构建出来的? 上篇文章中讲,我们是通过 make all 构建出所有可执行文件。那么它到底做了些什么呢? make是一个构建工具,它依据指定规则来构建目标,而构建什么目标以及如何构建目标都写在了 makefile 文件中(当然你也可以不叫makefile) 推荐大家阅读这篇文章 http://www.ruanyifeng.com/blog/2015/02/make.html ,学习 makefile 文件的编写 可以看到以太坊源码根目录存在一个makefile文件,通过上面的学习应该知道了 make all 到底做了什么 GORUN = env GO111MODULE=on go run ... all: $(GORUN) build/ci.go instal...阅读全文

博文 2020-01-25 23:32:46 pefish

goroutine和channel对tcp连接消息的收发

在看这篇文章之前,如果你没看过golang利用socket封装数据,那我建议你看下;同样,如果没看过goroutine和channel实现master-worker模式,同样建议你看下并理解之后再来看这篇文章。这篇文章主要是上两篇文章的结合使用。tcp消息的收发我们已经知道,socket是一个抽象层,其本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。所以我们队tcp消息的收发即对socket中几个接口的配合使用来完成。在golang利用socket封装数据这篇文章中,我们对tcp的消息有收发的处理。但是,成千上万个client发送到server端的tcp请求可能server端还能应付得过来(每个tcp连接开启一个...阅读全文

博文 2017-09-19 17:34:57 初级赛亚人

金融安全资讯精选 2017年第五期:WireX 僵尸网络袭击全球,金融企业如何选择安全的云

摘要: 2017年金融安全威胁演进趋势,纽约发布金融安全新政策,WireX 僵尸网络袭击全球,金融企业如何选择安全的云 3d4fd1956f53474cc9939731e71719b550aad415 【金融安全动态】 2017年金融安全威胁演进趋势。点击查看原文 概要:IT资讯服务公司Data Art的全球金融行业总监分享2017年金融行业的网络安全风险演进趋势。文章提出,金融行业里专业安全人才日渐短缺(当然,这个现象也存在于其他行业中),而安全运营的工作量日益增大,这之间的矛盾,让企业“自己做好安全”这件事变得越来越难。 点评:结合文章和我们的看法,2017年,针对金融行业的网络攻击将有两大趋...阅读全文

用Golang写一个搜索引擎(0x05)--- 文本相关性排序

上面我们已经说过了一些倒排索引的东西,并且也知道了如何来实现一个倒排索引完成检索功能,那么检索完了以后如何排序呢,这一篇简单的说一下倒排索引的文本相关性排序,因为排序实在是太复杂了,我们这里就说说文本的相关性排序,而且是最简单的TD-IDF排序,之后有机会可以再说说整个搜索的排序算法有些什么。 文本相关性排序 首先明白几个概念: Term,分词以后最小的单位,比如用Golang写一个搜索引擎,分词以后就是用,golang,写,一个,搜索引擎,那么每一个词就是一个Term。 TF(Term Frequency),Term在文章中出现的频率,就是当前term在文章中出现的频率,就是term次数/总term数,比如上文中的搜索引擎这个term的TF就是1/5,TF越高那么这篇文章中的这个词就越重要...阅读全文

博文 2017-02-09 08:18:07 吴yh坚

Go Module 工程化实践(二):go get 取包原理篇

接上篇: Go Module 工程化实践(一):基础概念篇。 2. go get 取包原理篇 不论是否开启Go Module功能,go get从版本控制系统VCS中取包的基础过程是类似的,除了在新的实现中不再循环拉取submodule子模块以外。 2.1 go get 基础取包流程 假设依赖包github.com/liujianping/foo不在本地,需要通过go get获取。发起以下命令: $: go get github.com/liujianping/foo 命令发出后: 2.1.1 第一步,正则匹配出依赖包的查询路径 go get可以指定具体包的import路径或者通过其自行分析代码中的import得出需要获取包的路径。但是import路径,并不直接就是该包的查询路径。在go ge...阅读全文

博文 2019-03-07 00:34:39 JayL

go语言中数组和切片的区别 本人新手 高手勿喷

首先从定义中来区别 数组的概念就唠叨了 ,格式如下var balance [10] float32 第一个var是赋值符号 balance为数组名称 【10】为数组下表 float32 数组类型为浮点型 以上是数组的基本概念 重点在下面: var balance = []float32{1000.0, 2.0, 3.4, 7.0, 50.0},【】中不填写数字的形式,go语言中会根据元素的个数来设置数组的大小。或许会认为是动态数组 但是它不是 因为它的数量只是后面的元素来设定,但不是动态的 有什么区别 往下看: 切片的定义:代号(slice) go数组长度不可改变 上面没有数组下表的格式 是根据元素决定数组的大小 是设置 不是改变。而切片不同,与数组相比切片...阅读全文

Go database/sql文档

No.1 文档概要 在Golang中使用SQL或类似SQL的数据库的惯用方法是通过 database/sql 包操作。它为面向行的数据库提供了轻量级的接口。这篇文章是关于如何使用它,最常见的参考。 为什么需要这个?包文档告诉你每件事情都做了什么,但它并没有告诉你如何使用这个包。我们很多人都希望自己能快速参考和入门的方法,而不是讲故事。欢迎捐款;请在这里发送请求。 在Golang中你用sql.DB访问数据库。你可以使用此类型创建语句和事务,执行查询,并获取结果。下面的代码列出了sql.DB是一个结构体,点击 database/sql/sql.go 查看官方源码。 首先你应该知道一个sql.DB不是一个数据库的连接。它也没有映射到任何特点数据库软件的“数据库”或“模式”的概念。它是数据库的接口和...阅读全文

博文 2017-08-08 16:05:07 尼古拉斯河马

关于goroutine的一点点浅薄理解

###介绍 学习golang就不能不理解goroutine,关于goroutine的科普文章是http://studygolang.com/articles/1855, 这篇教程都第一次看就能看懂,写的非常好,当时以为会goroutine了,但是随着最近半个月的研究发现,如果只看了这篇文章就跟别人吹goroutine就真的贻笑大方了。 ### 我的学习启蒙 我对goroutine的进一步理解是通过这篇 http://morsmachine.dk/netpoller, 因为之前对epoll有些懂(只看过一点点科普文章),所以看这篇文章的时候我没怎么看懂,但是看懂了他说的问题,调用epoll按道理说一般是阻塞的,阻塞的情况下 scheduler 会将 M 拿走,将阻塞的 P 扔给 os...阅读全文

golang项目fork的问题

问题 4月份换了一份工作,新工作是使用golang开发。当我在代码仓库中fork了一份代码准备在自己的repo中开发时,发现golang的fork的问题。 源repo:example.com/group/tool.gitfork后: example.com/my/tool.git 于是我使用 go get example.com/my/tool 来下载我的repo准备工作时发现,GOPATH下面依然有group/tool。原因当然是代码中import包的时候都是这么使用的: import "example/group/tool/module" 于是我如果要正常运行的话就得把上面改成: import "example/my/tool/module" 然后开发完做pull request前又得改...阅读全文

博文 2017-04-28 12:24:04 Jale

用Golang写一个搜索引擎 (0x00)--- 从零开始

很早就想写一系列的这样的文章了,之前在一个电商公司做搜索,对搜索引擎有一些认识,来到一个新的创业公司以后非常高兴还有机会继续做这方面的事情,虽然领域已经变了,而且不是做搜索了,但是技术还是那些技术,并且有机会接触到了Go语言,对于一个将近10年C/C++的程序员来说,Go的一些特质让我觉得非常舒服,可参见我之前的这篇文章。 从公司项目衍生出了一个自己的搜索引擎项目,然后有了这篇文章。 先聊聊目标吧,我希望实现一个这样的搜索引擎 使用Go语言实现,方便部署,最好就用一个二进制文件搞定一些,不需要安装任何依赖。 类似一个电商的搜索引擎,支持多字段的检索,不仅仅是文本的全文索引,还需要包括过滤功能(比如价格区间过滤),汇总功能(比如结果集中品牌数量汇总),基本的统计功能。 索引器和搜索器在一起,主...阅读全文

博文 2016-07-11 13:50:21 吴yh坚

2017 一些非常棒的 Sublime Text 3 主题

Sublime Text 是编程时非常流行的编辑器之一。Sublime 有些功能可以使编程变得有趣。Sublime 在打开速度、处理大文件效率、内存占用等多个方面相对于其他编辑器都有很大优势,并且它非常易于扩展。 在安装 Sublime Text 插件之前,我们需要先安装 Package Control,可以参考这篇文章来安装 Package Control。 本文整理了一些 2017 年非常棒的 Sublime Text 主题,希望你能从其中找到一款适合的。 1. Material Theme Material Theme 文档非常完善,并把 Material Design 设计语言引入到你的 Sublime Text 3 中,并且这款主题有非常多可以自定制的选项。 该主题提供了可视化的编...阅读全文

博文 2017-08-18 11:00:34 WEB资源网

Go的map中删除子map,内存会自动释放吗?

结论 在Go中,map中存放map,上层map执行delete,子层map占用的内存会释放,无需手动先释放子map内存,再在上层map执行删除。 实验 在C++中,如果使用了map包含map的数据结构,当要释放上层map的某一项时,需要手动释放对应的子map占用的内存,而在Go中,垃圾回收让内存管理变得如此简单。 package main import ( "log" "runtime" ) var lastTotalFreed uint64 var intMap map[int]int var cnt = 8192 func main() { printMemStats() initMap() runtime.GC() printMemStats() log.Println(len(int...阅读全文

如何避开 Go 中的各种陷阱 [译]

Go 语言有一些我们常说的「坑」,有不少优秀的文章解释讨论过这些「坑」。这些文章所讨论的东西非常重要,尤其对 Go 的初学者来说,时不时就有人掉进这些小「坑」里。 但有个问题让我困惑了很久,为什么我几乎没碰到过这些文章里讨论的绝大部分「坑」?真的,大多数比较知名的比如 “nil interface” 或者 “slice append” 等我从来就没觉得困惑过。我从开始使用 Go 一直到现在总是以某种方式避开了这些形形色色的问题。 后来发现,我足够幸运的读了不少解释 Go 数据结构内部实现的文章并且学习了一些 Go 内部运行原理的基础知识。这些知识足够让我对 Go 有了深刻的认识,同时也避免了掉进各种各样的坑里。 记住维基百科的定义,「坑 是…有效的构造…但同时是反直觉的」 所以,你只有两个选...阅读全文

博文 2016-11-23 06:27:19 newt0n

Golang的TCP和UDP实现

这篇文章介绍了Golang如何实现TCP和UDP传输,转自Mina Andrawos的Implementing UDP vs TCP in Golang。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 Go被称为可移植的系统编程语言,以其简洁的语法、易于部署和良好的性能受到后端程序员的欢迎。网络通信是后端服务软件的一个重要功能,目前存在大量的应用层的通信协议能够满足这个功能需求。构建这些协议的技术基础或是TCP、或是UDP,在这篇文章将简要介绍两种协议的Go语言实现。 TCP IN GO TCP作为HT...阅读全文

For Range 的语义

## 前言 为了更好地理解本文中提及的内容,这些是需要首先阅读的好文章: 下面列出 4 篇文章的索引: - 1. [Go 语言机制之栈和指针](https://studygolang.com/articles/12443) - 2. [Go 语言机制之逃逸分析](https://studygolang.com/articles/12444) - 3. [Go 语言机制之内存剖析](https://studygolang.com/articles/12445) - 4. [Go 语言机制之数据和语法的设计哲学](https://studygolang.com/articles/12487) 在 Go 编程语言中,值语义和指针语义的思想无处不在。如前面的文章所述,语义一致性对于完整性和可读性至关...阅读全文

博文 2018-03-16 19:52:41 shniu

【译】为GatsbyJS选择一个合适的后端

文链接 Picking a back-end for GatsbyJS 作者 Ross Whitehouse 不久之前,我又心血来潮想要把我的作品集站点重做一遍(大概六个月就会有这么一次),这回,我打定主意要学着用一用Gastby。但是事情好像还没这么简单。使用Gastby完成前端部分后,你打算怎么处理后端呢?看看这篇文章吧,现在我们有非常多的选择! Gastby 背景:为什么要用Gatsby? 要说还有什么东西的选择是比无头内容管理系统(Headless Content Management System, Headless CMS)的可选项更多的,那就只有静态站点生成器(Static Site Generator, SSG)了。我们可以用Hugo(基于Golang),Jekyll(基于R...阅读全文

博文 2018-11-23 01:34:41 吴子寒

[翻译]Go 数据结构

关于 Go 的内存结构在 Go 内存模型 中已经有介绍,但是内容相对简单,许多细节也一带而过。Ross Cox 的这篇文章 Go Data Structure 讲解得比较系统也很全面的一篇。翻译至此,希望能对大家有帮助。 2009 年的旧文,发现自己当时没有翻译完。所以再次做了增补和修改。如果我没记错,应该已经有人在 OSC 上发表过同一篇文章的翻译了。大家对照参考阅读吧。 ————翻译分隔线———— Go 数据结构 每当给新手介绍 Go 的时候,我发现为了建立起关于哪个操作成本更加高昂的正确观念,将 Go 如何为其值分配内存说明清楚会很有帮助。本文介绍了基础类型、结构体、数组和切片(slice)。 基本类型 先来看看几个简单的例子: 变量 i 的类型是 int,在内存中表现为一个 32 位...阅读全文

博文 2014-10-09 16:20:09 mikespook

go某函数执行超时触发器

#### 在群里讨论怎么限制某函数的执行时间,想了很久,终于找到非常简洁的写法,之所以在这里发表,是因为我见过太多新手写不对! 也许是许久没发文章,就闲来蛋疼发篇文章! #### 废话不多说,直接上2种我个人认为比较好的写法 ### (1)第1种是我目前能想到比较好且耗时时间很稳定的写法,但是不易懂,代码如下: ``` package main import ( "fmt" "time" ) var start time.Time var end time.Time func main() { test := func() { start=time.Now() time.Sleep(5e9) } limitTime1(test, 3e9)//可以将这里的时间改为超过5s end=time.N...阅读全文

博文 2019-12-26 16:58:40 anko

Go语言高阶:调度器系列(1)起源

如果把语言比喻为武侠小说中的武功,如果只是会用,也就是达到四五层,如果用的熟练也就六七层,如果能见招拆招也得八九层,如果你出神入化,立于不败之地十层。 如果你想真正掌握一门语言的,怎么也得八层以上,需要你深入了解这门语言方方面面的细节。 希望以后对Go语言的掌握能有八九层,怎么能不懂调度器!? Google、百度、微信搜索了许多Go语言调度的文章,这些文章上来就讲调度器是什么样的,它由哪些组成,它的运作原理,搞的我只能从这些零散的文章中形成调度器的“概貌”,这是我想要的结果,但这还不够。 学习不仅要知其然,还要知其所以然。 学习之前,先学知识点的历史,再学知识,这样你就明白,为什么它是当下这个样子。 所以,我打算写一个goroutine调度器的系列文章,从历史背景讲起,循序渐进,希望大家能对...阅读全文

博文 2019-03-10 18:34:38 大彬

Go语言之unsafe

文章转自“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/p4ik3GsM3uGb6yvgVVxMdQ很多同学可能很奇怪,Go不是有指针类型了吗?为啥还需要这样一个unsafe的包呢,关键这个包的名字还是这么的让人不放心,叫做不安全包?而这个包又能够做什么呢,可以帮助我们解决那些问题呢?笔者在学习Go的时候,也被这些问题困扰着,于是便自己整理了这篇文章来讲解下,希望对大家有所帮助。1.指针类型介绍:对于Go语言的指针类型来说,指针类型的限制比较多,主要有四点,并且在Go语言的编译阶段就可以检测出来。限制1: 指针不可以进行数学计算。限制2:不同类型的指针不能够相互赋值。限制3:不同类型的指针不能够==或者!=的比较操作。限制4:不同类型的指针不能够相互转化。备注...阅读全文

博文 2019-12-31 14:45:15 ZhDavis

空结构体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 Modules : v2 及更高版本

本文是一篇翻译文章: blog.golang.org/v2-go-modul… 原文作者:Jean de Klerk 和 Tyler Bui-Palsu 译者:befovy 校对:polaris1119 译文由 GCTT 原创编译,Go语言中文网 荣誉推出 简介 本文是 Go modules 系统的第四部分 Part 1: 使用 Go Modules 译文 Part 2: 迁移到 Go Modules 译文 Part 3: 发布 Go Modules 译文 Part 4: Go Modules : v2 及更高版本 (本文) 随着成功的项目逐渐成熟以及新需求的加入,早期的功能和设计决策可能不再适用。 开发者们可能希望通过删除废弃使用的功能、重命名类型或将复杂的程序拆分为可管理的小块来融入他们...阅读全文

博文 2019-12-05 15:34:23 半岛打铁匠

Go - 如何解析 JSON 数据?

概述 最近掉进需求坑了,刚爬上来,评估排期出现了严重问题,下面三张图很符合当时的心境。 谈需求 估排期 开始干 为啥会这样,我简单总结了下: 与第三方对接。 跨团队对接。 首次用 Go 做项目。 业务流程没屡清楚就出排期(大坑)。 需求调整后未进行调整排期(大坑)。 有了这次经验,后期关于如何评估排期也可以和大家唠唠。 废话不多说了,进入今天主题。 今天给大家分享用 Go 如何解析 JSON 数据,包含三种情况,强类型解析、弱类型解析、返回结构不确定 等。 JSON 结构 比如,请求了手机归属地的接口,json 数据返回如下: { "resultcode": "200", "reason": "Return Successd!", "result": { "province": "浙江", ...阅读全文

博文 2020-01-04 14:34:14 訢亮

Go 获取磁盘使用情况(跨平台)

最近在项目中需要根据磁盘使用情况来做一下处理,发现没有什么标准库可以获取磁盘当前使用情况,在网上找了一段代码在 Linux 下运行可以,但在 Windows 跑会抛异常。 后来在网上找到了这篇文章,文章分别给出了两个平台各自获取磁盘使用情况的方法,在此基础上使用golang 的条件编译就可以实现跨平台获取了。 解决这个问题花了大半天,现在项目快结束了有时间就传到 gitlab 上了方便以后使用。 使用示例 获取包 go get gitlab.com/tingshuo/go-diskstate/ 使用 import "gitlab.com/tingshuo/go-diskstate/diskstate" import "fmt" // example func main() { state :...阅读全文

博文 2019-12-12 00:32:45 tingshuo123

Golang并发实践:笔记本秒变暖宝宝

早晨来到办公室,手是非常凉啊,一模笔记本,比手还凉,手指都快不能动了。歪脑筋一动,把笔记本编程暖手宝先暖暖手吧,这不就都暖和了。怎么变呢?当然是你学的Golang并发啦。 package main import ( "fmt" "time" ) // warm 未接到结束信号,不停使用CPU func warm(stop <-chan struct{}) { for { select { case <-stop: fmt.Println("Warm finish") default: } } } func main() { stop := make(chan struct{}) for i := 0; i < 100; i++ { go warm(stop) } t := time.NewT...阅读全文

博文 2018-12-13 09:34:43 大彬

go与众不同的类型

用go写了几个应用之后,对它的几个类型理解得可以说也比较到位。 数组 它跟C语言的数组一样,有固定的长度,声明之前必须很设定其长度。由于受C语言的影响,我一直把它当作指针来看待。其实,go的数组是个值类型,当把一个数组赋值给另一个数组时,是复制了本身给另一个数组。也就是说,当把数组当作参数进行传递时,会拷贝整个数组,当然也就与C语言的数组指针引用相比了,效率也就大打折扣了。go数组有一点必须知道,就是它的类型是包括了长度的。一个数组包含了长度,储存类型,实际值三个参数。[3]int与[4]int是两个不同的数组。 切片 数组的兄弟slice(切片),它是go中最常用到的类型,因为它是指针,而且没长度的限制,可以随时往里面加数据。所以它的性能不仅比数组高,而且更灵活。其实slice的数据结构里...阅读全文

博文 2014-10-04 19:26:27 descusr

为什么我不会舍弃Python投奔Go语言

最近,由于一篇“为什么我不会舍弃Python投奔Go语言(英文)”的博客,我收到了大量的邮件,这篇文章中,作者说Go语言除了“用返回值来处理异常错误”这点外,其它的都非常好。我想写出一点东西,解释一下Go语言为什么这样做,这会对大家都有用。 本文作者:Russ Cox 在Go语言中,规定的方式是,函数返回错误信息。这没什么。如果一个文件并不存在,op.Open函数会返回一个错误信息。这没什么。如果你向你一个中断了的网络连接里写数据,net.Conn里的Write方法会返回一个错误。这没什么。这种状况在这种程序中是可以预料到的。这种操作就是容易失败,你知道程序会如何运行,因为API的设计者通过内置了一种错误情况的结果而让这一切显得很清楚。 从另一方面讲,有些操作基本上不会出错,所处的环境根本不...阅读全文

博文 2015-04-16 00:00:00 cometwo

[翻译]Go 数据结构

[翻译]Go 数据结构 http://mikespook.com/2013/12/%e7%bf%bb%e8%af%91go-%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84/#more-1775 2013/12/05mikespook发表回复 关于 Go 的内存结构在 Go 内存模型 中已经有介绍,但是内容相对简单,许多细节也一带而过。Ross Cox 的这篇文章 Go Data Structure 讲解得比较系统也很全面的一篇。翻译至此,希望能对大家有帮助。 2009 年的旧文,发现自己当时没有翻译完。所以再次做了增补和修改。如果我没记错,应该已经有人在 OSC 上发表过同一篇文章的翻译了。大家对照参考阅读吧。 ————翻译分隔线———— Go 数据结构 每当给新手...阅读全文

博文 2015-06-17 20:06:18 blogNote

Go语言的堆排序实现

关于堆排序的算法,可以参考我去年的文章《堆排序(HEAP SORT)》。那篇文章讲的是建立小顶堆进行的排序,这里说的是建立大顶堆建立的排序,差不多。 在Golang源码的sort包里,自带了排序函数。该函数可以对各种类型进行排序,只不过该类型需要实现三个函数,使得该类能够实现Interface接口。 type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int...阅读全文

测试后expvar.Map :加锁的map : sync.map = 0.75 : 1 : 3

### 如题,白白浪费我几天时间,偶发的并发bug不少,看我上篇文章就出现了各种bug,就不说了,现在来说个一定会出现的bug, ### 下面的代码在1.14.1版本是会报错的,结果不为1,但是我卸载后重新安装1.13.9之后就可以正常执行了!当然也可能是我的电脑原因,求大伙验证! ``` package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { var m sync.Map for i := 0; i < 65536; i++ { m.Store(1, 1) } wg.Add(2) go Add(m) go sub(m) wg.Wait() fmt.Println(m.Load(1)) } func A...阅读全文

golang积累-接口指针与结构体指针

本文转自我发布在csdn的博客,原文:http://blog.csdn.net/qq_26981997/article/details/52608081, 欢迎指正。 对go做过开发的朋友都很熟悉interface。这几天在网上看到了篇文章,谈到了interface与nil判等的问题。题是好题,就进一步了解了一下。 ### 原题如下: **Nil接口并不是有Nil指针的接口** ```Go type Cat interface { Meow() } type Tabby struct {} func (*Tabby) Meow() { fmt.Println("meow") } func GetACat() Cat { var myTabby ...阅读全文