Go语言的os包中常用函数初步归纳

(1)os.Getwd函数原型是func Getwd() (pwd string, err error) 返回的是路径的字符串和一个err信息,为什么先开这个呢?因为我看os的包的时候第一个是Chkdir这个包,但是你不知道当前目录怎么知道改变目录了呢?所以先说Getwd() 函数demo

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 dir, _ := os.Getwd()
 fmt.Println("当前的目录是:", dir)  //当前的目录是: D:\test 我的环境是windows 如果linix 就是/xxx/xxx
}

(2)既然说了Getwd()了,我们就把os里边的Get全部都说了吧!os.Getenv()获取系统的环境变量,函数原型是func Getenv(key string) string输入的是一个string的环境变量名称,返回的是值

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 path := os.Getenv("GOPATH")
 fmt.Println("环境变量GOPATH的值是:", path) //windows下 环境变量PATH的值是: D:\test;C:\Go\bin; linux 环境变量GOPATH的值是: /data/goweb
}

(3)下边的get信息 如果没有:=的就是返回的都是int一般很少用到的 我就给注释了做什么的?然后windows和linux结果是什么?
 fmt.Println(os.Getegid())      windows -1  linux  0     //调用者的group的id
 fmt.Println(os.Geteuid())     windows -1  linux  0     //用户的uid
 fmt.Println(os.Getgid())      windows -1  linux  0     //调用者的gid的id
 g, _ := os.Getgroups()       
 fmt.Println(g)                windows []  linux  []    //返回的是一个[]int的切片 显示调用者属于组的一系列id
 fmt.Println(os.Getpagesize())  windows 4096linux  4096  //windows里边叫做虚拟内存 linux里边叫做swap
 fmt.Println(os.Getppid())      windows -1  linux  8621  //调用者的组的进程id
 fmt.Println(os.Getuid())    windows -1  linux  0  //调用者的数字用户id
(4)os.Chdir()这个函数的原型是func Chdir(dir string) error 输入字符类型,返回的是错误结果,如果改变成功了error=nil

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 fmt.Println(os.Getwd())              //显示当前的目录 D:\test <nil>
 fmt.Println(os.Chdir("D:/test/src")) //返回<nil>正确切换目录了
 fmt.Println(os.Getwd())              //切换后的目录D:\test\src <nil>
}

(5)os.Stat()这个函数是获取文件的信息,函数函数的原型func Stat(name string) (fi FileInfo, err error)输出是文件的名称返回一个FileInfo的接口和err信息,上一个分析ioutil的时候我们就介绍FileInfo的接口类型了

代码如下:

type FileInfo interface {
    Name() string       // 文件的名称
    Size() int64        // 唱过文件的大小
    Mode() FileMode     // 文件的权限
    ModTime() time.Time // 时间
    IsDir() bool        // 是否是目录
    Sys() interface{}   // 基础数据源接口(can return nil)
}
import (
 "fmt"
 "os"
)

func main() {
 filemode, _ := os.Stat("widuu.go") 
 fmt.Println(filemode.Mode())        //获取权限 linux 0600
}

(6)os.Chmod()这个函数的原型是func Chmod(name string, mode FileMode) error改变文件的属性 譬如读写,linux上的0755这样大家可以理解了吧

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 filemode, _ := os.Stat("widuu.go") 
 fmt.Println(filemode.Mode())        //获取权限 linux 0600
 err := os.Chmod("widuu.go", 0777)   //改变的是文件的权限
 if err!=nil{
  fmt.Println("修改文件权限失败")
 }
 filemode, _ = os.Stat("widuu.go") 
 fmt.Println(filemode.Mode())        //获取权限是0777

}

(7)os.Chtime()这个包,函数的原形是func Chtimes(name string, atime time.Time, mtime time.Time) error 输入string的文件的名称 访问时间 创建时间 返回的是error接口信息

代码如下:

import (
 "fmt"
 "os"
 "time"
)

func main() {
 err := os.Chtimes("2.go", time.Now(), time.Now())  //改变时间
 if err != nil {
  fmt.Println(err)
 }
 fi, _ := os.Stat("2.go")
 fmt.Println(fi.ModTime())   //输出时间 2013-12-29 20:46:23.0005257 +0800 +0800
}

(8)os.Environ()的作用是获取系统的环境变量,函数原形是func Environ() []string返回是环境变量的[]string切片,说道这个就要和其他的一起说明了,那就是os.ClearEnv()清空环境变量

代码如下:

func main() {
 data := os.Environ() //输出之前的环境变量 APPDATA=C:\Users\xiaolvge\AppData\Roaming CLASSPATH=.;D:\java\jdk1.6.0_38…………
 fmt.Println(data)
 os.Clearenv() //清空环境变量
 data = os.Environ()
 fmt.Println(data) //输出[]string类型的切片[]
}

(9)os.Exit()就是中断程序返回自定义的int类型的代码,函数运行是func Exit(code int)输入一个int的值就可以了

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 func() {
  for {
   fmt.Println("这个是匿名函数")
   os.Exit(1)    //输出exit status 1中断操作
  }
 }()
}

