英文:
go-staticcheck: value of file is never used (SA4006)
问题
我写了一个用于记录错误的函数,它能够正常工作,但是IDE报告了一个错误(该文件的值从未被使用(SA4006)go-staticcheck)。
示例代码:
package main
import (
"fmt"
"log"
"os"
)
func errorLogger(err error, msg string) {
fileWrite, _ := os.OpenFile("errorBot.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
log.SetOutput(fileWrite)
log.Fatalf("%s:%s", err, msg)
}
func main() {
fmt.Println("file Open")
file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
errorLogger(err, "Error Open File")
defer file.Close()
}
请说明问题出在哪里,我犯了什么错误。
英文:
I wrote a function for logging errors, it works, but the IDE writes about an error(this value of file is never used (SA4006) go-staticcheck)
Sample Code:
package main
import (
"fmt"
"log"
"os"
)
func errorLoger(err error, msg string) {
fileWrite, _ := os.OpenFile("erroBot.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
log.SetOutput(fileWrite)
log.Fatalf("%s:%s", err, msg)
}
func main() {
fmt.Println("file Open")
file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
errorLoger(err, "Error Open File")
defer file.Close()
}
Please clarify what is wrong and where I made a mistake.
答案1
得分: 1
这样做是错误的。只有在出现错误时才记录错误,即使当前没有错误,你也会使用log.Fatal退出并写入到erroBot.log。
以下是更好(也是正确的)的做法:
package main
import (
"log"
"os"
)
func SetupErrLogger(file string) {
f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln("Logger setup failed:", err)
}
log.SetOutput(f)
}
func main() {
SetupErrLogger("erroBot.log")
file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// 对文件进行操作,否则会引发SA4006错误
}
英文:
That's now how it's done. Log errors only if there's an error i.e., currently even if there's no error, you're exiting out with log.Fatal and writing to erroBot.log.
Here's a better (and correct) to do the same:
package main
import (
"log"
"os"
)
func SetupErrLogger(file string) {
f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln("Logger setup failed:", err)
}
log.SetOutput(f)
}
func main() {
SetupErrLogger("erroBot.log")
file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// Do something with file, else SA4006 is raised
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论