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.