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

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

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
}

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:

确定