# Technical Documentation: x-motemen/gore

> ℹ️ **Provenance:** Multi-Tier Ingestion · [CodeWiki Reference](https://codewiki.google/github.com/x-motemen/gore)

### Overview (`README.md`)

# gore
[](https://github.com/x-motemen/gore/actions/workflows/ci.yaml?query=branch:main)
[](https://github.com/x-motemen/gore/blob/main/LICENSE)
[](https://github.com/x-motemen/gore/releases)

### Yet another Go REPL that works nicely. Featured with line editing, code completion, and more.



(Screencast taken with [cho45/KeyCast](https://github.com/cho45/KeyCast))

## Usage

```sh
gore
```
After a prompt is shown, enter any Go expressions/statements/functions or commands described below.

To quit the session, type `Ctrl-D` or use `:q` command.

## Features

- Line editing with history
- Multi-line input
- Package importing with completion
- Evaluates any expressions, statements and function declarations
- No "evaluated but not used" errors
- Code completion (requires [gopls](https://github.com/golang/tools/blob/master/gopls/README.md))
- Showing documents
- Auto-importing (`gore -autoimport`)

## REPL Commands

Some functionalities are provided as commands in the REPL:

```
:import [<alias>] <package>  Import package
:type <expr>                 Print the type of expression
:print                       Show current source
:write [<filename>]          Write out current source to file
:clear                       Clear the codes
:doc <expr or pkg>           Show document
:verbose [on|off]            Toggle printing of assigned or declared values
:help                        List commands
:quit                        Quit the session
```

## Environment Variables

- `GORE_HOME`: directory for the command history file.
   Defaults to `$XDG_DATA_HOME/gore`, or `~/.gore` if `XDG_DATA_HOME` is unset.
- `GORE_PAGER`: pager command used to display `:doc` output (e.g. `less`).
   If unset, documents are printed directly.
- `GORE_VERBOSE`: set to a boolean false value (`0` or `false`) to suppress
   automatic printing of assigned or declared values at startup.
   Defaults to on; toggle during a session with `:verbose` command.

## Installation
The gore command requires Go tool-chains on runtime, so standalone binary is not distributed.

```sh
go install github.com/x-motemen/gore/cmd/gore@latest
```

Also recommended:

```sh
go install golang.org/x/tools/gopls@latest   # for code completion
```

Or you can use Docker:

```sh
docker run -it --rm ghcr.io/x-motemen/gore
```

## FAQ/Caveats

- gore runs code using `go run` for each input. Every line entered is evaluated
  repeatedly ([#67](https://github.com/x-motemen/gore/issues/67)),
  so you can't bind the evaluated time by `time.Now()`, for example.
  This implementation also makes the execution fairly slow
  ([#182](https://github.com/x-motemen/gore/issues/182)).
  This project started from a simple idea to use `go run` for all REPL input.
  I think this project has provided some value for Go users, but these days
  there are other REPL implementations that are more actively maintained
  and run faster. I recommend using [gomacro](https://github.com/cosmos72/gomacro)
  or [yaegi](https://github.com/containous/yaegi).
- gore support Go modules. You can load local modules when you start gore at
  the project directory. You don't need to `go get` to check the usage of a
  remote repository, `:import github.com/...` will automatically download that
  module. Also, you don't need to `go get` the pretty print module anymore. If
  you want to load a local code from `$GOPATH`, you need to create the modules
  file (`go mod init ...`) and then start gore at the project directory.

## License

[The MIT License](./LICENSE).

## Author

- motemen &lt;<motemen@gmail.com>&gt;
- itchyny &lt;<itchyny@cybozu.co.jp>&gt;

---

--- METRICS ---
- Files Extracted: 1
- Estimated Token Budget: ~911 tokens
- Canonical Reference: https://codewiki.google/github.com/x-motemen/gore
