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

[Golang]Map的一个绝妙特性

补充说明:一些评论的人对本文中的一些内容感到很困惑,但是我不想让大家感到我言语不清,所以在此澄清一下:是的, 默认情况下,向一个hash表插入的元素是没有固定顺序的。但是因为很多原因,比如有一些帖子就指出了不是所有的map都是hash表(而且有些语言还有有顺序的hash表,比如java的TreeMap), 我还是能够了解为什么很多人(尤其是对Go map实现机制比较了解的人)会假定遍历map元素的顺序和向map插入元素的顺序是相同的。我原来的例子是我自己想出来的,并没有演示出大多数版本的Go关于这方面的特点(尽管我听说对于1.3版本可能是可以工作的)。所以我把代码更新了一下,你可以把代码复制到你的编辑器或者Go Playground来看看效果。Go确实是从随机偏移位置来开始map的元素遍历...阅读全文

博文 2015-03-06 12:00:01 abv123456789

Golang官方依赖管理工具:dep

在这里声明一下,百度或者google看到的godep不是我这篇博文说的dep,那它们是什么关系呢?按照Peter Bourgon博文来说,它们的作者都有相同的人,但是一个是dep是官方版本,godep是第三方工具。 我今天介绍的是dep,之前也有介绍过glide,有兴趣的可以到Golang依赖管理工具:glide从入门到精通使用看看。 现在还有一个疑问是为什么官方现在要支持依赖管理了呢?我个人认为有如下原因(勿喷,如果不同或者遗漏欢迎留言补充): 第三方依赖管理很多,虽然很好用,但是很少可以兼容的,结果--乱; 官方的包管理为了增加社区的凝聚力,保持Go开箱即用的简单特性,不需要大家再安装各种第三方工具了,而且第三方工具都会过来兼容官方版的; 还有一个官话,为了go更好的发展; dep的FA...阅读全文

博文 2017-08-09 02:20:34 梦朝思夕

Golang依赖管理工具:glide从入门到精通使用

介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍gilde。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: 能拉取源码的平台很有限,绝大多数依赖的是 github.com 不能区分版本,以至于令开发者以最后一项包名作为版本划分 依赖 列表/关系 无法持久化到本地,需要找出所有依赖包然后一个个 go get 只能依赖本地全局仓库(GOPATH/GOROOT),无法将库...阅读全文

博文 2017-07-22 05:33:09 梦朝思夕

golang make()内置函数

内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),跟 new 类似,第一个参数也是一个类型而不是一个值,跟 new 不同的是,make 返回类型的引用而不是指针,而返回值也依赖于具体传入的类型 make()函数在golang的代码如下: func make(t Type,size IntegerType) Type 使用make来创建slice,map,chanel说明如下: slice: var slice_ []int = make([]int,5,10) fmt.Println(slice_) var slice_1 []int = make([]int,5) fmt.Println(slice_1) var s...阅读全文

博文 2015-06-17 20:03:47 happinessaflower

在Ubuntu安装go编译环境

在Ubuntu安装go编译环境 好记性不如烂笔头,所以趁热打铁记录下golang编译环境的安装过程。 首先下载一些依赖包: sudo apt-get install bison ed gawk gcc libc6-dev make 然后安装Mercurial。 Mercurial是一款版本管理系统,golang是利用它来管理版本的。 sudo apt-get install python-setuptools sudo apt-get install python-dev sudo apt-get install build-essential sudo apt-get install mercurial 安装完成后,开始clone golang的源代码。 hg clone -r relea...阅读全文

博文 2015-02-28 03:00:01 vikings-blog

设计模式(golang)

设计模式的六大原则 摘自 Java开发中的23种设计模式详解 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。 所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后 面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何 基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受 到...阅读全文

博文 2017-02-15 15:20:20 Cbping

在 Golang 中尝试简洁架构

