写点什么

初识 Golang 之 err 概述

用户头像
Kylin
关注
发布于: 2021 年 05 月 09 日
package main
import ( "bufio" "fmt" "log" "os")
func main() { fmt.Print("Enter a grade: ") reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') log.Fatal(err) fmt.Println(input)}

// consoleF:\workspace\Golang>go run failing.goEnter a grade: 5552021/03/28 09:43:02 <nil>exit status 1
复制代码


这段程序报告了一个错误并退出了,即使它成功从键盘读取了输入。


从上面这段程序可以看出,如果 err 变量中的值为 nil,则表示从键盘读取成功。现在我们可以结合 if 语句,仅在 err 不为 nil 时退出程序。


package main
import ( "bufio" "fmt" "log" "os")
func main() { fmt.Print("Enter a grade: ") reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') if err != nil { log.Fatal(err) } fmt.Println(input)}

// consoleF:\workspace\Golang>go run failing.goEnter a grade: 5050
复制代码


再看下面一段程序。是一个打印文件大小的 Go 程序。它调用 os.Stat 函数,该函数返回一个 os.FileInfo 值,可能还返回错误值。然后它对 FileInfo 值调用 Size 方法来获取文件大小。



package main
import ( "fmt" "os")
func main() { fileInfo, _ := os.Stat("my.txt") fmt.Println(fileInfo.Size())}

//consolepanic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x38 pc=0x1527af]
goroutine 1 [running]:main.main() F:/workspace/Golang/failing.go:10 +0x4fexit status 2
复制代码


上面这段程序使用_空白标识符来忽略 os.Stat 返回的错误值。如果发生了错误(如果文件不存在就会发生错误),将导致程序失败。


下面我们添加一段代码,如果错误不是 nil,则将其传递给 log.Fatal。

package main
import ( "fmt" "log" "os")
func main() { fileInfo, err := os.Stat("my.txt") if err != nil { log.Fatal(err) } fmt.Println(fileInfo.Size())}
// console2021/03/28 23:23:16 CreateFile my.txt: The system cannot find the file specified.exit status 1
复制代码


用户头像

Kylin

关注

现实的理想主义者 2019.10.08 加入

【坐标】:魔都 【品种】:程序媛 【标签】:技术宅、大吃货 【追求】:改变世界、改变自己 【信条】:每次前进一小步

评论

发布
暂无评论
初识Golang之err概述