好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Go语言实现http共享(总结)

Go语言实现http共享(总结)

go 语言入门简单,可要写出好的 go 代码得需要下些功夫。

前两天刚把 http 文件共享的升级过( http://www.cnblogs.com/MikeZhang/archive/2012/08/06/httpShareGolang20120805.html   ),现在经大牛指点完全用 http 实现,感觉爽快多了。  

一个简单的 http 服务器代码  

     package   main   
     import   (   
            "io"    
            "net/http"    
            "log"    
   )   
     func   HelloServer(w http.ResponseWriter, req *http.Request) {   
           io.WriteString(w,  "hello, world!  \n  " )   
   }   
     func   main() {   
           http.HandleFunc( "/hello" , HelloServer)   
           err := http.ListenAndServe( ":12345" ,   nil  )   
             if   err !=   nil   {   
                   log.Fatal( "ListenAndServe: " , err)   
           }   
   }    

这里 调用的是  http.HandleFunc 函数,这个函数声明如下:  

    func HandleFunc(pattern string, handler func(ResponseWriter, *Request))     

这里用 HelloServer 实现 HandleFunc 函数的第二个参数。  

一个简单的 http 服务器计数器程序代码  

     package   main   
     import   (   
            "fmt"    
            "net/http"    
            "log"    
   )   
     type   Counter   struct   {   
           n   int     
   }   
     func   (ctr *Counter) ServeHTTP(c http.ResponseWriter, req *http.Request) {   
         ctr.n++   
         fmt.Fprintf(c,  "counter = %d  \n  " , ctr.n)   
   }   
     func   main() {   
           http.Handle( "/counter" ,   new  (Counter))   
           log.Fatal( "ListenAndServe: " , http.ListenAndServe( ":12345" ,   nil  ))   
   }    

这里调用的是 http.Handle 函数,这个函数声明如下:  

  func Handle(pattern string, handler Handler)   

说明: 几乎任何东西都可加以方法,几乎任何东西都可满足某界面, http 包定义的 Handler 界面就是这样,任何物件实现了 Handler 都可服务  HTTP 请求。  

type Handler interface {  

ServeHTTP(ResponseWriter, *Request)  

}  

ResponseWriter  本身是个界面,它提供一些可访问的方法来返回客户的请求。这些方法包括标准的  Write  方法。因此  http.ResponseWriter  可用在 io.Writer  可以使用的地方。 Request  是个结构,包含客户请求的一个解析过的表示。  

所以这里只要给  Counter 实现 ServeHTTP 方法就可以服务 HTTP 请求了。  

上面的两个例子是 http 服务器的两种方式,写出来主要是为了对比下。  

两种方式都实现了类似这样的函数:   handler func(ResponseWriter, *Request),但是 第一个例子的函数名字不固定,可以随便起,第二个例子中的函数名字只能是 ServeHTTP ,其它的不行。

实现 http 文件共享  

文件服务器要用到  http.FileServer 提供的 Handler ,下面的代码就是基于第二种方式实现的。这里就不多解释了,不懂的参考上面的例子,比较下或许有帮助。  

源代码如下:  

     package   main   
     import   (   
        "net/http"    
        "os"    
        "strings"    
        "log"    
   )   
     type   TraceHandler   struct   {   
       h http.Handler   
   }   
     func   (r TraceHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {   
             println  ( "get" ,req.URL.Path, " from " ,req.RemoteAddr)   
           r.h.ServeHTTP(w, req)   
   }   
     func   main() {   
           port :=  "8080"    //Default port     
             if     len  (os.Args)> 1  { port = strings.Join(os.Args[ 1 : 2 ], "" )}   
           h := http.FileServer(http.Dir( "." ))   
           http.Handle( "/" , TraceHandler{h})   
             println  ( "Listening on port " ,port, "..." )   
           log.Fatal( "ListenAndServe: " , http.ListenAndServe( ":" +port,   nil  ))   
   }    

启动应用程序:  

  Web 访问:  

 

E-Mail : Mike_Zhang@live.com

分类:  go

标签:  go

go

 

Go语言实现http共享(总结)

摘要: go语言入门简单,可要写出好的go代码得需要下些功夫。前两天刚把http文件共享的升级过(http://www.cnblogs.com/MikeZhang/archive/2012/08/06/httpShareGolang20120805.html ),现在经大牛指点完全用http实现,感觉爽快多了。一个简单的http服务器代码package mainimport ( "io" "net/http" "log")func HelloServer(w http.ResponseWriter, req *http.Request) {  阅读全文

posted @  2012-08-10 01:53  Mike_Zhang 阅读(334) |  评论 (0)   编辑

 

Go语言实现http共享(带客户访问trace)

摘要: 我之前有篇文章(http://www.cnblogs.com/MikeZhang/archive/2012/03/13/httpShareGolang20120312.html)中提到过用Go语言实现http文件共享,这个版本的程序比python的实现快了点,默认情况下支持的客户端多了些,但是没有客户访问的trace,程序运行过程中,感觉像是死掉了。我想改进下,让它有trace。代码如下:/*File : httpShareWithTrace.goAuthor : MikeE-Mail : Mike_Zhang@live.com*/package mainimport( ... 阅读全文

posted @  2012-08-06 00:39  Mike_Zhang 阅读(893) |  评论 (1)   编辑

 

像Python那样跑go1的代码(Windows下双击运行)

摘要: Windows下,以".py"为扩展名的Python程序可以双击运行,用起来很爽,现在玩go语言,我也想这么玩……这里说说我的玩法。示例代码(test.go):package mainimport ( "fmt" "time")func main() { fmt.Println("Test") time.Sleep(time.Duration(6) * time.Second)}Windows7 下,修改注册表:路径:HKEY_CLASSES_ROOT\go_auto_file\shell\open\command 阅读全文

posted @  2012-04-25 14:04  Mike_Zhang 阅读(1099) |  评论 (0)   编辑

 

go 1发布了,之前写的代码不能运行了

摘要: 刚刚发布go 1 ,迫不及待的进行更新,可问题出来了:1、8g的命令不能用了我的平台是windows,用notepad++配置了开发环境(http://www.cnblogs.com/MikeZhang/archive/2012/02/10/nppRunGo.html)设置“8g -o test1.8 test1.go & 8l -o test1.exe test1.8 & test1.exe”的快捷键为Ctrl+F6但当执行时候,提示如下:‘8g.exe' 不是内部或外部命令,也不是可运行的程序或批处理文件。查了查资料,应该这样做:go run file.go或者go 阅读全文

posted @  2012-03-29 23:37  Mike_Zhang 阅读(1466) |  评论 (7)   编辑

 

asterisk事件监控

摘要: asterisk有一个很好的东东,就是Event,会主动通知客户端服务器发生了什么……不过前提是你得先连上服务器。好,不废话了,下面开工。首先声明下环境:CentOS 6一、安装并配置asterisk1、下载asteriskwget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.7.1.tar.gz2、解压并安装tar zxvf asterisk-1.8.7.1.tar.gzcd asterisk-1.8.7.1./configure && make && m 阅读全文

posted @  2012-03-15 16:40  Mike_Zhang 阅读(294) |  评论 (0)   编辑

 

Go语言实现http共享

摘要: 在我之前的文章(http://www.cnblogs.com/MikeZhang/archive/2012/02/11/httpFileSharePythonAndGo.html)中提到过用go语言实现http共享,这个程序我一直在用,感觉还是python的方式更加灵活:如不指定端口,则默认开启8000……可python不给力,慢不说,还只允许一个客户端,果断决定自己写一个!好了,不多废话了,代码如下:/*File : httpShare.goAuthor : MikeE-Mail : Mike_Zhang@live.com*/package mainimport ( ... 阅读全文

posted @  2012-03-13 00:20  Mike_Zhang 阅读(1422) |  评论 (1)   编辑

 

csv文件操作(go语言)

摘要: go语言自带的有csv文件读取模块,看起来好像不错,今天玩玩,也算是系统学习go语言的一部分……^_^一、写csv文件函数:funcNewWriter(w io.Writer) *Writer func(w *Writer) Flush() func(w *Writer) Write(record []string) (err os.Error)func(w *Writer) WriteAll(records [][]string) (err os.Error)具体见官网:http://golang.org/pkg/csv/#NewWriter其实写csv文件大可不必用这些函数,直接按照规则写 阅读全文

posted @  2012-02-19 22:43  Mike_Zhang 阅读(154) |  评论 (0)   编辑

 

消息摘要算法示例(python和go)

摘要: 常用的消息摘要算法有MD5和SHA,这些算法在python和go的库中都有,需要时候调用下就OK了,这里总结下python和go的实现。一、python消息摘要示例代码如下:#! /usr/bin/python''' File : testHash.py Author : Mike E-Mail : Mike_Zhang@live.com'''import hashlibsrc = raw_input("Input string : ")funcNameList = ["MD5","SHA1&qu 阅读全文

posted @  2012-02-18 01:31  Mike_Zhang 阅读(943) |  评论 (0)   编辑

 

Go语言文件操作

摘要: 写程序离不了文件操作,这里总结下go语言文件操作。一、建立与打开建立文件函数:funcCreate(name string) (file *File, err Error)funcNewFile(fd int, name string) *File具体见官网:http://golang.org/pkg/os/#Create打开文件函数:funcOpen(name string) (file *File, err Error)funcOpenFile(name string, flag int, perm uint32) (file *File, err Error)具体见官网:http://g 阅读全文

posted @  2012-02-17 12:56  Mike_Zhang 阅读(332) |  评论 (0)   编辑

 

简单客户端服务器模型(C++、python和go语言示例)

摘要: 工作中用到了C/S模型,所做的也无非是给服务器发数据,但开发阶段会遇到程序自身的回环测试,需要用到简单的服务端以便验证数据发送的正确性。写软件用C++,跑测试用python,这段时间也刚好看go语言,所以都要有demo。以下三组程序实现的功能相同,这里一起做下总结。一、C++实现 Boost.Asio是一个跨平台的C++库,它用现代C++方法为网络和底层I/O程序提供了一致的异步I/O模型。 为了跨平台,我用boost库实现,具体如下。服务端代码: 1 /* 2 File : svr.cpp 3 Author : Mike 4 E-Mail ... 阅读全文

posted @  2012-02-14 14:06  Mike_Zhang 阅读(461) |  评论 (0)   编辑

 

调用其它程序并得到程序输出(go和python)

摘要: 在c语言中可以用system函数调用系统命令并得到输出,通过输出重定向也可以将程序执行的输出保存到文件以供使用,但用起来不是很方便。我这里介绍下用python和go语言的实现方式,可以将其它程序的输出直接保存成变量供程序使用。 下面的示例用的是ls命名,需要安装MinGW,并将“C:\MinGW\msys\1.0\bin”加入环境变量。一、用python调用其它程序,并得到输出示例代码:import osvar = os.popen('ls -l').read()print var运行效果(以我机器为例):二、用go语言调用其它程序,并得到输出go代码:package main 阅读全文

posted @  2012-02-14 11:53  Mike_Zhang 阅读(979) |  评论 (3)   编辑

 

用http实现文件共享(python和go语言示例)

摘要: 平时工作中少不了文件共享,所以了解文件共享的方法很有必要。文件共享有很多方法,大致分为以下几类:1、系统共享(windows共享或samba等):windows下我们可以借助windows共享完成简单的文件共享,linux下也可以用samba之类的软件轻松实现。2、ftp共享:可以借助常见的ftp软件实现。3、http共享:可以借助常见的web服务器(比如IIS、Apache等)实现。今天我要介绍的是http文件共享。首先以IIS为例介绍下用常用的web服务器实现文件共享的方法,具体如下(以我机器为例):1、打开IIS,打开“网站 -->默认网站”,右键点击“属性”,点击“主目录”,勾选 阅读全文

posted @  2012-02-11 16:23  Mike_Zhang 阅读(1679) |  评论 (0)   编辑

 

windows下用notepad++配置go语言开发环境

摘要: 我在前一篇文章(http://www.cnblogs.com/MikeZhang/archive/2012/02/09/windowsGo.html)中介绍了怎么在windows下安装go语言,今天我要介绍的是怎么用notepad++配置go语言开发环境。一、准备工作:1、安装go语言;2、将go/bin目录加入环境变量;3、安装notepad++;二、配置notepad++支持go语言语法高亮1、下载notepad++的go语言支持包(http://notepad-plus.sourceforge.net/commun/userDefinedLang/go.zip);2、将文件userDef 阅读全文

posted @  2012-02-10 11:26  Mike_Zhang 阅读(2362) |  评论 (2)   编辑

 

windows下用go语言写程序

摘要: linux下,google的go语言安装起来很方便,用起来也很爽,几行代码就可以实现很强大的功能。现在的问题是我想在windows下玩……其实windows下也不麻烦,具体见下文。一、安装go语言:1、安装MinGW(https://bitbucket.org/jpoirier/go_mingw/downloads)2、下载源码 进入C:\MinGW,双击mintty开启终端窗口; 执行"hg clone -u release https://go.googlecode.com/hg/ /c/go"下载源码;3、编译源码 执行"cd /c/go/src" 阅读全文

posted @  2012-02-09 18:09  Mike_Zhang 阅读(2670) |  评论 (2)   编辑

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Go语言实现http共享(总结)的详细内容...

  阅读:42次