goel

command module
v0.0.0-...-1e64bb5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 10, 2025 License: MIT Imports: 14 Imported by: 0

README

El - Embedded Language Documentation

El is a lightweight templating engine for Go, inspired by PHP's embedded code style. It allows you to embed Go code directly within your templates, making it easy to generate dynamic content.

Syntax

El templates use <? and ?> as delimiters to embed Go code within the template. Everything outside these delimiters is treated as plain text. <? tag can have optional language specification parameter. Usually that should be used in first tag, currently only <?go is supported (they are not used anyway, but in future can be used to generate code on other languages).

Basic Syntax
Hello, <?= name ?>!

In this example, name is a Go variable that will be evaluated and inserted into the template.

Embedding Go Code

You can embed any valid Go code within the <? and ?> delimiters:

<? 
for i := 0; i < 10; i++ { 
?>
    <p>Item <?= i ?></p>
<? 
} 
?>

This will generate a list of 10 items, each wrapped in a <p> tag.

Go code should be wrapped to a function accepting wr io.Writer parameter. And have proper go package an import definitions.

<?go
package main

import (
	"fmt"
	"io"
)

func generate(wr io.Writer) {
    for i := 0; i < 10; i++ { 
?>
    <p>Item <?= i ?></p>
<? 
    }
} 
?>

Later that function generate can be called from Go code.

Outputting Variables

To output a variable, use the <?= ... ?> syntax:

<p>Welcome, <?= user.Name ?>!</p>
Control Structures

You can use Go's control structures directly within the templates:

<?
if user.IsAdmin {
?>
    <p>Welcome, Admin!</p>
<?
} else {
?>
    <p>Welcome, User!</p>
<?
}
?>
Including Other Templates

You can include other by calling template function from anywhere in your template or go code and passing wr parameter there.

<?go
package main

import (
	"fmt"
	"io"
)

func generateItems(wr io.Writer) {
    for i := 0; i < 10; i++ { 
?>
    <p>Item <?= i ?></p>
<? 
    }
} 
?>
<?go
package main

import (
	"fmt"
	"io"
)

func generateTemplate(wr io.Writer) {
    generateItems(wr)
} 
?>

Usage

To use the El tool from Go code put

//go:generate go run github.com/igadmg/goel

line anywhere in your code. It will scan project for *.go.el files and generate *.go files from them. It will process any *.el file and generate new file omitting .el extension. So template.go.el will be converted to tempate.go, and template.cpp.el will be converted to template.cpp (but C++ language model is not supported yet)

Example

Given a template file greeting.go.el:

<?go
package template

import (
    "fmt"
    "io"
)

func HelloTemplate(wr io.Writer) {
?>
<h1>Hello, <?= name ?>!</h1>
<?
}
?>

Running the el tool will generate a Go file greeting.go that have a function HelloTemplate that can be used to render the template.

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL