[已解决]已设置 GOPATH,使用 os.Create () 新建一个 txt 文本,但生成的 txt 文件不在自己的指定路径下
各位大佬好,我是 Golang 新手。在学习新建文件的时候,遇到了一个路径的错误。
1.我的环境
- os : win10 64bit
- go version : go1.13.6 windows/amd64
- IDE : GoLand 2019.3.1 x64
2.我的问题情况
我写了一段生成 txt 文件的代码,想要把这个 txt 放在当前目录下。
写完代码,直接点击了下图红框中的这个按钮来运行代码:
以下是我的全部代码:
package main
import (
"fmt"
"os"
)
func WriteFile(path string) {
//1.打开文件(新建文件)
f, err := os.Create(path)
if err != nil {
fmt.Println("create file failed. err:", err)
return //有错误就结束函数,不让它往下走了
}
//使用完毕,必须关闭文件
defer f.Close() //函数调用完毕,即表示文件使用完毕了
//2.往里面写内容
var s string
for i := 0; i < 10; i++ {
s = fmt.Sprintf("这是第%d行!\n", i)
n, err := f.WriteString(s)
if err != nil {
fmt.Printf("write %d line err:%+v\n", i, err)
} else {
fmt.Printf("wrote %d words.\n", n) //以byte类型来计算长度
}
}
}
func main() {
path := "./demo.txt" //放当前路径下
WriteFile(path)
}
文本文件已生成成功,而且内容也是正确的。但是,文件的位置并不是我所想的结果。我所想的是:这个 txt 文件,它应该生成在 myTest 这个目录下,可是它却跑到了 src 目录下:
3.自我排查
第1步:检查go的环境变量
第2步:检查系统环境变量
第3步:检查IDE工具的配置
第4步:检查了源代码文件的所在位置
最终结果:还是老样子,使用这个 IDE 运行代码。这个 txt 文件,它就是往 src 目录下跑,就是不在 myTest 目录下。
4.在命令行敲指令运行
在命令行中敲运行指令,结果它就出现了!目录正确了!
最后:所以想请教下各位,是我这个 Goland 工具配置哪一项出了问题?还是使用这个工具的姿势不对呢?还是说这个 Goland 版本,它自身就在GOPATH上存在着问题?
用命令行指令能够出现在正确的目录下,用 Goland 中的运行指令却不行。命令行的指令肯定是去调了 GO SDK 中的 go.exe ,Goland 这个工具的运行指令其实也是调了环境变量中所指定的 go.exe 。既然两者都是调了同一个 go.exe ,为什么会出现不一样的结果。当然我知道是以命令行中的结果为准,就是想知道一下,是我使用工具的哪一步出了问题?
一个好的工具可以让学习、开发变得很有意思。我之前断断续续学了2年 Python,用的是 PyCharm,写代码确实很爽。所以这次入坑 Golang,也选择了 JetBrains 家族的 Goland,不想换工具了。所以想知道一下,我是哪一步出了问题?
谢谢各位大佬!
如果我没看错的话, go env 里明确指定了 GOPATH, 然后
GO111MODULE=auto
, 你项目里也没有go.mod
模块文件, 编译还正常, 应该是使用的传统的 GOPATH 方式, 默认的工作目录是 GOPATH 下的 src 目录, 而你用命令行直接在 myTest 目录下执行go run .\main.go
, 此时的工作目录是当前目录, 也就是 myTest 目录.goland 的命令应该是这样的, 在 GOPATH/src 下执行
go run myTest/main.go
直接用命令行运行是这样的, 在 myTest 下执行go run main.go
在加上你文件路径用的是相对路径
./demo.txt
会根据执行文件所在的工作目录变动的.你可以试试用
go build
命令编译成 exe 可执行文件, 然后直接执行 exe 文件, 看看 txt 文件会生成在哪个目录下?顺便一提, 如果启用了 Go Module, 项目里没有 go.mod 模块文件, 编译是会报错的.