尝试访问 golang 中的输入文件时遇到错误

问题描述 投票:0回答:1

我是 golang 新手,为了完成编码挑战,我下载了一个代码片段,并浏览了 readme.md 文件,并按照 readme.md 文件中所述运行 run.bat 命令后,生成了一个可执行文件 geektrust。创建了 exe,但是当我尝试通过给出命令 go run main.go 以及文件路径 ./geektrust Sample_input/input1.txt 来运行代码时,它总是打印一条错误消息“打开输入文件时出错”。为了供您参考,我为您提供源代码文件,README.md 文件 注意:- 输入文件的扩展名为 .txt,它是一个文本文件

main.go


package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    cliArgs := os.Args[1:]

    if len(cliArgs) == 0 {
        fmt.Println("Please provide the input file path")

        return
    }

    filePath := cliArgs[0]
    file, err := os.Open(filePath)

    if err != nil {
        fmt.Println("Error opening the input file")

        return
    }

    defer file.Close()
    scanner := bufio.NewScanner(file)

    for scanner.Scan() {
        /*
            args := scanner.Text()
            argList := strings.Fields(args)

            Add your code here to process the input commands
        */

    }
}


README.md file

# Pre-requisites
* Go 1.15.7/1.16.8/1.17
* go tool

# How to run the code

We have provided scripts to execute the code. 

Use `run.sh` if you are Linux/Unix/macOS Operating systems and `run.bat` if you are on Windows.  Both the files run the commands silently and prints only output from the input file `sample_input/input1.txt`. You are supposed to add the input commands in the file from the appropriate problem statement. 

Internally both the scripts run the following commands 

 * `go build .` - This will build an executable by the name geektrust in the directory $GOPATH/src/geektrust besides the main.go file .
 * Execute the file from the directory $GOPATH/src/geektrust using the command
`./geektrust sample_input/input1.txt`

We expect your program to take the location to the text file as parameter. Input needs to be read from a text file, and output should be printed to the console. The text file will contain only commands in the format prescribed by the respective problem.

This main file, main.go should receive in the command line argument and parse the file passed in. Once the file is parsed and the application processes the commands, it should only print the output.

 # Running the code for multiple test cases

 Please fill `input1.txt` and `input2.txt` with the input commands and use those files in `run.bat` or `run.sh`. Replace `./geektrust sample_input/input1.txt` with `./geektrust sample_input/input2.txt` to run the test case from the second file. 

 # How to execute the unit tests

 The unit tests are ran and the coverage is calculated using the library `gotestsum`. This is independent of your solution and there is no need to add any dependency. However this will work only if you use Go Modules for dependency management.

We execute the unit tests by running the following command from the directory $GOPATH/src/geektrust

`gotestsum --hide-summary=all ./...`
We check for the coverage of unit tests by executing the following command. from the directory $GOPATH/src/geektrust

`gotestsum --hide-summary=all -- -coverprofile=cover.out ./...`

# Help

You can refer our help documents [here](https://help.geektrust.com)
You can read build instructions [here](https://github.com/geektrust/coding-problem-artefacts/tree/master/Go)

按照 readme.md 文件中所述运行 run.bat 命令后,会创建一个可执行文件 geektrust.exe,但是当我尝试通过给出命令 go run main.go 以及文件路径 ./geektrust Sample_input 来运行代码时/input1.txt,它总是打印错误消息“打开输入文件时出错”。

go validation error-handling file-io file-handling
1个回答
0
投票

有两种方式运行程序:

第一:

./geektrust sample_input/input1.txt

这将运行编译后的可执行文件。

第二:

go run main.go sample_input/input1.txt

这将通过“go”命令运行代码,并根据需要进行编译。

你所做的是将两者结合起来,这是行不通的。选择其中之一。

© www.soinside.com 2019 - 2024. All rights reserved.