llgoi

Introduction

llgoi is an interactive REPL for Go. It supports expressions, statements, most declarations and imports, including binary imports from the standard library and source imports from $GOPATH.

Example usage

(llgo) 1+1
#0 untyped int = 2
(llgo) x := 1
x untyped int = 1
(llgo) x++
(llgo) x
#0 int = 2
(llgo) import "fmt"
(llgo) fmt.Println("hello world")
hello world
#0 int = 12
#1 error (<nil>) = <nil>
(llgo) for i := 0; i != 3; i++ {
       fmt.Println(i)
       }
0
1
2
(llgo) func foo() {
       fmt.Println("hello decl")
       }
(llgo) foo()
hello decl
(llgo) import "golang.org/x/tools/go/types"
# golang.org/x/tools/go/ast/astutil
# golang.org/x/tools/go/exact
# golang.org/x/tools/go/types
(llgo) types.Eval("1+1", nil, nil)
#0 golang.org/x/tools/go/types.TypeAndValue = {mode:4 Type:untyped int Value:2}
#1 error (<nil>) = <nil>

Expressions

Expressions can be evaluated by entering them at the llgoi prompt. The result of evaluating the expression is displayed as if printed with the format string "%+v". If the expression has multiple values (e.g. calls), each value is displayed separately.

Declarations

Declarations introduce new entities into llgoi’s scope. For example, entering x := 1 introduces into the scope a variable named x with an initial value of 1. In addition to short variable declarations (i.e. variables declared with :=), llgoi supports constant declarations, function declarations, variable declarations and type declarations.

Imports

To import a package, enter import followed by the name of a package surrounded by quotes. This introduces the package name into llgoi’s scope. The package may be a standard library package, or a source package on $GOPATH. In the latter case, llgoi will first compile the package and its dependencies.

Statements

Aside from declarations and expressions, the following kinds of statements can be evaluated by entering them at the llgoi prompt: IncDec statements, assignments, go statements, blocks, if statements, switch statements, select statements and for statements.