Golang strings包的TrimRight和TrimSuffix的区别

昨天遇到一个问题,strings.TrimRight("cyeamblog.go", ".go")结果居然是"cyeambl",这让我百思不得其解。当然,要看官方文档的解释: func TrimRight(s string, cutset string) string TrimRight returns a slice of the string s, with all trailing Unicode code points contained in cutset removed. func ...阅读全文

单件模式——Golang实现

单件模式比较常见,算是创建型的设计模式,和工厂模式不同,他只能创建一个实例。他的应用场景很多,比如MySQL只能有一个实例这种都算。 单件模式能简单分成支持并发和不支持并发两种。不过并发这个很简单,满大街Golang实现的单件模式都是这样的。 普通的单件模式 package singleton import ( "fmt" ) var _self *Singleton type Singleton struct { Name string } func Instance() *Singleton...阅读全文

Thrift数据传输序列化

Thrift的序列化是比Json更好用的结构(具体哪里好了我还没研究)。但是它有一个非常严重的问题:兼容性差。常年使用Json的我们已经被惯坏了,潜意识里就觉得数据默认是能保持兼容的。 先说一下那个线上问题。我与公司其它部门用Thrift对接,先上了一版,我是调用方。接着,二次升级的时候,合作的部门改了一下Idl,在函数返回结果结构体的最前面,插入了一个结构,是一个结构体,原本第一版第一个位置是整形。然后他们上线了,我还在排队上线。突然监控就报我接口返回了404(一般错误都转成404)。然后去排...阅读全文

【译】并发、协程和GOMAXPROCS

####介绍 当有新人加入Go-Miami组,他们经常希望去学习的并发模型。当我刚刚开始听说Go语言的时候,并发似乎看起来是这门语言的热门词汇。当我看了Rob Pike的Go并发模式的视频之后,我认为我应该去学习这门语言了。 为了去理解是如何通过Go语言编写出更简单、难出错的并发程序,我们首先需要去理解什么是并发程序和并发程序的结果是什么这两个问题。我不会去讲述CSP(通信顺序进程、Communicating Sequential Processes),这是Go语言实现管道(channel)的基...阅读全文

Goclipse中运行Go语言程序的配置

昨晚和今天一上午分别在Windows7、Ubuntu 12.04LTS和Mac OS X上尝试配置了下Go语言的开发环境,安装Go语言倒是都没遇到什么问题,就是在使用Eclipse的Goclipse插件开发Go语言的时候,一直Run不起来,原因就是源文件一直没有被编译。后来去认真读了下Goclipse的文档才发现原来是必须要将项目目录命名为cmd才可以。 这里只是简单介绍下利用Goclipse开发Go语言的注意事项,至于安装Go语言和配置Go语言的运行环境,网络上有太多的教程,这边就不再赘述。 ...阅读全文

CSDN博客 2012-09-13 14:18 zxtysm

gopkg:一种方便的go pakcage管理方式

在使用go的过程中,我们有时候会引入一些第三方库来使用,而通常的方式就是使用go get,但是这种方式有一个很严重的问题,如果第三方库更新了相关接口,很有可能你就无法使用了,所以我们一套很好地包管理机制。在读生产环境下go语言最佳实践有感一文中,我介绍过soundcloud公司的做法,直接将第三库的代码check下来,放到自己工程的vendor目录里面,或者使用godep。不过现在,我发现了一种更好的包管理方式gopkg。它通过约定使用带有版本号的url来让go tool去check指定的版本库...阅读全文

CSDN博客 2014-07-24 13:26 siddontang

GO -- ORM 框架

这几天在做实训项目,刚好学Go语言,就想使用Go来搭建 socket 服务器 !但是感觉Go 使用sql来注入数据库有点缺陷,最后Golang群上的大神建议使用ORM框架,使用一下确实好用,下面是参照<Go web 编程>这本的一个简单例子,希望能帮到大家 Code package main import ( "database/sql" "github.com/astaxie/beedb" _ "github.com/ziutek/mymysql/godrv" "time" ) ///////...阅读全文

CSDN博客 2013-09-27 09:30 laohan_

Google Go语言开发环境搭建

Go语言 Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 2012年3月28日,G0语言的第一个正式版本Go1发布。 特色 简洁 快速 安全 并行 有趣 开源 支持泛型编程,内存管理,数组安全,编译迅速 Google Go语言开发环境的搭建 for windows ---------------------------------------------------...阅读全文

CSDN博客 2012-11-02 10:41 Vestigge

Go源码分析——http.ListenAndServe()是如何工作的

Go对web服务器的编写提供了非常好的支持,标准库中提供了net/http包来方便编写服务器。许多教程和书籍在讲到用Go编写web服务器时都会直接教新手用http包写一个最简单的hello world服务器,例子差不多都会像这样: // 这就是用Go实现的一个最简短的hello world服务器. package main import "net/http" func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *htt...阅读全文

CSDN博客 2014-07-15 15:16 u011774512

使用go语言访问MySQL

网络上,已经有两个go包,实现了访问MySQL的Client Library,试用后效果不太好。要么代码太老,无法编译(因为go还在进化中),要么编译后无法正确执行。 老外的这两个包如下: http://github.com/thoj/Go-MySQL-Client-Library http://code.google.com/p/mysql-connector-go/ Go-MySQL-Client-Library,根据mysql的客户端协议来实现,可以编译通过,但执行查询时报错,后来我研读了...阅读全文

