Go基础编程实践(五)—— 错误和日志
自定义错误类型
Go中可以使用errors.New()创建错误信息,也可以通过创建自定义错误类型来满足需求。error是一个接口类型,所有实现该接口的类型都可以当作一个错误类型。
// error类型定义
type error interface {
// Error方法给出了错误描述
Error() string
}
package main
import "fmt"
// 创建一个表示错误的结构体类型,错误类型命名约定以Error结尾
type myError struct {
shortMessage string
detailedMessage string
}
// 实现error接口
// 引用传递以得到更好的内存管理
func (e *myError) Error() string {
return e.shortMessage + "\n" + e.detailedMessage
}
func doSomething() error {
return &myError{shortMessage:"Wohoo something happened!", detailedMessage:"File cannot found!"}
}
func main() {
err := doSomething()
// fmt.Println在打印错误时会在内部调用Error()方法,得到错误描述
fmt.Println(err)
}
记录日志
package main
import (
"fmt"
"log"
"os"
)
func main() {
logFile, err := os.Create("logfile")
if err != nil {
fmt.Println("An error occured...")
}
defer logFile.Close()
// SetOutput设置标准logger的输出位置
log.SetOutput(logFile)
log.Println("Doing some logging here...")
// Fatalln等价于调用Println后调用os.Exit(1).
log.Fatalln("Fatal: Application crashed!")
}
捕获异常
package main
import "fmt"
func main() {
sayHello()
fmt.Println("After the panic was recovered!")
}
func sayHello() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
writeSomething()
}
func writeSomething() {
panic("Write operation error")
}
Go基础编程实践(五)—— 错误和日志的更多相关文章
- 并发编程实践五:ReentrantLock
ReentrantLock是一个可重入的相互排斥锁,实现了接口Lock,和synchronized相比,它们提供了同样的功能.但ReentrantLock使用更灵活.功能更强大,也更复杂.这篇文章将为 ...
- Go基础编程实践(六)—— 文件
检查文件是否存在 在此程序同目录下创建log.txt文件,以检测. package main import ( "os" "fmt" ) func main() ...
- Go基础编程实践(十)—— 数据库
从数据库中读取数据 在http://sqlitebrowser.org/下载sqlite3可视化工具,在本main.go同目录下创建personal.db数据库,创建表如下: package main ...
- Go基础编程实践(九)—— 网络编程
下载网页 package main import ( "io/ioutil" "net/http" "fmt" ) func main() ...
- Go基础编程实践(八)—— 系统编程
捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Si ...
- Go基础编程实践(七)—— 并发
同时运行多个函数 观察常规代码和并发代码的输出顺序. // 常规代码,顺序执行,依次输出 package main import ( "fmt" "time" ...
- Go基础编程实践(四)—— 数组和map
数组去重 package main import "fmt" func main(){ intSlice := []int{1,5,5,5,5,7,8,6,6, 6} fmt.Pr ...
- Go基础编程实践(三)—— 日期和时间
日期和时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 current := ti ...
- Go基础编程实践(二)—— 类型转换
bool to string strconv包的FormatBool函数用于将bool转为string package main import ( "fmt" "strc ...
随机推荐
- [RN] React Native中使用 react-native-scrollable-tab-view嵌套在ScrollView里,导致 子内容 在安卓上无法显示
React Native中使用 react-native-scrollable-tab-view嵌套在ScrollView里,导致 子内容 在安卓上无法显示 问题: 0.9.0 或 0.8.0 版本的 ...
- 【题解】洛谷 P2725 邮票 Stamps
目录 题目 思路 \(Code\) 题目 P2725 邮票 Stamps 思路 \(\texttt{dp}\).\(\texttt{dp[i]}\)表示拼出邮资\(i\)最少需要几张邮票. 状态转移方 ...
- VUE的生命周期——钩子函数
- JavaScript 整数转大写中文
function toChinese(money){ var chNum=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; var maxnum=999999999 ...
- win10 关闭开机密码
在运行对话框里输入:netplwiz 控制面板(control)>电源选项>更改计算机休眠时间-选为 从不
- IIS基本设置、回收机制、性能、并发、安全性
通常把站点发布到IIS上运行正常后,很少会去考虑IIS提供的各种参数,如何配置才是最适合当前站点运行需要的?这篇文章,从基本设置.回收机制.性能.并发.安全性等IIS设置讲解应当如何优化. 先来“II ...
- centOS7开启ssh免密登陆
一.登陆服务器生成ssh-key 二.把ssh-key复制到被登陆机器上 三.设置权限 root# .ssh 文件夹权限 root# .ssh/authorized_keys 文件权限 四.测试是否正 ...
- 暑假gosh计划
[要参与的事项]: 1.大创 2.CTF 3.ACM 4.自己的巴拉巴拉巴 [基本目标]: 1.大创 学完一本Java入门教材 学习Material Design,了解典型交互,进行ui初步设计 2. ...
- mybatis在sql中的CDATA区
示例 <if test="startTime != null"> <![CDATA[ AND rra.create_time >= #{startTime} ...
- python PIL 图像处理
python PIL 图像处理 This blog is from: https://www.jianshu.com/p/e8d058767dfa Image读出来的是PIL的类型,而skimage. ...