>(独立性,可测试性的和简洁性) 在阅读了 Bob 叔叔的 Clean Architecture Concept 之后,我尝试在 Golang 中实现它。我们公司也有使用相似的架构,[Kurio - App Berita Indonesia](https://kurio.co.id/), 但是结构有点不同。并不是太不同, 相同的概念,但是文件目录结构不同。 你可以在这里找到一个示例项目[https://github.com/bxcodec/go-clean-arch](https://github.com/bxcodec/go-clean-arch),这是一个 CRUD 管理示例文章 ![](https://raw.githubusercontent.com/studygolang/gctt...阅读全文

博文 2018-05-07 22:23:03 fredvence

godep的save和update

godep save ./... 把依赖的包从GOPATH里找到,然后固化到当前目录Godeps目录里. 但是它不分版本:如果GOPATH里某个包升级了,godep save不会把它更新到Godeps里(假设Godeps里已有)。 godep update google.golang.org/grpc/... 把依赖的grpc包固化到当前目录Godeps目录里,用GOPATH里当前的版本...阅读全文

博文 2015-11-05 03:00:02 xiaouisme

请问如何打包依赖库

go-gd – Bindings for the ‘gd’ dynamic graphics generation library. By Evgeny Stepanischev. gocanvas – Image processing library based on ImageMagick’s MagickWand. By José Carlos Nieto. 想用GoGD或者GoCaNvAS实现图片的缩略,发布成EXE,那在客户电脑可以直接运行么?Go打包的时候会把依赖库打包进EXE么?如果不行,如何打包进去呢?我不想额外的安装GD或者ImageMagick,这样操作起来有点麻烦 谢谢...阅读全文

DDD分层架构的三种模式

引言 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识。 DDD DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可以帮助我们设计高质量的软件模型。在正确实现的情况下,我们通过DDD完成的设计恰恰就是软件的工作方式。UL(Ubiquitous Language,通用语言)是团队共享的语言,是DDD中最具威力的特性之一。不管你在团队中的角色如何,只要你是团队的一员,你都将使用UL。由于UL的重要性,所以需要让每个概念在各自的上下文中是清晰无歧义的,于是DDD在战略设计上提出了模式BC(Bounded Context,限界上下文)。UL和BC同时构成了DDD的两大支柱,并且它们是相辅相成的,即UL都有其确定的上下文含义,而BC中...阅读全文

博文 2017-07-16 11:06:29 _张晓龙_

嵌入式学习的13大法则,你造吗?

![QQ截图20160909173057.png](http://studygolang.qiniudn.com/160909/bf156e01821db5bab860f038637f0bb5.png)   学习嵌入式的过程,是一个不断积累,不断实践的过程。毕竟,一名有成就的程序员不是一蹴而就的,下面是来自一个嵌入式开发高级工程师为我们总结的关于嵌入式开发学习的13大法则,大家不妨参考一下:   一、资源有限性法则   嵌入式计算不仅需要网络快速、一致的计算,而且也要求系统能够井然有序地将其执行代码和数据,存储在一个“共同”的“狭小”的空间内。   二、冗余度法则   在嵌入式系统具有足够的冗余度之后,系统的“初始敏感性”对于其“最终计算结果”的影响就变得微乎其...阅读全文

go中的interface

用了9年的C++,1年的C#,最近改用go语言开发,深感go语言的设计简单,其设计宗旨也是less is more,它极大的加快了开发速度。 go语言吸取了很多现代语言的优点,一个比较重要的特性就是基于接口编程,函数是程序世界的第一公民,这个有点像scalar语言。实现这个接口的语言原型是interface。 基于接口编程 C++中不支持接口,接口的实现方式是用纯虚函数来实现的,C#具有接口,但是它认为接口是对象的一个能力,这是一个很大的进步,但是它不大灵活,比如 public Interface IFile { public int Read(string filePath, int len) public int Write(string filePath, int len) } 这个接...阅读全文

博文 2016-12-26 09:00:00 jacob_007

枚举类型在Go语言中的一种写法

枚举类型在Go语言中的一种写法 2017-03-06 枚举类型在ML类语言里面写起来是最自然的,比如ocaml,F#里面: type T = | T1 of int | T2 of string | T3 of bool haskell里面好像用的datetype而不是type,不太记得细节。总之这是非常重要的一种类型,并不仅限于函数式语言中。 在C语言里面,没有类型安全的保证。好在C里面有union类型,并且有指针,指针这东西太灵活了,能玩得飞起。在C里面枚举类型可以这样写: struct T { int kind; union { char* T1; int T2; bool T3; } value; }; 这里有个小的细节,union分配的大小等于结构体里面最大的那个,所以这种写法不一...阅读全文

博文 2017-04-04 11:58:15 zenlife

Docker 1.8.0增加Content Trust,容器安全性提升

![alt 文本](http://blog.tenxcloud.com/wp-content/uploads/2015/08/docker1.8.01.jpg) Docker这家初创公司,让Docker在Linux容器中构建和部署应用越来越受欢迎,最近宣布了一项行特性,Docker在其最新版本的开源产品中增添Content Trust,这项功能将为使用容器的人们提供一个额外的安全层。 Docker Content Trust ,现在可以在Docker1.8.0版本中获取,它允许开发者在Docker Hub上下载container images之前检查其合法性。此项措施有望确保企业在利用Docker在自己的基础设施上部署应用时,不会有任何潜在的危险。 这对Docker来说异常...阅读全文

产品环境中Go语言的最佳实践

在SoundCloud,我们为客户构建了产品的API。或者说,我们主要的网站、手机客户端和手机应用是该API的第一批客户。该API背后是一个领域性的服务:SoundCloud基本上以面向服务体系结构的形式运作。 我们也是通晓多种语言的组织,因为我们使用了很多语言。并且这些服务(和基础设施支持)的许多部分是使用Golang开发的。事实上,我们都是早期Golang的使用者:目前,我们已在产品中使用Golang有两年半的时间。相关项目包括: Bazooka,我们内部服务平台;产品思想非常类似于Keroku或Flynn。 我们外围的传输层使用通用的nginx, HAProxy等等,但是它们要和Golang服务协作。 我们的音频存储在AWS S3上,但是上传、转码和生成链接等需要Golang服务协调处...阅读全文

博文 2014-10-09 16:00:05 u012797015

golang中("import cycle not allowed")错误

golang不允许循环导包,如果检测到import cycle,会在编译时报错,通常import cycle是因为设计错误或包的规划问题。 import( "package A" "package B" ) 如果package A中已经导入package B,而本package中又导入package B 或者 package A依赖package B,同时 package B 依赖package A 这样就会在编译时报 "import cycle not allowed"。 如何避免重复导入包的问题,就需要在设计时规划好包...阅读全文

博文 2017-03-05 05:55:22 skh2015java

map当中bool真的值得优化成struct{}{}吗?

首先抛出一个问题,在Go中当我们想实现一个集合的时候,可以用map来实现.而map本身就可以通过”comma ok”机制来获取该建是否存在,例如_ , ok := map["key"],如果没有对应的值,ok为false,以此就可以实现集合.有时候我们会选择map[string]bool这类方式来定义这个集合,但是因为有了”comma ok”这个语法,还可以定义成map[string]struct{}的形式,值不再占用内存. 后者可以表示两种状态有或者无,而前者其实有三种状态,有的时候表示true或者false,或者没有.很多时候我们会选择map[string]struct{}来表示集合的实现,但是这样真得值得么? 这里要从map的实现说起.map的实现是一个hash表.表结构由两个结构体表...阅读全文

博文 2016-04-12 10:32:10 yueyue.gao

Go 的文件系统抽象 Afero

Afero 是一个文件系统框架,提供一个简单、统一和通用的 API 和任何文件系统进行交互,作为抽象层还提供了界面、类型和方法。Afero 的界面十分简洁,设计简单,舍弃了不必要的构造函数和初始化方法。 Afero 作为一个库还提供了一组可交互操作的后台文件系统,这样在与 Afero 协作时,还可以保留 os 和 ioutil 软件包的功能和好处。 相比单独使用 os 软件包,Afero 提供了显著的性能提升,尤其是创建 mock 和测试文件系统的能力,无需依赖于磁盘。 **特性:** * 一个单独的 API 用于访问各类文件系统 * 多种文件系统类型之间可交互互操作 * 一组接口,加强后端之间的交互操作性 * 一个原子的跨平台存储备份文件系统 * 支持由不同的文件系统...阅读全文

开源项目 2015-12-10 16:00:00 spf13

DockOne技术分享(十四):腾讯蓝鲸数据平台之告警系统

【编者的话】蓝鲸是互娱运营管理中心自主研发的一套具有多项探索式创新的运维平台。本文是我参与蓝鲸数据平台的建设过程中的一些心得体会,关于整个蓝鲸平台的更多内容,可以阅读另外的这篇文章。 很多人在搞ELK,很多人也在搞Storm。更多人在用传统的Nagios、Zabbix等监控工具。Jason Dixon在2012就意识到这些工具的问题是每个人都想做到大而全,实际上我们更需要的是一对小二精的组件拼装成一个个性化的解决方案。推荐大家去看一下他的演讲视频。 这是Jason Dixon所构想一个组件图。他认为不同的开源方案应该专注于提供好这些组件。 Caskey Dickson 也有同样的设想,并且提出目前的很多组件仍然是缺乏好的提供者的(比如海量metric存储和任意维度聚合):https://ww...阅读全文

博文 2017-06-25 15:01:07 taowen

迁移到 mod 只需 3 个步骤

本文的目的是演示如何轻松地将带有 vendor 目录的旧项目迁移到使用 Go mod 的新项目。 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/migrating-to-go/1_a-NrrpFPmj-_JQGulalCdQ.png) 我不打算一一列举相对于使用依赖关系关联工具,使用 Go modules 的优势,因为在互联网上有几篇关于这方面的文章。另一方面,**我将指导您如何迁移项目**。 ## 检查最新的 Golang 版本 你可以问我,为什么要用最新的?因为如果我们都是软件爱好者,我们应该渴望测试最新的技术! ( 顺便说一下,你可以用 Golang 1.11.X,但是您应该想知道为什么不使用最...阅读全文

博文 2019-01-17 22:47:18 sgsgy5

《Google Go: A Primer》学习笔记

#What is Go? simple,fast,safe and concurrent #Reading Go 编辑hello.go ``` package main import "fmt" func main(){ fmt.Println("Hello World!你好,世界!") } ``` > 经典的Hello World 运行hello.go: 方式1、 ``` go run hello.go ``` > 超快的编译速度,使得go可以像php一样执行 方式2、 ``` go build hello.go ./hello ``` > 编译执行,go可以像C、C++一样发布 #Variab...阅读全文

[译]Golang中的依赖注入

[译]Golang中的依赖注入 文章来源:Dependency Injection in Go关于作者:Drew Olson作者博客:software is fun译者按:本文用于介绍DI和golang中DI库dig的简单使用,适合对go有一定了解的开发者。 我最近使用Go创建了一个小项目,由于最近几年一直用Java,我立刻就被Go语言生态里依赖注入(DI)的缺失震惊了。我决定尝试用Uber的dig库来创建我的项目,结果非常不错。 我发觉DI帮我解决了很多在以前的Go应用中遇到的问题——init函数的过度使用,全局变量的滥用和复杂的应用初始化设置。在这篇文章中,我会介绍DI,并展示一个应用在使用DI前后的区别(使用dig库)。 DI概述 依赖注入是这样一个概念,你的组件(在go中通常是str...阅读全文

博文 2018-08-24 17:35:04 AlexTuan

Go 静态网站生成器 gohugo

Hugo 是 Go 编写的静态网站生成器,速度快,易用,可配置。Hugo 有一个内容和模板目录,把他们渲染到完全的 HTML 网站。 Hugo 依赖于 Markdown 文件,元数据字体 。用户可以从任意的目录中运行 Hugo,支持共享主机和其他系统。 Hugo 只需要几分之一秒就可以渲染一个经典的中型网站,最好网站的每个部分渲染只需 1 毫秒。 Hugo 非常适合博客,文档等等网站的生成。 Hugo 当前提供 Windows,Linux,FreeBSD,NetBSD 和 OS X (Darwin) 的 x64, i386 和 ARM 架构的二进制预构建包。 Hugo 的源代码可以通过 Go 编译器工具链编译到任意地方运行,例如: DragonFly BSD, OpenBSD, ...阅读全文

优雅的H5下拉刷新。零依赖,高性能,多主题,易拓展

### 特点 - 零依赖(原生JS实现,不依赖于任何库) - 多平台支持。一套代码,多端运行,支持Android,iOS,主流浏览器 - 丰富的主题,官方提供多种主题(包括默认,applet-仿小程序,drawer3d-3d抽屉效果,taobao-仿淘宝等) - 高性能。动画采用css3+硬件加速,在主流手机上流畅运行 - 良好的兼容性。支持和各种Scroll的嵌套(包括mui-scroll,IScroll,Swipe等),支持Vue环境下的使用 - 易拓展,三层架构,专门抽取UI层面,方便实现各种的主题,实现一套主题非常方便,而且几乎可以实现任何的效果 - 优雅的API和源码,API设计科学,简单,源码严谨,所有源码通过ESlint检测 - 完善的文档与示例,提供完善的...阅读全文

容器中运行有状态服务 Kubernetes Says “Yes!”

**编者按:本文作者是 Diamanti 的产品 VP Mark Balch,他将更多的分享他们向 Kubernetes做出的一些贡献。这篇文章是关于 Kubernetes 1.3 新功能的一系列深入文章中的第五篇。** 首先,祝贺 Kubernetes 社区最近又发布了一个带来丰富价值的版本。对有状态应用和联邦集群的更好支持,是我对 Kubernetes 1.3 版本如此兴奋的两个主要原因。 Kubernetes对有状态应用的支持是非常关键的,比如 Cassandra,Kafka 和 MongoDB。一些重要的服务都会依赖于数据库,键值存储、消息队列等其他存储服务。 此外,随着应用访问量的不断增加,可能需要服务于全球数以百万计的用户,而依赖于一个数据中心或容器集群将无法...阅读全文

简述 Docker

Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管是云服务还是微服务(Microservices),越来越多的厂商都开始基于 Docker 作为基础设施自动化的工具。那么什么是 Docker?Docker与传统的虚拟机有什么区别?为何要采用 Docker?如何使用 Docker? 本文,就针对上述提到的问题,来简单介绍下 Docker。 什么是 Docker Docker 是开源的应用容器引擎。 Docker 可以让你将所有应用软件以及它的以来打包成软件开发的标准化单元。 Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是...阅读全文

初步了解RESTful(一),感觉对RESTful理解还是不足,请各位多多指教

**1**.Restful简介及特点 REST即Representational State Transfer的缩写,REST最大的几个特点为:资源、统一接口、URI和无状态。下面一一详解: **(1)**. **资源**:所谓资源是指互联网上的一个实体,或者说是网络上的一个具体信息。他可以是一段文本、一张图片或是一个视频。资源总要通过某种载体反映其内容,文本可以用txt格式来表现,也可以用HTML格式;图片可以是png,也可以是JPG格式。JSON是现在最常用的资源表示格式。 结合开发实践,我们对资源和数据理解如下: 资源是以json或其他Representation(表现)为载体的、面向用户的一组数据集,资源对信息的表达倾向于概念模型中的数据: (1)资源总是以某种Representat...阅读全文

博文 2018-01-26 23:57:36 yinshidaoshi

Go-Interface

要点 interface关键字用来定义一个接口 Go没有implements、extends等关键字 实现一个接口的方法就是直接定义接口中的方法 要实现多态,就要用指针或&object语法 示例 package main import "fmt" import "math" type Shape interface { area() float64 } type Circle struct { r float64 } func (c *Circle) area() float64 { return math.Pi * c.r * c.r } type Rectangle struct { length, width float64 } func (r *Rectangle) area() f...阅读全文

博文 2016-09-01 16:00:02 u013344915

忘掉GOPATH,迎接Go modules,进入Go项目依赖库版本管理新时代

Go SDK 1.13测试版马上就要发布了。从此版本开始,Go modules依赖库版本管理特性将正式开始推荐使用。本文将解释一些和Go modules相关的一些命令和概念。 Module(模块)定义为一些Go代码包的集合。通常体现为一个含有若干代码包的目录。每个模块可以发布一系列版本。版本号使用semver(语义化版本)表示。一个模块可能依赖于其它若干模块;准确说来,是依赖于其它若干模块的各自的某个具体版本。每个模块可以在自己的根目录下的go.mod文件中指定其所依赖的各个模块的具体版本。 如果你所维护的某个模块尚未使用Go modules管理依赖,你可以打开一个命令行终端,进入此模块根目录,运行下面这条命令将此模块转换为一个使用Go modules管理依赖的模块。 go mod init...阅读全文

博文 2019-05-23 07:34:47 liulaomo

Golang基本数据类型,常量,标识符

基本数据类型,常量,标识符 1、标识符,关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 2、类型 bool byte complex64 complex128 error float32 float64 int int8 int16 int32 int64 rune string uint uint8 uint16 uint32 uint64 uintptr 3、常量 true false iota 4、零值 nil 5、函数 ...阅读全文

golang cron里面经典的取下一次时间

func (s *SpecSchedule) Next(t time.Time) time.Time { // General approach: // For Month, Day, Hour, Minute, Second: // Check if the time value matches. If yes, continue to the next field. // If the field doesn't match the schedule, then increment the field until it matches. // While incrementing the field, a wrap-around brings it back to the beginni...阅读全文

博文 2018-06-01 02:33:05 smart_w

golang gin依赖包

下载第三方包: https://www.golangtc.com/download/package gin依赖包: https://www.golangtc.com/static/download/packages/gopkg.in.go-playground.validator.v8.tar.gz https://www.golangtc.com/static/download/packages/github.com.ugorji.go.tar.gz https://www.golangtc.com/static/download/packages/github.com.golang.protobuf.tar.gz https://www.golangtc.com/static/downl...阅读全文

博文 2018-02-06 03:33:04 李琼涛

Go 开发的高一致性分布存储 hyflow-go

hyflow-go是一款可进行地理复制、主内存main-memory的高一致性数据存储,其最大特点是将低延时和高事务完美统一。 其模板化的架构: 1. 事务层:基于commit-time事务认证,灵活支持传统数据库的MVCC( Multi-Version Concurrency Control )和 single-versioning。能用来提供串行化serializability 或EUS(Extended Update Serializability ),这些依赖于底层的顺序Order层。 2.顺序层Ordering Layer:一致性的协议是可插拔的,可选择偏序(partial order)协议,如 Alvin POB, M2Paxos 或 E‑Paxos;或者完整顺序协议...阅读全文

go中的面向对象

总体来看,go语言中的面向对象在使用方式上是灵活易用的,可以说设计理念真的很先进,让人有一种如沐春风的感觉。 如果你在学生时代经历了一个从c到c++的学习历程,你是否还记得,老师会说c++是面向对象的,所以我们不必再使用c中的结构体作为数据结构。我们只需定义的是c++中的类,因为类中不只有成员属性,也有成员函数。换句话说, class是可以完美替代struct的,而且更强大。 回到go中,我们的面向对象使用的就是struct,但时代不同了,这次我们的struct也可以有"成员函数"了。 定义一个典型的面向对象方式 package main import "fmt" type Human struct { height float32 weight int } func (h Human) B...阅读全文

博文 2017-07-20 05:04:53 Dr_Zhang

【热点】Google的Go语言速度提升

在经过三个月的公开测试后,Go语言1.3发布了。相对于1.2,新版本在语言方面没有变化,主要带来了性能提升,支持在原生客户端下运行命令行程序,以及其他一些增强。 最有趣的一些性能和实现上的变化: Go语言运行时的栈从分段内存模型改成了连续内存模型 垃圾回收更快了:使用并发的清理算法,这种算法能更好地并行处理垃圾回收,具有更大的内存页;垃圾回收带来的停顿时间下降了50-70%。现在也已经可以精确地查看栈上的变量值了 运行时库更高效地处理defer语句 竞争检测器速度提升了40% Regexp(正则表达式的软件包)现在有了一个新的执行引擎,它使用one-pass算法,能更快地执行特定的简单的表达式 sync.Pool:一种新的类型,对于可能被系统回收内存的缓存,这种类型提供了高效的实现机制 对小...阅读全文

博文 2015-06-17 23:01:32 codemanship

Golang 解决 golang.org/x/ 下包下载不下来的问题

由于众所周知的原因,golang在下载golang.org的包时会出现访问不了的情况。尤其是x包,很多库都依赖于它。由于x包在github上都有镜像,我们可以使用从github.com上先clone下来,再做软链接的方式曲线救国。 mkdir -p $GOPATH/src/github.com/golang/ git clone https://github.com/golang/sys.git $GOPATH/src/github.com/golang/sys git clone https://github.com/golang/net.git $GOPATH/src/github.com/golang/net git clone https://github.com/golang/te...阅读全文

博文 2019-05-11 09:31:40 weixin_42780662

Golang目录结构

一直关注golang和kotlin, 刚好最近有个小项目, 考虑了一番, 决定用golang尝试一下. 不得不吐槽, golang的依赖管理确实是相当烂, 和maven, npm这种完全不能比, 一直喜欢最佳实践之类的东西, 所以一直想要找一个最佳的目录结构, 直到看到了这个项目 https://github.com/golang-standards/project-layout Screen Shot 2018-06-26 at 16.10.07.png 依旧期待出现类似maven的依赖管理工...阅读全文

博文 2018-06-26 16:35:00 buyu007

Go-Interface

要点 interface关键字用来定义一个接口 Go没有implements、extends等关键字 实现一个接口的方法就是直接定义接口中的方法 要实现多态,就要用指针或&object语法 示例 package main import "fmt" import "math" type Shape interface { area() float64 } type Circle struct { r float64 } func (c *Circle) area() float64 { return math.Pi * c.r * c.r } type Rectangle struct { length, width float64 } func (r *Rectangle) area() f...阅读全文

博文 2016-09-07 04:00:04 u013344915

初步了解RESTful(二)—————认知RESTful API

**1**.Request和Response RESTful API的开发和使用,无非是客户端向服务器发请求(request),以及服务器对客户端作出回应(response)。客户端会给予GET方法向服务器发送请求获取资源,基于PUT或PATCH方法向服务器发送更新数据的请求,服务API设置时也应该要按照相应规范来处理对应的请求,这点现在应该成为所有RESTful API的开发者的共识。这里我们来简单说一下常见的响应码: 当GET、PUT和PATCH请求成功时,要返回对应的数据,及状态码200,即SUCCESS; 当POST创建数据成功时,要返回创建成功的数据,及状态码201,即CREATED; 当DELETE删除数据成功时,不返回数据,状态码要返回204.即NO CONTENT; 当GET...阅读全文

博文 2018-02-04 22:06:24 yinshidaoshi

Golang与Python的性能对比

Golang和Python的性能孰优孰劣,在开发者和最终用户中间总有着一些起争议的话题。一个互联网企业要提供好的服务,并且它能够迅速而高效地完成工作,这就是Golang与Python的问题出现的原因。每个IT企业的每一个方面都依赖于其技术备份、数据安全、入侵检测、VPN和存储等技术,这只是企业开发人员需要处理的几个问题中的一部分。鉴于这种情况,大多数企业更倾向于外包自己的IT服务,以便专注于自己最擅长的事情。更多go语言内容请关注:http://www.fastgolang.co...阅读全文

博文 2019-07-11 19:32:40 CC_ab48

go 依赖注入 简单 例子

go 依赖注入 库 利用库 github.com/facebookgo/inject 例子 package main import ( "fmt" "github.com/facebookgo/inject" ) type DBEngine struct { Name string } type UserDB struct { Db *DBEngine `inject:""` } type UserService struct { Db *UserDB `inject:""` } type App struct { Name string User *UserService `inject:""` } func (a *App) Create() string { return "creat...阅读全文

博文 2019-01-09 23:35:12 295631788