Home > Article > Backend Development > IPython-like interactive programming interface for Go language
Bret Victor’s Inventing on principle is one of the most exciting and shocking demonstrations I have ever seen. Although the former Apple UI guru made this demonstration as early as 2012, his influence has not diminished. Any changes in the process of writing programs should directly generate feedback so that programmers can see the results. , or in other words, creators need real-time feedback on what they create.
I have been using Python before and like IPython Notebook very much. It is very convenient to use IPython Notenook to quickly complete some prototypes. Now due to the needs of the project, I want to start using the Go language. I was wondering, is there an IPython environment that can use Go? There is also a related post on Zhihu, but unfortunately it does not give a valid answer.
I did some small homework, but the result is not perfect, so I will share it with you here.
Official version Go Playground
The best resource to start learning Go language is the official Tour. You can learn and run Go sample programs at the same time to get the running results directly. Perfectly embodies the concept of Inventing on principle.
This Tour has a Go Playgound embedded in it. You can find the code of the project on github.
This project contains a front-end and a containerized back-end Sandbox to ensure the security of program operation.
However, go playground has some limitations:
cannot import user-defined packages
The editor is weak, no syntax highlighting, no prompts, no undo...
No segmented interaction like Ipython
XIAM version of Go Playground
XIAM’s go playground has made significant improvements based on the official playground. Includes:
Supports user-defined packages
Supports unsafe sandbox, users can access the network, file system, etc.
Containerization of the front end
If you want to use a custom package, you need to modify the Dockerfile of the corresponding sandbox
FROM xiam/go-playground/unsafebox RUN go get github.com/myuser/mypackageRUN go get github.com/otheruser/otherpackage ENTRYPOINT ["/go/bin/sandbox"]
Then Just rebuild the container's Image.
Although we have solved the problem of custom packages, this editor is still too weak and lacks the segmented interaction of IPython. Is there anything better?
GopherNotes
Jupyter’s Notebook can actually support different language cores. The GopherNotes project provides the Go language core for Jupyter.
This project is inspired by Gore (based on igo kernel) which is no longer maintained.
The above is a test I did using Gophernotes. When I run a loop, if I write it in one line, In[7], everything is OK. But when I write three lines, In[8], the correct result cannot be output.
The error given in the background is:
Error running goimports: /tmp/979860191/func_proxy.go:4:4: expected declaration, found 'for' [I 08:18:56.621 NotebookApp] Saving file at /Untitled.ipynb