?go:include names a file in the local filesystem to include in place. The file can be specified with either an absolute path or a path relative to the page.
?go:include is semantically equivalent to the C preprocessor’s
#include directive in that it (a) performs its operation before any code-execution markup (
?go:top) and (b) is oblivious to the surrounding language semantics. In other words, if one Go Server Page includes the text
<block<?go:include other-half.inc ?>, and if
other-half.inc begins with the string
quote>, the text will expand to
<blockquote>. Suggestion: Don’t write code like that. 😉 A more practical example might be as follows:
<p>Blah, blah, blah.</p> <?go:include footer.inc ?>
footer.inc contains HTML such as
<footer> <address> You can find us at<br /> 84 Rainey Street<br /> Arlen, Texas<br /> USA </address> </footer>
For security reasons,
?go:include includes only files that lie in the same directory or a subdirectory of the invoking Go Server Page. Hence, a Go Server Page located at
/var/www/showcase/index.html could invoke
<?go:include helper.inc ?> to paste in
<?go:include includes/fragments/header.inc ?> to paste in
/var/www/showcase/includes/fragments/header.inc. However, in this case,
<?go:include /etc/passwd ?> would result in an error.
File inclusions are currently limited to a depth of 10. That is, file A can include file B, which can include file C, which can include file D, and so forth up to file J but not beyond that. Each file can in fact directly include an unbounded number of other files; only the inclusion depth is limited. The intention is to prevent accidental infinite recursion, such as if file A includes file B, which includes file A.