Go语言文件操作

Python03

Go语言文件操作,第1张

本文主要介绍了Go语言中文件读写的相关操作。

文件是什么?

计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。

os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err 。对得到的文件实例调用 close() 方法能够关闭文件。

为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。

Read方法定义如下:

它接收一个字节切片,返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和 io.EOF 。 举个例子:

使用for循环读取文件中的所有数据。

bufio是在file的基础上封装了一层API,支持更多的功能。

io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入。

os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能。

其中:

name :要打开的文件名 flag :打开文件的模式。 模式有以下几种:

perm :文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。

分布式存储架构由三个部分组成:客户端、元数据服务器和数据服务器。客户端负责发送读写请求,缓存文件元数据和文件数据。元数据服务器负责管理元数据和处理客户端的请求,是整个系统的核心组件。数据服务器负责存放文件数据,保证数据的可用性和完整性。该架构的好处是性能和容量能够同时拓展,系统规模具有很强的伸缩性。

对象存储最常用的方案,就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外搞几台服务作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。

之所以出现了对象存储这种东西,是为了克服块存储与文件存储各自的缺点,发扬它俩各自的优点。简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储。

这里我介绍两种方法!

一  :用IIS或者Apache之类的web服务器软件实现http文件共享

     这里我以IIS为例介绍下用常用的web服务器实现文件共享的方法,具体如下(以我机器为例):

      1、打开IIS,打开“网站 -->默认网站”,右键点击“属性”,点击“主目录”,勾选“目录浏览”选项,如下图所示:

      

    2、进入文件夹C:\Inetpub\wwwroot,拷贝文件“1.7z“到这个目录:

       

    3、打开浏览器,输入本机ip(比如我的:192.168.1.123),即可看到共享的文件并可以下载:

       

       点击“1.7z”即可下载。

二  :用python或者go语言实现http文件共享

1、python实现http文件共享:

      用过python的都知道python有一个很牛x的命令:

   python -m SimpleHTTPServer

    在C:\Python27下运行命令:

    

     打开浏览器,可以看到如下效果:

   

     这个命令的默认端口是8000,如果我再加一个端口参数,可以用其它端口进行访问,命令如下:

   

    打开浏览器:

   

        知道了这个原理,可以写个bat文件,在需要的时候copy到相应的目录双击即可,比如我的httpShare.bat文件如下:

           python -m SimpleHTTPServer 80

           默认用80端口,访问时候只需要输入我的ip地址即可。

2、go语言实现http文件共享:

上面的方法很方便,windows和linux通吃,不过前提是要安装python

这里我有个用go语言实现的,也是windows和linux通吃(windows下不知道怎么配置的可以参考我之前的文章:http://www.2cto.com/kf/201203/122327.html,类似C/C++,是代码可移植,使用前你只需编译一次。

下面是示例代码(httpShare.go):

package main

import (

    "http"

    "fmt"

)

func main(){

    h := http.FileServer(http.Dir("."))

    var port string

    fmt.Printf("Please input port Number: ")

    fmt.Scanf("%s",&port)

    http.ListenAndServe(":"+port, h)   

}

运行效果: