Sharedsupport / 2017-01-01-200930-go.sagewsOpen in CoCalc
Author: William A. Stein
License: GNU General Public License v3.0
Description: Examples for support purposes.
File: /projects/sage/sage-7.3/local/lib/python2.7/site-packages/smc_sagews/ Source: def go(s): """ Run a go program. For example, %go func main() { fmt.Println("Hello World") } You can set the whole worksheet to be in go mode by typing %default_mode go NOTES: - The official Go tutorial as a long Sage Worksheet is available here: - There is no relation between one cell and the next. Each is a separate self-contained go program, which gets compiled and run, with the only side effects being changes to the filesystem. The program itself is stored in a random file that is deleted after it is run. - The %go command automatically adds 'package main' and 'import "fmt"' (if fmt. is used) to the top of the program, since the assumption is that you're using %go interactively. """ import uuid name = str(uuid.uuid4()) if 'fmt.' in s and '"fmt"' not in s and "'fmt'" not in s: s = 'import "fmt"\n' + s if 'package main' not in s: s = 'package main\n' + s try: open(name +'.go','w').write(s.encode("UTF-8")) (child_stdin, child_stdout, child_stderr) = os.popen3('go build %s.go'%name) err = sys.stdout.write( sys.stderr.write(err) sys.stdout.flush() sys.stderr.flush() if not os.path.exists(name): # failed to produce executable return (child_stdin, child_stdout, child_stderr) = os.popen3("./" + name) sys.stdout.write( sys.stderr.write( sys.stdout.flush() sys.stderr.flush() finally: try: os.unlink(name+'.go') except: pass try: os.unlink(name) except: pass