2012-09-13 23:07 by 轩脉刃, 1010 visits,
网摘, 收藏,
编辑
摘要:问题由一个需求引起: web的controller,希望创建一个基类,然后在子类的controller中定义action方法,基类有一个run函数能根据字符串自动找到子类的action方法。 如何解决呢? -- 用继承 示例分析继承 首先这个需求是很普遍的,由于脑中有继承概念,所以想当然地以为这个很容易实现: package mainimport( "reflect")type A struct {}func (self A)Run()
{ c := reflect.ValueOf(self) method := c.MethodByName("Test"
阅读全文
2012-09-03 10:39 by 轩脉刃, 1376 visits,
网摘, 收藏,
编辑
摘要:Golang在搭建web服务器方面的能力是毋庸置疑的。官方已经有提供net/http包为搭建http服务器做准备。使用这个包能很简单地对web的路由,静态文件,模版,cookie等数据进行设置。至于这个包是否好用,这个就见仁见智了。你可以从net包开始封装一个web框架,当然也可以基于http包封装一个web框架。但是不论你是打算怎么样做,了解基本的net/http包一定是你借鉴的基础。 需求 ...
阅读全文
2012-08-24 09:47 by 轩脉刃, 936 visits,
网摘, 收藏,
编辑
摘要:gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。 有一点需要注意, 发送方的结构和接受方的结构并不需要完全一致 结构体中缺省的字段将不会被发送。而且在接收方,并不需要所有的字段都要有对应的结构属性对应。godoc中的这个例子很形象:
当发送方传递的是struct{A, B ...
阅读全文
2012-08-22 15:04 by 轩脉刃, 1400 visits,
网摘, 收藏,
编辑
摘要:这篇文章出现的理由是业务上需要创建一个Web Server。创建web是所有语言出现必须实现的功能之一了。在nginx+fastcgi+php广为使用的今天,这里我们不妨使用Go来进行web服务器的搭建。 前言 使用Go搭建Web服务器的包有很多,大致有下面几种方法,直接使用net包,使用net.http包,使用第三方包(比如gorilla)。使用net包就需要从tcp层开始封装,耗费人力物力极大...
阅读全文
2012-07-19 15:05 by 轩脉刃, 1076 visits,
网摘, 收藏,
编辑
摘要:从Goroot的代码出发,里面有很多代码非常复杂,一点点看吧。最重要的概念就是runtime,golang的程序都是在runtime的基础上运行的(除了与底层直接交互的syscall)。 Runtime 在$goroot/pkg/runtime/中有三个文件非常重要: proc.c stack.h runtime.h 在runtime.h中你...
阅读全文
2012-07-17 18:27 by 轩脉刃, 470 visits,
网摘, 收藏,
编辑
摘要:内存,内存中的变量和指针 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...
阅读全文
2012-07-05 16:48 by 轩脉刃, 3205 visits,
网摘, 收藏,
编辑
摘要:当第一次看到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的封装。比
阅读全文
2012-06-30 19:31 by 轩脉刃, 1273 visits,
网摘, 收藏,
编辑
摘要:go中的goroutine是go语言在语言级别支持并发的一种特性。初接触go的时候对go的goroutine的欢喜至极,实现并发简便到简直bt的地步。但是在项目过程中,越来越发现goroutine是一个很容易被大家滥用的东西。goroutine是一把双面刃。这里列举一下goroutine使用的几宗罪: 1 goroutine的指针传递是不安全的 fun main() { request := re...
阅读全文
2012-06-19 18:54 by 轩脉刃, 1441 visits,
网摘, 收藏,
编辑
摘要:1 下载eclipse 2 下载goeclipse http://code.google.com/p/goclipse/wiki/InstallationInstructions 3...
阅读全文
2012-06-18 22:00 by 轩脉刃, 1326 visits,
网摘, 收藏,
编辑
摘要:在Golang中写一个http web服务器大致是有两种方法: 1 使用net包的net.Listen来对端口进行监听 2 使用net/http包 这里是讨论如何使用net/http包创建一个web...
阅读全文
2012-06-16 23:45 by 轩脉刃, 179 visits,
网摘, 收藏,
编辑
摘要:这篇想阅读的是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
阅读全文
2012-06-14 22:16 by 轩脉刃, 975 visits,
网摘, 收藏,
编辑
摘要:首先庆祝下golang终于通过了gfw的审核,可以不用翻墙访问了。goer就可以光明正大地访问http://golang.org/ 这次还是要说说array,slice,map。虽然前面已经说过了,...
阅读全文
2012-06-12 13:50 by 轩脉刃, 1075 visits,
网摘, 收藏,
编辑
摘要:哎,先发下牢骚,Go文档还是太弱了,特别是标准库中的文档说明,很多函数几乎就一句话过了。这点确实该向Microsoft的MSDN好好学学。 Go的time包是标准库中的包之一 不用说,几乎是...
阅读全文
2012-06-10 22:51 by 轩脉刃, 1161 visits,
网摘, 收藏,
编辑
摘要:Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 reflect库的godoc在http://golang.org/pkg/ref...
阅读全文
2012-06-09 23:13 by 轩脉刃, 1478 visits,
网摘, 收藏,
编辑
摘要:在Go中,接口interface其实和其他语言的接口意思也没什么区别。interface理解其为一种类型的规范或者约定。一种类型是不是“实现”了一个接口呢?就看这种类型是不是实现了接口中定义的所有方法...
阅读全文
2012-06-06 09:55 by 轩脉刃, 1393 visits,
网摘, 收藏,
编辑
摘要:当被问到为什么用Go语言,一定不得不提的是Go语言的并发程序编写。在C语言中编写非常繁琐复杂的并发程序在Go语言中总是显得如此便捷。 Go中并发程序依靠的是两个:goroutine和channel ...
阅读全文
2012-06-03 08:38 by 轩脉刃, 1130 visits,
网摘, 收藏,
编辑
摘要:这里要说一下是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
阅读全文
2012-06-02 07:36 by 轩脉刃, 1343 visits,
网摘, 收藏,
编辑
摘要: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文件夹:第三方库。里面存放你的项目中引用的
阅读全文