(10)函数os.Expand()这个其实就是一个回调函数替换的方法,函数的原形是func Expand(s string, mapping func(string) string) string 输入的是一个string。对应的是func(string)string的替换字符串的方法,如果没有字符就替换为空

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 mapping := func(s string) string {
  m := map[string]string{"widuu": "www.jb51.net", "xiaowei": "widuu"}
  return m[s]
 }
 data := "hello $xiaowei blog address $widuu"
 fmt.Printf("%s", os.Expand(data, mapping)) //输出hello widuu blog address www.jb51.net}

(11)os.ExpandEnv()把字符串的s替换成环境变量的内容,函数的原形是func ExpandEnv(s string) string,输入的当然是要替换的字符,输出的当然还是字符串了

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 data := "GOBIN PATH $GOBIN"
 fmt.Println(os.ExpandEnv(data)) //输出我本地的环境变量的GOBIN的地址GOBIN PATH C:\Go\bin
}

(12)os.Hostname()这个函数看字面的思意就懂了,是返回主机的HostName(),函数的原形是func Hostname() (name string, err error)返回主机名字和一个error的接口信息

代码如下:

import (
 "fmt"
 "os"
)

func main() {
 data, _ := os.Hostname()
 fmt.Println(data) //我是windows环境下返回我的win的主机名 WIDUU
}

(0)

相关推荐

  • GO语言延迟函数defer用法分析

    本文实例讲述了GO语言延迟函数defer用法.分享给大家供大家参考.具体分析如下: defer 在声明时不会立即执行,而是在函数 return 后,再按照 FILO (先进后出)的原则依次执行每一个 defer,一般用于异常处理.释放资源.清理数据.记录日志等.这有点像面向对象语言的析构函数,优雅又简洁,是 Golang 的亮点之一. 代码1:了解 defer 的执行顺序 复制代码 代码如下: package main import "fmt" func fn(n int) int {

  • Go语言中的流程控制结构和函数详解

    这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和无条件跳转. if if也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事. Go里面if条件判断语句中不需要括号,如下代码所示: 复制代码 代码如下: if x > 10 {     fmt.Println("x is greater than 10&

  • GO语言Defer用法实例分析

    本文实例讲述了GO语言Defer用法.分享给大家供大家参考.具体分析如下: defer:调用一个被 defer 的函数时在函数刚要返回之前延迟执行,当函数无论怎样返回,某资源必须释放时,可用这种与众不同.但有效的处理方式.传统的例子包括解锁互斥或关闭文件. 这样延迟一个函数有双重优势:一是你永远不会忘记关闭文件,此错误在你事后编辑函数添加一个返回路径时常常发生.二是关闭和打开靠在一起,比放在函数尾要清晰很多. 复制代码 代码如下: /**  * Created with IntelliJ IDE

  • Go语言中普通函数与方法的区别分析

    本文实例分析了Go语言中普通函数与方法的区别.分享给大家供大家参考.具体分析如下: 1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然. 2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以. 以下为简单示例: 复制代码 代码如下: package structTest    //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)  //Date:2014-4-3 10:00:07    import ( 

  • go语言简单的处理http请求的函数实例

    本文实例讲述了go语言简单的处理http请求的函数.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: func someHandler(w http.ResponseWriter, r *http.Request) {     // read form value     value := r.FormValue("value")     if r.Method == "POST" {         // receive posted data   

  • 总结Go语言中defer的使用和注意要点

    前言 defer是golang语言中的关键字,用于资源的释放,会在函数返回之前进行调用. 一般采用如下模式: f,err := os.Open(filename) if err != nil { panic(err) } defer f.Close() 如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用. 延时调用函数的语法如下: defer func_name(param-list) 当一个函数调用前有关键字 defer 时, 那么这个函数的执行会推迟到包含这个

  • Go语言中append函数用法分析

    本文实例分析了Go语言中append函数用法.分享给大家供大家参考.具体如下: Go语言中append的功能十分强大,使用它可以使很多功能的实现变得更加简洁.以下为简单对比: .将一个slice插入到另一个slice的指定位置: 不使用append: 复制代码 代码如下: func insertSliceAtIndex(slice_origin []int, slice_to_insert []int,      insertIndex int) (result []int, err error

  • Go语言常见哈希函数的使用

    myhash.go /** * Created with IntelliJ IDEA. * User: liaojie * Date: 12-9-8 * Time: 下午3:53 * To change this template use File | Settings | File Templates. */ package main import ( "crypto/md5" "crypto/sha1" "crypto/sha256" &qu

  • Go语言中函数的参数传递与调用的基本方法

    按值传递函数参数,是拷贝参数的实际值到函数的形式参数的方法调用.在这种情况下,参数在函数内变化对参数不会有影响. 默认情况下,Go编程语言使用调用通过值的方法来传递参数.在一般情况下,这意味着,在函数内码不能改变用来调用所述函数的参数.考虑函数swap()的定义如下. 复制代码 代码如下: /* function definition to swap the values */ func swap(int x, int y) int {    var temp int temp = x /* s

  • Go语言截取字符串函数用法

    本文实例讲述了Go语言截取字符串函数用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: func Substr(str string, start, length int) string {     rs := []rune(str)     rl := len(rs)     end := 0             if start < 0 {         start = rl - 1 + start     }     end = start + length        

随机推荐