gpt4 book ai didi

debugging - Golang 调试功能

转载 作者:IT王子 更新时间:2023-10-29 00:45:53 26 4
gpt4 key购买 nike

来自 shell 编程,我在那里使用了很多这样的函数:

log_action() {
case "${1}" in
'ERROR')
EXIT_CODE="${3}"
echo "[${1}] | $(date +"%T") | ${2} | Exiting (${EXIT_CODE})"
exit ${EXIT_CODE};
;;
'WARNING')
echo "[${1}] | $(date +"%T") | ${2} | Line: (${3})"
;;
'DEBUG')
if [[ ${DEBUG} -eq "1" ]]; then {
echo "[${1}] | $(date +"%T") | ${2} | ${3}"
}; fi
;;
*)
echo "[${1}] | $(date +"%T") | ${2} | ${3}"
;;
esac
}


log_action "WARNING" "Cannot Connect to MySQL Database" "${LINENO}")

现在,我开始学习golang,想把所有的bash脚本都转成go。因此,我需要在 golang 中使用相同的功能,我尝试了以下操作:

func logHandler(t string, e string, l string) {
switch t {
case "warning":
fmt.Println("WARNING")
case "error":
fmt.Println("ERROR")
case "debug":
fmt.Println("DEBUG |", e, l)
}
}

logHandler("debug", "Test Function", "LineNumber")

但我不知道如何在调用 logHandler 函数时获取当前行号变量 (LineNumber) 并将其作为字符串或整数传递给函数。

此外,有没有什么方法可以像在 bash 选项中那样以跟踪模式运行 go 脚本:set -o xtrace?

我只是一个初学者,所以如果我做错了什么,请指出正确的方向。谢谢。

最佳答案

这是一种优雅的方式。

我们将使用 runtime 包,方法如下:

package main

import (
"fmt"
"runtime"
)

func main() {
logHandler("warning", "Test Function")
logHandler("error", "Test Function")
logHandler("debug", "Test Function")
}

func logHandler(t, e string) {
switch t {
case "warning":
fmt.Println("WARNING |", e)
case "error":
fmt.Println("ERROR |", e)
case "debug":
// 0 = This function
// 1 = Function that called this function
_, fn, line, _ := runtime.Caller(1)
fmt.Printf("DEBUG | %s:%d | %v\n", fn, line, e)
}
}

Outputs:

WARNING | Test Function
ERROR | Test Function
DEBUG | /home/runner/main.go:11 | Test Function

Working example link


你基本上可以对所有的人都这样做(警告和调试)

如果您感兴趣,这里有一些关于 runtime package 的额外阅读 Material .


灵感来自 this great answer来自 OneOfOne .

关于debugging - Golang 调试功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51389608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com