go-staticcheck: file的值从未被使用(SA4006)

huangapple go评论268阅读模式
英文:

go-staticcheck: value of file is never used (SA4006)

问题

我写了一个用于记录错误的函数,它能够正常工作,但是IDE报告了一个错误(该文件的值从未被使用(SA4006)go-staticcheck)。

示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. )
  7. func errorLogger(err error, msg string) {
  8. fileWrite, _ := os.OpenFile("errorBot.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
  9. log.SetOutput(fileWrite)
  10. log.Fatalf("%s:%s", err, msg)
  11. }
  12. func main() {
  13. fmt.Println("file Open")
  14. file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
  15. errorLogger(err, "Error Open File")
  16. defer file.Close()
  17. }

请说明问题出在哪里,我犯了什么错误。

英文:

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:

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. )
  7. func errorLoger(err error, msg string) {
  8. fileWrite, _ := os.OpenFile("erroBot.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
  9. log.SetOutput(fileWrite)
  10. log.Fatalf("%s:%s", err, msg)
  11. }
  12. func main() {
  13. fmt.Println("file Open")
  14. file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
  15. errorLoger(err, "Error Open File")
  16. defer file.Close()
  17. }

Please clarify what is wrong and where I made a mistake.

答案1

得分: 1

这样做是错误的。只有在出现错误时才记录错误,即使当前没有错误,你也会使用log.Fatal退出并写入到erroBot.log。

以下是更好(也是正确的)的做法:

  1. package main
  2. import (
  3. "log"
  4. "os"
  5. )
  6. func SetupErrLogger(file string) {
  7. f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
  8. if err != nil {
  9. log.Fatalln("Logger setup failed:", err)
  10. }
  11. log.SetOutput(f)
  12. }
  13. func main() {
  14. SetupErrLogger("erroBot.log")
  15. file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
  16. if err != nil {
  17. log.Fatalln(err)
  18. }
  19. defer file.Close()
  20. // 对文件进行操作,否则会引发SA4006错误
  21. }
英文:

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:

  1. package main
  2. import (
  3. "log"
  4. "os"
  5. )
  6. func SetupErrLogger(file string) {
  7. f, err := os.OpenFile(file, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
  8. if err != nil {
  9. log.Fatalln("Logger setup failed:", err)
  10. }
  11. log.SetOutput(f)
  12. }
  13. func main() {
  14. SetupErrLogger("erroBot.log")
  15. file, err := os.OpenFile("no-file.txt", os.O_APPEND|os.O_WRONLY, 0644)
  16. if err != nil {
  17. log.Fatalln(err)
  18. }
  19. defer file.Close()
  20. // Do something with file, else SA4006 is raised
  21. }

huangapple
  • 本文由 发表于 2021年8月4日 22:04:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/68652702.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定