今天我们讲golang os包的最后两个包user、signal
func (e UnknownUserError) Error() string
func main() {
var err user.UnknownUserError
err = "这个我自己设定"
fmt.Println(err.Error()) //user: unknown user 这个我自己设定
}
[/php]
func (e UnknownUserIdError) Error() string
func main() {
var err user.UnknownUserIdError
err = 2
fmt.Println(err.Error()) //user: unknown userid 2
}
[/php]
(3)type User我们先看下结构是什么?当然User有个BUG我们会看到
func Current() (*User, error)
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]
func Lookup(username string) (*User, error)
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]
func LookupId(uid string) (*User, error)
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
func Notify(c chan<- os.Signal, sig ...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]
func Stop(c chan<- 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包就讲完了,然后我们继续讲其它的包,如果你喜欢请继续关注我们