이것은 golang으로 파일에 처음 로그인하는 시도입니다.왜 log.Println ("파일에 로그인하지 않습니까?")?
file, _ := os.Open("logfile")
log.SetOutput(file)
log.Println("foo")
이 줄은 빌드되지만 작동하지 않습니다. 왜?
이것은 golang으로 파일에 처음 로그인하는 시도입니다.왜 log.Println ("파일에 로그인하지 않습니까?")?
file, _ := os.Open("logfile")
log.SetOutput(file)
log.Println("foo")
이 줄은 빌드되지만 작동하지 않습니다. 왜?
왜 log.Println ("파일에 기록하지 않습니다")?
이유는 파일이 존재하지 않거나 코드를 형성하지 않았기 때문입니다.
file, _ := os.Open("logfile")
_
을 사용하고 있으며 오류를 확인하지 않았습니다. 파일에 무언가를 쓰고 싶다면이 점이 중요합니다. 예를 들어,이 코드를 보면 :
f, err := os.OpenFile(filePath+fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm)
if err != nil {
// if error then you need to create the file first
err = os.MkdirAll(filePath, os.ModePerm)
}
코드 위에서 당신은 오류가 if err != nil
를 사용하여 검사를 볼 수 있습니다. 파일이 없으면 먼저 파일을 만듭니다. os.MkdirAll()
을 사용하십시오.
'return createLogFile (prefix, filePath, fileName)'이어야합니다. 게다가 어떤 이유로 경로가 존재하지만 파일에 접근 할 수없는 경우 (허가가없는 경우) 무한 루프가됩니다. – zerkms
@zerkms 아하 네가 맞다는 것을 알았어. 지적 해 주셔서 감사합니다. –
file, err := os.Open("file.go") // For read access.
if err != nil {
\t // do something
}
// and try to include the file path...
os.Open 호출 OpenFile (이름, O_RDONLY, 0). 파일이 없으면 O_CREATE 플래그를 갖지 않습니다. 따라서 O_CREATE 플래그로 OpenFile을 호출해야합니다. 오류 코드를 주석으로 처리했습니다 :
package main
import (
"log"
"os"
"syscall"
)
const (
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
)
func main() {
/*f1, err := os.OpenFile("testlogfile1", O_RDONLY, 0) // Equivalent to os.Open("testlogfile1")
if err != nil {
log.Fatalf("error opening file1: %v", err)
}
// ** error opening file: open testlogfile1: no such file or directory exit status 1 **
defer f1.Close()
log.SetOutput(f1)
log.Println("This is a test for log 1")*/
f2, err := os.OpenFile("testlogfile2", O_RDWR | O_CREATE | O_APPEND, 0644)
/* Note that you want:
* O_RDWR to write to the file
* O_CREATE to create file if it does not exist
* O_APPEND to add additional information to existing file */
if err != nil {
log.Fatalf("error opening file2: %v", err)
}
defer f2.Close()
log.SetOutput(f2)
log.Println("This is a test for log 2")
}
항상 오류를 확인하십시오!
오류를 무시한 다음 코드가 의도 한대로 작동하지 않는 이유를 묻습니다. – zerkms