go - 使用文件 i/o 运行 go 可执行文件

标签 go binaryfiles

文件夹 bin 下的可执行文件 tapi 无法创建日志文件(在我的 Mac 中),顺便说一句。我已经创建了文件夹 logs

panic: open logs/1435584525.txt: no such file or directory

它在命令行 tapi 下正确运行

我使用的代码是:

t := time.Now()
filename := "logs/" + strconv.FormatInt(t.Unix(),10) + ".txt"
logFile, err := os.OpenFile(filename, os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
if err != nil {
    panic(err)
}
defer logFile.Close()
log.SetOutput(logFile)

文件结构是:

垃圾箱/塔皮

包装

src/用户名/tapi/tapi.go

最佳答案

问题出在“logs/”,这是一个相对路径。如果您使用绝对路径(例如创建并使用“/logs/”),那么这将解决问题。

我刚刚成功安装并运行了它(在创建/logs/和设置权限之后):

package main

import (

    "log"
    "os"
    "time"
    "strconv"
)


func main() {

    t := time.Now()
    filename := "/logs/" + strconv.FormatInt(t.Unix(), 10) + ".txt"
    logFile, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        panic(err)
    }
    defer logFile.Close()
    log.SetOutput(logFile)
}

如果您保留相对路径,则在目录结构中添加:“/src/tapi/logs”即可。

在那种情况下,这对我来说运行良好:

package main

import (

    "log"
    "os"
    "time"
    "strconv"
)


func main() {

    t := time.Now()
    filename := "logs/" + strconv.FormatInt(t.Unix(), 10) + ".txt"
    logFile, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        panic(err)
    }
    defer logFile.Close()
    log.SetOutput(logFile)
}

关于go - 使用文件 i/o 运行 go 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117078/

相关文章:

c++ - 如何仅将 16 位分配给二进制文件中的任何整数而不是 C++ 中的正常 32 位?

go - Golang代理从请求获取RequestURI

pointers - 如何将不同的错误接口(interface)实现存储在一起,然后在 Go 中使用它们进行类型比较?

go - 如何设置仅适用于我的 LAN 网络的 golang 服务器监听器

c++ - 读写二进制文件

c++ - 如何在 C++ 中将二进制文件附加到二进制文件

go - 如何在其他包中获取标志参数

go - 一个读取go文件并执行它的应用程序

java - Java 中无法正确读取二进制文件

c - 检测不完整的 32 位二进制数据