Gosh: interactive shell for golang
Gosh
is the interactive Golang shell.
The goal is to provide an easy-to-use interactive execution environment.
Documentation
Features
- Interactive shell
- Enable to omit the main function
- Enable to omit package statement
- Enable to omit the import statement of standard library
- Enable to Import libraries of non-standard library
- Enable to re-declare function, type
- Ignoring duplicate import package
- Ignoring unused import package
Requirements
- Golang >= 1.2
- goimports command
- We recommend that you install
goimports
to$PATH
in advance. - Installing automatically if the command is not found in
$PATH
(>= v0.3.0). - However, the time until the installation is complete in this case,
- you will be waiting for the launch of "
Gosh
" process.
- We recommend that you install
for documentation
- libpython2.7-dev
- libjpeg9-dev
Installation
Debian
Install the following packages
- golang
- golang-go.tools (recommended)
Set GOPATH
:
$ install -d /path/to/gopath $ export GOPATH=/path/to/gopath
If you install goimports
in advance (recommended):
$ sudo apt-get install -y golang-go.tools
Install Gosh
to GOPATH
:
$ go get github.com/mkouhei/gosh
OS X
Install the follow packages with Homebrew.
- Go
- Mercurial (with Homebrew)
Set GOPATH
:
$ install -d /path/to/gopath $ export GOPATH=/path/to/gopath
If you install goimports
in advance (recommend):
$ export PATH=${GOPATH}/bin:$PATH $ go get golang.org/x/tools/cmd/goimports
Install the Gosh
:
$ go get github.com/mkouhei/gosh
Basic usage
Examples:
$ $GOPATH/bin/gosh >>> import "fmt" >>> func main() { >>> fmt.Println("hello") >>> } hello >>>
or:
$ $GOPATH/bin/gosh >>> func main() { >>> fmt.Println("hello") >>> } hello >>>
Note
Enabled to omit import statement for standard packages.
Enabled to import non-standard packages
Example of using non-standard package:
>>> import "net/http" >>> import "example.org/somepkg" >>> func main() { >>> r, _ := http.Get("http://example.org/some") >>> defer r.Body.Close() >>> p, _ := somepkg.Reader(r.Body) >>> fmt.Println(p) >>> } (print some payload)
Usage when omitting main function declarations
Example:
$ $GOPATH/bin/gosh >>> i := 1 >>> i++ >>> fmt.Println(i) 2 >>>
Terminate Gosh
to reset main
declarations or declare func main()
without body:
$ $GOSH/bin/gosh >>> i := i >>> fmt.Println(i) 1 >>> func main() {} >>> fmt.Println(i) [error] # command-line-arguments ./gosh_tmp.go:8: undefined: i >>>
Limitations
fmt.Print*
are executed only once.
Known issues
Fail to evaluate when there are declared and not used valiables.:
$ $GOPATH/bin/gosh >>> i := 1 >>> fmt.Println("hello") >>>
Roadmap
- Tab completion
- Enable to omit
import
statement for global(system) installed packages
License
Gosh
is licensed under GPLv3.