Gosh
is the interactive Golang shell. The goal is to provide an easy-to-use interactive execution environment.
- 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
- Golang >= 1.2
- goimports command
Install the follow packages
- golang
- golang-go.tools
In the case using Golang not-distribution package, execute next command.:
$ go get code.google.com/p/go.tools/cmd/goimports
Set GOPATH
, and execute follows.:
$ go get github.com/mkouhei/gosh
Examples:
$ $GOPATH/bin/gosh
>>> import "fmt"
>>> func main() {
>>> fmt.Println("hello")
>>> }
hello
>>>
or:
$ $GOPATH/bin/gosh
>>> func main() {
>>> fmt.Println("hello")
>>> }
hello
>>>
Enable to omit import statement related with standard libraries.
For example of using the some 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)
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
>>>
fmt.Print*
are executed only once.
Not evaluate when there are declared and not used valiables.:
$ $GOPATH/bin/gosh
>>> i := 1
>>> fmt.Println("hello")
>>>
- Tab completion
- Enable to omit import statement of system global installed packages
Gosh
is licensed under GPLv3.