摘要: 时间和内存消耗 可以用这个便捷脚本 xtime 来测量: #!/bin/sh /usr/bin/time -f '%Uu %Ss %er %MkB %C' "$@" 在 Unix 命令行中像这样使用 xtime goprogexec,这里的 progexec 是一个 Go 可执行程序,这句命令行输出 阅读全文
posted @ 2022-02-05 19:37 Galaxies2580 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 每当函数返回时,我们应该检查是否有错误发生:但是这会导致重复乏味的代码。结合 defer/panic/recover 机制和闭包可以得到一个我们马上要讨论的更加优雅的模式。不过这个模式只有当所有的函数都是同一种签名时可用,这样就有相当大的限制。一个很好的使用它的例子是 web 应用,所有的处理函数都 阅读全文
posted @ 2022-02-05 19:37 Galaxies2580 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 当发生像数组下标越界或类型断言失败这样的运行错误时,Go 运行时会触发运行时 panic ,伴随着程序的崩溃抛出一个 runtime.Error 接口类型的值。这个错误值有个 RuntimeError() 方法用于区别普通错误。 panic 可以直接从代码初始化:当错误条件(我们所测试的代码)很严苛 阅读全文
posted @ 2022-02-05 19:36 Galaxies2580 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 这是所有自定义包实现者应该遵守的最佳实践: 1) 在包内部,总是应该从 panic 中 recover :不允许显式的超出包范围的 panic () 2)向包的调用者返回错误值(而不是 panic)。 在包内部,特别是在非导出函数中有很深层次的嵌套调用时,对主调函数来说用 panic 来表示应该被翻 阅读全文
posted @ 2022-02-05 19:36 Galaxies2580 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 编写测试代码时,一个较好的办法是把测试的输入数据和期望的结果写在一起组成一个数据表:表中的每条记录都是一个含有输入和期望值的完整测试用例,有时还可以结合像测试名字这样的额外信息来让测试输出更多的信息。 实际测试时简单迭代表中的每条记录,并执行必要的测试。 可以抽象为下面的代码段: var tests 阅读全文
posted @ 2022-02-05 19:35 Galaxies2580 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 正如名字一样,这个(recover)内建函数被用于从 panic 或 错误场景中恢复:让程序可以从 panicking 重新获得控制权,停止终止过程进而恢复正常执行。 recover 只能在 defer 修饰的函数中使用:用于取得 panic 调用中传递过来的错误值,如果是正常执行,调用 recov 阅读全文
posted @ 2022-02-05 19:34 Galaxies2580 阅读(189) 评论(0) 推荐(0) 编辑
摘要: Go 有一个预先定义的 error 接口类型 type error interface { Error() string } 错误值用来表示异常状态。errors 包中有一个 errorString 结构体实现了 error 接口。当程序处于错误状态时可以用 os.Exit(1) 来中止运行。 定义 阅读全文
posted @ 2022-02-05 19:34 Galaxies2580 阅读(46) 评论(0) 推荐(0) 编辑
摘要: os 包有一个 StartProcess 函数可以调用或启动外部系统命令和二进制可执行文件;它的第一个参数是要运行的进程,第二个参数用来传递选项或参数,第三个参数是含有系统环境基本信息的结构体。 这个函数返回被启动进程的 id(pid),或者启动失败返回错误。 exec 包中也有同样功能的更简单的结 阅读全文
posted @ 2022-02-05 19:34 Galaxies2580 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 首先所有的包都应该有一定的必要文档,然后同样重要的是对包的测试。 名为 testing 的包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能。 备注:gotest 是 Unix bash 脚本,所以在 Windows 下你需要配置 MINGW 环境;在 Windows 环境 阅读全文
posted @ 2022-02-05 19:33 Galaxies2580 阅读(134) 评论(0) 推荐(0) 编辑
摘要: et08 package main import ( "fmt" "even/even" ) func main() { for i:=0; i<=100; i++ { fmt.Printf("Is the integer %d even? %v\n", i, even.Even(i)) } } e 阅读全文
posted @ 2022-02-05 19:33 Galaxies2580 阅读(52) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示