Page compiler

The purpose of gosp2go, the Go Server Pages page compiler, is to compile a Go Server Page from HTML with embedded Go code to a Go function that both executes code and outputs HTML. (We write “HTML” here, but a Go Server Page can in fact use any file format.) For example, the HTML fragment

  Let's sing: <q>Na<?go:expr strings.Repeat(" na", 7) ?>,
  <?go:expr strings.Repeat(" na", 8) ?>, Batman!</q>

compiles to the Go fragment,

gosp.Fprintf(gospOut, "%s", "<p>\n  Let's sing: <q>Na")
gosp.Fprintf(gospOut, "%v%s", strings.Repeat(" na", 7), "")
gosp.Fprintf(gospOut, "%s", ",\n  ")
gosp.Fprintf(gospOut, "%v%s", strings.Repeat(" na", 8), "")
gosp.Fprintf(gospOut, "%s", ", Batman!</q>\n</p>\n")

This code fragment is written as part of a GospGeneratePage function of type

func(gospReq *gosp.RequestData, gospOut gosp.Writer, gospMeta gosp.Metadata)

See boilerplate.go for the latest definition of the boilerplate code that wraps the code generated from the contents of the Go Server Page. The only package the boilerplate code imports is gosp.

The source code for the compiler lies in the gosp2go directory. gosp2go’s default behavior is to produce Go source code, which can be useful for troubleshooting a Go Server Page. When invoked from the Go Server Pages Apache module, gosp2go is instructed via the --build option not only to generate Go code but also to compile the result to a shared object (plugin). gosp2go can also be invoked with the --run option to compile, generate a plugin, and run the plugin using gosp-server. This can be useful for post-processing the output of a CGI script that generates a Go Server Page instead of ordinary HTML. The gosp2go(1) man page lists all gosp2go command-line options.