golang讲解(go语言)标准库分析之os/user os/signal (os包完结篇)

widuu 2014-1-7 Go语言 4,502 2 喜欢 (0)

今天我们讲golang os包的最后两个包user、signal

os/user包
(1)type UnknownUserError string其中这个里边有一个方法func (e UnknownUserError) Error() string返回木有用户的错误信息
[php]
import (
"fmt"
"os/user"
)

func main() {
var err user.UnknownUserError
err = "这个我自己设定"
fmt.Println(err.Error()) //user: unknown user 这个我自己设定
}

[/php]

(2)type UnknownUserIdError int里边有一个方法func (e UnknownUserIdError) Error() string返回的依然是木有用户的错误信息
[php]
import (
"fmt"
"os/user"
)

func main() {
var err user.UnknownUserIdError
err = 2
fmt.Println(err.Error()) //user: unknown userid 2
}

[/php]

(3)type User我们先看下结构是什么?当然User有个BUG我们会看到

[php]
type User struct {
Uid string // 用户id
Gid string // 用户组id
Username string //用户名
Name string //用户全名
HomeDir string //用户家目录
}
[/php]
[1]func Current() (*User, error)返回当前用户的信息
[php]
import (
"fmt"
"os/user"
)

func main() {
/*
type User struct {
Uid string // 用户id
Gid string // 用户组id
Username string //用户名
Name string //用户全名
HomeDir string //用户家目录
}
*/
user, _ := user.Current()
//我是windows平台
fmt.Println(user.Gid) //S-1-5-21-955939588-3462822645-4196941772-513
fmt.Println(user.HomeDir) //C:\Users\Administrator
fmt.Println(user.Uid) //S-1-5-21-955939588-3462822645-4196941772-500
fmt.Println(user.Name) //nil
fmt.Println(user.Username) //widuu\Administrator
}

[/php]

[2]先看BUG Lookup and LookupId functions do not set Gid and HomeDir fields in the User struct returned on windows. 这个是windows平台上的错误,找不到HomeDir的错误和没有设置Gid我们看下,第一个func Lookup(username string) (*User, error),我是windows平台写的看下代码和返回
[php]
import (
"fmt"
"os/user"
)

func main() {
user, err := user.Lookup("widuu\\Administrator")
if err != nil {
/*
我是windows平台 返回Unknown directory为什么呢?在标准库里我们可以看到有个BUG是这样写的
Lookup and LookupId functions do not set Gid and HomeDir fields in the User struct returned on windows.
这里我们就明白了,widnows唉唉唉~~~~
*/
fmt.Println(err)
}
fmt.Println(user.HomeDir)
}

[/php]

[3]func LookupId(uid string) (*User, error)根据uid返回用户的信息,依然是windows平台错误,我放出代码自己测试吧
[php]
import (
"fmt"
"os/user"
)

func main() {
user, err := user.LookupId("S-1-5-21-955939588-3462822645-4196941772-500")
if err != nil {
fmt.Println(err) //Unknown directory 一样的windows bug
}
fmt.Println(user.HomeDir)
}

[/php]

os/signal

(1)这个包就有两个方法是传递信号第一个func Notify(c chan<- os.Signal, sig ...os.Signal)
[php]
import (
"fmt"
"os"
"os/signal"
)

func main() {
//设置一个channel来发送信号
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)

// 一直运行一直到收到一个信号

s := <-c

fmt.Println("Got signal:", s) //当我停止运行时 Got signal: interrupt

}

[/php]

[2]func Stop(c chan<- os.Signal)这个函数是停止信号接收,给个代码让大家理解
[php]
import (
"fmt"
"os"
"os/signal"
)

func main() {
//设置一个channel来发送信号
c := make(chan os.Signal, 1)
// 一直运行一直到收到一个信号
signal.Notify(c, os.Interrupt, os.Kill)

//终端信号的接收
//signal.Stop(c) //程序运行结过exit status 2
s := <-c

fmt.Println("Got signal:", s) //当我停止运行时 Got signal: interrupt

}
[/php]
BUG This package is not yet implemented on Plan 9.

到这里我们的OS包就讲完了,然后我们继续讲其它的包,如果你喜欢请继续关注我们

Golang标准库http/url Values

Golang标准库

转载请注明来自微度网络,本文标题:《golang讲解(go语言)标准库分析之os/user os/signal (os包完结篇)》

喜欢 0 发布评论
Top