代码改变世界

随笔分类 -  Go

Golang Gob编码

2012-08-24 09:47 by 轩脉刃, 36522 阅读, 收藏, 编辑
摘要: gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,... 阅读全文

Golang Http Server源码阅读

2012-08-22 15:04 by 轩脉刃, 39098 阅读, 收藏, 编辑
摘要: 这篇文章出现的理由是业务上需要创建一个Web Server。创建web是所有语言出现必须实现的功能之一了。在nginx+fastcgi+php广为使用的今天,这里我们不妨使用Go来进行web服务器的搭建。 前言 使用Go搭建Web服务器的包有很多,大致有下面几种方法,直接使用net包,使用net.http包,使用第三方包(比如gorilla)。使用net包就需要从tcp层开始封装,耗费人力物力极大... 阅读全文

Golang runtime 浅析

2012-07-19 15:05 by 轩脉刃, 26288 阅读, 收藏, 编辑
摘要: 从Goroot的代码出发,里面有很多代码非常复杂,一点点看吧。最重要的概念就是runtime,golang的程序都是在runtime的基础上运行的(除了与底层直接交互的syscall)。 Runtime 在$goroot/pkg/runtime/中有三个文件非常重要: proc.c stack.h runtime.h 在runtime.h中你... 阅读全文

golang底层实现资料

2012-07-17 18:27 by 轩脉刃, 9822 阅读, 收藏, 编辑
摘要: 内存,内存中的变量和指针 http://golangtutorials.blogspot.jp/2011/06/memory-variables-in-memory-and-pointers.html How does reflection work internally? https://groups.google.com/forum/?fromgroups#!topic/golan... 阅读全文

Go语言开发Windows应用

2012-07-05 16:48 by 轩脉刃, 49103 阅读, 收藏, 编辑
摘要: 当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场。Go不是脚本语言,但却有着脚本语言的轻便简单的特性。相较于php和python之类以服务器控制台为主要战场的脚本语言来说,Go语言是真正的圆了“动态语言的应用开发梦”。Windows ApiWindows桌面应用依赖于win api,画出各种应用界面和控件本质上就是调用windows提供的api。Go开发Windows App要做的第一件事情就是封装这些windows api。https://github.com/lxn/go-winapi这个项目已经实现了对winapi的封装。比 阅读全文

论go语言中goroutine的使用

2012-06-30 19:31 by 轩脉刃, 31299 阅读, 收藏, 编辑
摘要: go中的goroutine是go语言在语言级别支持并发的一种特性。初接触go的时候对go的goroutine的欢喜至极,实现并发简便到简直bt的地步。但是在项目过程中,越来越发现goroutine是一个很容易被大家滥用的东西。goroutine是一把双面刃。这里列举一下goroutine使用的几宗罪:1 goroutine的指针传递是不安全的fun main() { request := request.NewRequest() //这里的NewRequest()是传递回一个type Request的指针 go saveRequestToRedis1(request) go saveReuqe 阅读全文

Go语言_eclipse环境搭建

2012-06-19 18:54 by 轩脉刃, 14212 阅读, 收藏, 编辑
摘要: 1 下载eclipse 2 下载goeclipse http://code.google.com/p/goclipse/wiki/InstallationInstructions 3... 阅读全文

Go语言_HTTP包

2012-06-18 22:00 by 轩脉刃, 54330 阅读, 收藏, 编辑
摘要: 在Golang中写一个http web服务器大致是有两种方法: 1 使用net包的net.Listen来对端口进行监听 2 使用net/http包 这里是讨论如何使用net/http包创建一个web... 阅读全文

Go语言_net篇

2012-06-16 23:45 by 轩脉刃, 8739 阅读, 收藏, 编辑
摘要: 这篇想阅读的是go的net包,net包提供了各种网络IO类型,比如有TCP/IP, UDP, 域名解析, Unix domain socket 使用这个包能很容易发送一个tcp请求,创建服务器也再也不需要像C语言那样createSocket等一系列繁琐的操作了,用起来那感觉不是一般地爽啊! 下面先创建一个简单的Server端: package main import ( "net" "fmt" ) func main() { if ln, err := net.Listen("tcp", ":8080"); err 阅读全文

Go语言_array,slice,map

2012-06-14 22:16 by 轩脉刃, 30934 阅读, 收藏, 编辑
摘要: 首先庆祝下golang终于通过了gfw的审核,可以不用FQ访问了。goer就可以光明正大地访问http://golang.org/ 这次还是要说说array,slice,map。虽然前面已经说过了,... 阅读全文

Go语言_时间篇

2012-06-12 13:50 by 轩脉刃, 32048 阅读, 收藏, 编辑
摘要: 哎,先发下牢骚,Go文档还是太弱了,特别是标准库中的文档说明,很多函数几乎就一句话过了。这点确实该向Microsoft的MSDN好好学学。 Go的time包是标准库中的包之一 不用说,几乎是... 阅读全文

Go语言_反射篇

2012-06-10 22:51 by 轩脉刃, 34003 阅读, 收藏, 编辑
摘要: Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 reflect库的godoc在http://golang.org/pkg/ref... 阅读全文

Go语言_接口篇

2012-06-09 23:13 by 轩脉刃, 16656 阅读, 收藏, 编辑
摘要: 在Go中,接口interface其实和其他语言的接口意思也没什么区别。interface理解其为一种类型的规范或者约定。一种类型是不是“实现”了一个接口呢?就看这种类型是不是实现了接口中定义的所有方法... 阅读全文

Go语言_并发篇

2012-06-06 09:55 by 轩脉刃, 31680 阅读, 收藏, 编辑
摘要: 当被问到为什么用Go语言,一定不得不提的是Go语言的并发程序编写。在C语言中编写非常繁琐复杂的并发程序在Go语言中总是显得如此便捷。 Go中并发程序依靠的是两个:goroutine和channel ... 阅读全文

Go语言_函数学习篇

2012-06-03 08:38 by 轩脉刃, 10763 阅读, 收藏, 编辑
摘要: 这里要说一下是Go函数和一些其他语言不一样的地方 1 函数格式不同 func GetMsg(i int) (r string) { fmt.Println(i) r = "hi" return r}func说明这个是个函数GetMsg是函数名(i int) 函数接收一个int参数(r string) 函数返回一个string类型返回值2 函数可以返回多个返回值这点和c,php都不一样,和lua是一样的 func GetMsg(i int) (r string, err string) { fmt.Println(i) r = "hi" err = &qu 阅读全文

Go语言_基础学习篇

2012-06-02 07:36 by 轩脉刃, 18280 阅读, 收藏, 编辑
摘要: GO文件目录结构该图是go-windows的目录结构如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序bin文件夹:go的每个项目生成的二进制可执行程序。windows下会生成.exe文件,linux下会生成可执行文件。Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),也是可以执行的。这是让PHP,Python等脚本语言望成莫及的。pkg文件夹:第三方库。里面存放你的项目中引用的 阅读全文