World Conquest Chronicles

World Conquest Chronicles

go-code-runner, v1.0

The library that implements the compiling and running of a code written in the Go programming language and running of a test case set for the compiled code (i.e. the executable file).

Major version. Implementing of the compiling and running of a code written in the Go programming language.

Features

  • saving of a code to a temporary file:
    • storing of the temporary file with the code to an individual temporary directory;
  • compiling of a code written in the Go programming language:
    • automatic importing of the packages used in the code;
    • enriching of an error of the external command running by an output from the stderr stream;
  • running of the compiled code (i.e. the executable file):
    • passing of a custom input as the stdin stream;
    • returning of an output from the stdout stream;
    • enriching of an error of the external command running by an output from the stderr stream.

Installation

Prepare the directory:

$ mkdir --parents "$(go env GOPATH)/src/github.com/thewizardplusplus/"
$ cd "$(go env GOPATH)/src/github.com/thewizardplusplus/"

Clone this repository:

$ git clone https://github.com/thewizardplusplus/go-code-runner.git
$ cd go-code-runner

Install dependencies with the dep tool:

$ dep ensure -vendor-only

Examples

package main

import (
    "fmt"
    "log"
    "os"
    "path/filepath"

    coderunner "github.com/thewizardplusplus/go-code-runner"
)

func main() {
    const code = `
        package main

        func main() {
            var x, y int
            fmt.Scan(&x, &y)

            fmt.Println(x + y)
        }
    `

    pathToCode, err := coderunner.SaveTemporaryCode(code)
    if err != nil {
        log.Fatal(err)
    }
    defer os.RemoveAll(filepath.Dir(pathToCode)) // nolint: errcheck

    pathToExecutable, err := coderunner.CompileCode(pathToCode)
    if err != nil {
        log.Fatal(err)
    }

    output, err := coderunner.RunCode(pathToExecutable, "2 3")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%q\n", output)

    // Output:
    // "5\n"
}

Repository

Link: https://github.com/thewizardplusplus/go-code-runner/tree/v1.0.

Content: code.

License: MIT.