【发布时间】:2015-06-17 11:42:33
【问题描述】:
我正在掌握 Golang 的做事方式。首先是一些示例代码:
package main
import (
"log"
"os"
)
func logIt(s string) {
f, _ := os.OpenFile("errors.log", os.O_RDWR|os.O_CREATE|os.O_APPEND,
0666)
defer f.Close()
log.SetOutput(f)
log.Println(s)
}
type iAm func(string)
func a(iam string) { logIt(iam + " A") }
func b(iam string) { logIt(iam + " B") }
func c(iam string) { logIt(iam + " C") }
var funcs = map[string]iAm{"A": a, "B": b, "C": c}
func main() {
funcs["A"]("Je suis")
funcs["B"]("Ich bin")
funcs["A"]("Yo soy")
funcs["D"]("Soy Yo")
}
说明
- 我正在将我的所有日志输出到一个文件中,以便以后对其进行监控。这是正确的引导方式吗?
- 我想根据用户输入确定在运行时调用的正确函数。为此,我将函数打包为 Golang 映射 - 在 PHP 中,我将使用关联数组。这行得通。但是,这是一种有效的做事方式吗?
- 最后,您会注意到我的地图中实际上没有 D 键。最后一个 funcs 调用导致 Go 抛出一个不稳定的问题。在另一种语言中,我会将这些调用包装在 try... 块中并避免该问题。据我了解,Go 的哲学是检查密钥的有效性 first 并恐慌,而不是试图盲目地使用该密钥。对吗?
我是围棋初学者,所以我可能对我使用的其他语言有包袱。在我看来,以先发制人的方式处理异常情况(在使用之前检查密钥)既不聪明也不高效。对吧?
【问题讨论】:
-
lumberjack 软件包可能有助于简化基于文件的日志记录(即文件轮换、最大大小等),如果您需要更严重的事情:github.com/natefinch/lumberjack
标签: go exception maps associative-array