CSDN博客 2010-06-30 23:03 chinainvent

Golang的垃圾回收

我们公司服务端都是在用Golang,每天几百万的UV,过亿的PV一直没啥问题。后来改了一次逻辑,首页能展示一个列表,之前这个列表都没有做过缓存处理,一个是因为数据少,一共才一千多条;还有就是量不大。但是首页加了入口之后出了问题,内存疯涨,一般内存也就占200M+,这还是包含In Memory缓存的情况下,这下好家伙,最高我见过占用20G内存的情况,但是程序重启一下又能好。当然这是后知后觉了,当时也没把这两个东西联系到一起。 完整的说一下事情的经过。 上线之后内存疯涨,一开始会占10G左右,不知道...阅读全文

Golang实现多线程并发下载

大家都用过迅雷等下载工具,特点就是支持并发下载,断点续传。我们这里不介绍它,这个比较复杂了,逼人也不懂。本文只介绍狭义上的简易的断点续传和狭义上的多线程下载。跟之前一样,旨在研究原理,实际生活中基本没啥用,实测下来多线程下载比单线程下载还慢。。。太丢人了。 主要讲三个方面,如何HTTP的并发下载、通过Golang进行多协程开发、如何断点续传。 HTTP的并发下载 想要并发下载,就是把下载内容分块,然后并行下载这些块。这就要求服务器能够支持分块获取数据。大迅雷、电驴这种都有自己的协议,thunde...阅读全文

Go语言学习笔记

心血来潮学了两天Go,虽然有不少亮点,但感觉没什么吸引我的(既没有像Ruby那样简洁、统一的语法,也没有Lisp那样强大的抽象机制)。 简单明了的并发机制 Go提供了一种叫goroutine的并发机制。“叫做goroutine是因为已有的短语——线程、协程、进程等等——传递了不准确的含义。goroutine 有简单的模型:它是与其他goroutine 并行执行的,有着相同地址空间的函数。它是轻量的,仅比分配栈空间多一点点消耗。而初始时栈是很小的,所以它们也是廉价的,并且随着需要在堆空间上分配(和...阅读全文

CSDN博客 2011-09-14 14:47 Sedgewick

我为什么放弃Go语言

我为什么放弃Go语言 作者:庄晓立(Liigo) 日期:2014年3月 原创链接:http://blog.csdn.net/liigo/article/details/23699459 转载请注明出处:http://blog.csdn.net/liigo 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。 开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对G...阅读全文

CSDN博客 2014-04-14 19:24 liigo

Go语言语法汇总

最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考 数据类型 var varName type,var var1,var2… type,var varName type = Value,var varName1,varName2 type = Value1,Value2,var varName1,varName2=Value1,Value2,varName1,varName2:=Value1,Value2,定义数据类型。 声明了没有被使用的变量将在编译时报错。 常量定义: cons...阅读全文

CSDN博客 2013-09-16 14:21 ygrx

Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日 1、Go 在语法上有着类 C 的感觉。如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔。一般情况下,你不需要分号。 2、Go 同其他语言不同的地方在于变量的类型在变量名的后面。例如:不是,int a,而是 a int。当定义了一个变量,它默认赋值为其类型的 null 值。这意味着,在 var a int后,a 的 值为 0。而 var s string,意味着 s 被赋值为零长度字符串,也就是 ""。 3、Go语言的变量声明和赋值 在Go中使用var对...阅读全文

CSDN博客 2014-07-21 08:48 whxaing2011

Go 语言简介(上)— 语法<转载>

Hello World 文件名 hello.go package main //声明本文件的 package 名 import "fmt" //import 语言的 fmt 库——用于输出 func main () { fmt.Println ("hello world")} 运行 你可以有两种运行方式, 解释执行(实际是编译成a.out 再执行) $go run hello.gohello world 编译执行 $go build hello.go $lshello hello.go $./h...阅读全文

CSDN博客 2013-06-03 23:07 wuwenxiang91322

Go:保留关键字及基本数据类型

1 命名规范 在Go中几乎所有的东西都是有名字或标识符的(类似于C家族语言),且它们是对大小写敏感的。相应的规则如下: 必须以字符开头(所有Unicode UTF-8中的字符 或 下划线“_”)后面可以跟0或多个字符或数字,如:x56, _x32等。不能以数字开头或系统保留关键字和操作符。如:1ab, case, a+b。下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略。所以仅能被作为占位符使用。 同时,在Go中也支持匿名,如匿名变量、自...阅读全文

CSDN博客 2013-01-30 23:31 aaron_ye

在 Go 语言中,正确的使用并发

Glyph Lefkowitz最近写了一篇 启蒙文章 ,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这是一篇非常好的文章,现代软件工程应该拥有的丰富智慧。 从多个花絮中提取,但是如果我斗胆提出主要观点的总结,其内容就是:抢占式多任务和一般共享状态结合导致软件开发过程不可管理的复杂性, 开发人员可能更喜欢保持自己的一些理智以此避免这种不可管理的复杂性。抢占式调度对于哪些真正的并行任务是好的,但是当可变状态通过多并发线程共享时,明确的多任...阅读全文

CSDN博客 2014-04-26 10:33 LvanNeo