发点牢骚,Go语言真的没啥好的

冒着被Go粉喷死的危险来瞎说几句,您可别当真哦。 说实话,还是去年的时候,我还是Go粉呢,在我的眼中,Go就像一个白马银枪的小将,一下子进入阵中,开始挑战众多的语言悍将,还在微信里面发过一篇学习Go的文字,刚才找找不到了,好像微信里面没有搜索的功能。今天的文字呢,主要是吐槽,CSDN不就是吐槽的地方吗?对,程序员吐槽的地方,至少我这么觉得,也这么干。 好像对Go语言印象已经很模糊了,不过印象深刻的有一下一些语言特征: 1、接口,完全采用动态语言duck typing的方式来定义接口,这一点确实比...阅读全文

CSDN博客 2014-09-22 09:15 GerJeffrey47959 等

GO语言学习笔记(三)

在一个函数调用前加上关键字go,这次调用就会在一个新的goroutine(轻量级线程,协程)中执行,当被调用函数返回时,这个goroutine也就结束了,如果这个函数有返回值,那么这个返回值将被丢弃go语言中的锁机制和channel package main import ( "fmt" "sync" "runtime" ) var counter int = 0 func Count(lock *sync.Mutex) { lock.Lock() counter ++ fmt.Println(...阅读全文

CSDN博客 2014-04-23 13:50 YaphetS_xiaoyan 等

Go语言学习笔记说明

参考书籍:《学习Go语言》、《Go语言编程》 程序运行环境:windows(64bit) Go语言版本:go1.0.2 资料: 1、Go语言半小时速成教程 http://www.vaikan.com/go/a-tour-of-go/#1 2、Go语言豆瓣小组 http://www.douban.com/group/topic/9766700/ 3、Go语言(golang)开源项目大全 http://www.open-open.com/lib/view/open1396063913278.html...阅读全文

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

GO语言学习笔记(一)

每个Go源码文件开头都是package声明,表示Go代码所属的包要生成Go的可执行程序,需要定义一个main的包,同时创建main目录外部参数传入用os模块的os.Args方法获取,os.Args接收的参数下标从1开始 package main import ( "fmt" "os" ) func main(){ fmt.Println("Hello Test") fmt.Println(os.Args[1]) } 在函数返回时没有被明确赋值的返回值会被设置成默认值,例如float类型返回值会被...阅读全文

CSDN博客 2014-04-18 09:05 YaphetS_xiaoyan 等

树莓派上编译 Go and 安装 Cow

PS:老Blog文章转移, 年代久远, 连接可能已失效. Cow 是不错的软件,相当好用,我在公司是直接把它挂到了服务器上,然后办公室的人都在用它。但是回到了家里我就无法用移动设备或者 PSP 之类的连接它了,我的电脑也不能一天 24 小时的在家中开机,碰巧这两天买了连个树莓派,上面运行的是专门定制过的 Debian Linux,我就想着是否能够使用它来运行 Cow。十分不幸的是,似乎作者的网站上并没有提供 ARM 设备的 Cow 版本,我尝试的下载了 Linux 32 位的版本,但是无法在树莓...阅读全文

Segmentfault 2014年04月04日 venmos

Go并发模式:管道和取消

原地址:http://air.googol.im/2014/03/15/go-concurrency-patterns-pipelines-and-cancellation.html 译自http://blog.golang.org/pipelines。 这是Go官方blog的一篇文章,介绍了如何使用Go来编写并发程序,并按照程序的演化顺序,介绍了不同模式遇到的问题以及解决的问题。主要解释了用管道模式链接不同的线程,以及如何在某个线程取消工作时,保证所有线程以及管道资源的正常回收。 Go并发模式...阅读全文

Segmentfault 2014年03月16日 googollee

适合Go语言初学者的资料

适合Go语言初学者的资料 本页是为那些对Go语言学习感兴趣的开发者列举的一些学习资料。(注:部分网站无法访问,请自备翻墙工具) 安装GO语言和配置工作空间 从这里开始学习如何创建一个工作空间来写Go代码 How to Write Go Code Writing, building, installing, and testing Go code 在线资源 一旦你配置完Go语言的环境后,这里有一些学习Go的优秀资源。 The Go programming language tour Go by e...阅读全文

CSDN博客 2013-12-13 12:58 wuwenxiang91322

Golang泛型函数

目前,golang还不支持模板函数(类型参数化),所以看上去不得不为每一种类型都实现一个函数。但是Golang可以利用空接口interface{}和闭包/高阶函数来实现泛型函数。1 空接口 空接口interface{}是指方法集为空的接口,任何类型的值都可以赋值给空接口。接口相关内容请参见另一篇博客《Golang中的接口》// interface{} func minimum(first interface{}, rest ...interface{}) interface{} { minimu...阅读全文

51CTO博客 2015-10-15 16:08:05 说话的白菜

开源日志:关于GO语言的资料汇总

Rob Pike谈Google Go:并发,Type System,内存管理和GC 概要 Rob Pike谈Google Go,内容涉及:无类OOP编程、Go的接口、采用Goroutines和Channels的并发特性,以及Go中帮助缩短GC间歇的一些特性。 个人简介 Rob Pike是Google的首席工程师。最近,他参与开发了Go语言。在此之前,Rob在贝尔实验室的CS研究中心工作,主要从事计算机图形,语言,并发编程等方面的工作,同时他也是Plan 9及Inferno OSes的架构师。此外...阅读全文

CSDN博客 2012-11-08 09:13 winlinvip

Go的reflect机制和reflect包

Go的reflect机制和reflect包 概述 虽然Go是静态语言,然而还是提供了reflect机制,并且定义了reflect包来辅助反射处理。在reflect包中,最重要的两个类型就是Type和Value,分别从类型、值的角度来描述一个Go对象。 Type类型是一个接口,这个接口实现了String() string方法。Value类型是一个结构,但是并未定义任何导出字段,同样定义了String() string方法。 使用如下语句来导入reflect包 import "reflect" 注意...阅读全文

CSDN博客 2013-12-16 21:04 fighterlyt

测试Go语言的interface的效率

interface是Go语言中的一大特点,甚至说是灵魂也不为过。 interface应该会在Go程序中大量出现和使用,因为有必要了解和测试下它的效率。 测试思路: 使用vector包,测试原生的IntVector和用interface包装后的vector的效率。 Go1中去掉了vector包,不过当时我把vector的代码保留了一份, 在代码库里应该也能找到。我找到了一个版本的:https://code.google.com/p/go/source/browse?name=weekly.2011...阅读全文

CSDN博客 2012-07-10 11:57 hengyunabc

golint---golang代码质量检测

github: https://github.com/golang/lint golint是类似javascript中的jslint的工具,主要功能就是检测代码中不规范的地方。golint用于检测go代码。 使用 $ go get github.com/golang/lint $ go install github.com/golang/lint golint 文件名或者目录 检测对应的代码。 golint会输出一些代码存在的问题: 比如: recorder.go:55:5: exported ...阅读全文

Segmentfault 2014年02月21日 lidashuang

LRU 算法

LRU 最近最少使用算法,LRU算法主要用于缓存淘汰。主要目的就是把最近最少使用的数据移除内存,以加载其他数据。 原理 添加元素时,放到链表头 缓存命中,将元素移动到链表头 缓存满了之后,将链表尾的元素删除 LRU算法实现 可以用一个双向链表保存数据 使用hash实现O(1)的访问 groupcache中LRU算法实现(Go语言)https://github.com/golang/groupcache/blob/master/lru/lru.go 源码简单注释: package lru impo...阅读全文

Segmentfault 2014年02月17日 lidashuang

Godns - Go实现的DNS缓存服务器

最近用Go写了一个DNS缓存服务器,主要实现两个功能: DNS缓存 有缓存失效机制,在cache未命中时,支持设置上层递归服务器。 全局hosts 维护全局的hosts设置,统一实现解析域名到指定IP的需求。 另外,支持动态更新hosts记录,而不需要重启服务器进程。 重新造一个轮子的原因 实现了DNS缓存服务器并支持自定义的hosts的开源软件有很多,例如dnsmasq,之所以我们要自己写一个,是因为dnsmasq的hosts记录都是写在本地文件中,更新一条记录后,要重启进程才能生效。而我们需...阅读全文

kenshin 的博客 Jul 30th, 2013 kenshin

Go Reflect

最近在看一些go语言标准库以及第三方库的源码时,发现go的reflect被大量使用,虽然反射的机制大多数语言都支持,但好像都没有go一样这么依赖反射的特性。个人觉得,reflect使用如此频繁的一个重要原因离不开go的另一个特性,空接口interface{},reflect配合空接口,让原本是静态类型的go具备了很多动态类型语言的特征。 另外,虽然反射大大增加了go语言的灵活性,但要完全掌握它的原理和使用也还是有一点难度的。 go的reflect库有两个重要的类型: reflect.Type r...阅读全文

kenshin 的博客 Jul 2nd, 2013 kenshin

mac下用gdb调试Go程序

安装gdb MAC OS X安装Xcode时,会带一个6.x版本的gdb,只支持DWARF2。 而Go的编译文件默认是包含 DWARFv3 调试信息,因此需要升级gdb版本到7.1或以上。 安装步骤: 1 2 3 4 5 6 $ curl -O http://ftp.gnu.org/gnu/gdb/gdb-7.3.1.tar.gz $ tar -xzf gdb-3.7.1.tar.gzma $ cd gdb-7.3.1 $ ./configure $ make $ [sudo] make ins...阅读全文

kenshin 的博客 Jun 27th, 2013 kenshin

PDO批量并发执行SSH工具介绍

批量并发执行工具PDO,主要是解决批量执行的繁锁,更安全便捷的操作工具. 本身是解决公司内部的一些问题,并且有很多特定环境的一些使用,现在抽离出其中都可以使用的部分. 工具名称: pdo(parallel do something) https://github.com/ohlinux/pdo 安装 依赖 需要有一个中控机与被管理机器建立了无密码的密钥关系. 需要有go语言的环境,进行编译安装.这里没有提供bin文件. 自己所测试的环境有,centos macos. 编译 先获取依赖的第三方库:...阅读全文

Segmentfault 2014年02月08日 Ajian

150行Go代码实现git checkout功能

由于历史原由,git一直是被黑成比较难用的版本控制器。其实近年来git的用户界面已经被简化的非常简单了,配上github、bitbucket等hosting,已接近完美。 git其实挺简单的,本文用了约150行golang代码实现了git checkout功能,阅读代码之前,您应该读过《Git Pro》中的git内部原理一节。 1. 数据定义: type blob struct { sha1 string filename string } type tree struct { b []*blo...阅读全文

Segmentfault 2014年02月04日 icattlecoder

Golang适合高并发场景的原因分析

典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力。 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) 目前接入的产品约1280万在线用户 2分钟一次GC,停顿2秒 (1.0.3 的 GC 不给力,直接升级到 tip,再次吃螃蟹) 15亿个心跳包/天,占大多数。 京东云消息推送系统 (团队人数:4...阅读全文

CSDN博客 2014-06-01 22:00 ghj1976

DLang vs GoLang

这次我打算好好写, 因为最近有点闲. 首先介绍两种语言: DLang 如果你不介意阅读英文, 那么DLang的官网有一份非常好的介绍, 简单概括下就是 C太古老了, 缺乏很多新的特性.C/C++太复杂了, 但是语言标准就有数百页之多.C++中有很多常用的, 好的特性是通过标准库实现的, 而非编译器, 这样无法做到最好的优化.D希望简化开发, 降低复杂度, 但同时保留大多数好的特性.作者希望这能成为C/C++的代替品. 对我来说, DLang意味着: 垃圾回收. DLang采用了多线程GC(有时间...阅读全文