A Jupyter Notebook kernel and interactive REPL for Go (golang) that enables interactive programming and data analysis.
lgo is a Jupyter kernel and interactive REPL for the Go programming language. It allows developers to write, execute, and experiment with Go code in an interactive notebook environment, similar to Python's Jupyter, bringing interactive computing capabilities to Go. It solves the problem of slow iteration cycles in Go by enabling real-time code execution and visualization.
Go developers, data scientists, and educators who want to use Go for interactive data analysis, prototyping, or teaching in a notebook-based workflow.
Developers choose lgo because it offers full Go language compatibility with the standard compiler, integrates seamlessly with Jupyter for rich outputs, and provides an interactive REPL experience without sacrificing Go's performance and type safety.
Interactive Go programming with Jupyter
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Uses the standard Go compiler (gc) for 100% language spec support, ensuring no compatibility issues with existing Go codebases, as stated in the README.
Supports Jupyter notebooks with code completion, inspection (Shift-Tab), and display of images, HTML, and JavaScript outputs, enhancing the interactive experience.
Provides both a built-in REPL and Jupyter Console integration, allowing flexible command-line sessions for iterative coding and prototyping.
Integrates with context.Context to allow cancellation of long-running operations via kernel interrupts, making it suitable for data processing tasks.
Suffers from significant performance overhead in Go 1.10+ and cannot be built with Go 1.12 due to compiler issues, limiting use with modern Go versions as noted in the disclaimer.
Native support is only for Linux; macOS and Windows require Docker or virtual machines, adding complexity and overhead for non-Linux users.
Installation involves multiple steps like setting LGOPATH, installing dependencies (ZMQ, pkg-config), and managing Go version compatibility, which can be error-prone and time-consuming.