Coming From Java (Or a C-Like Language) to Hugo's Go Templates

Published: Dec 10, 2018
Updated: May 3, 2021

If you have a basic understanding of Java, or any other C-like language, then this post will ease you into Hugo’s Go Templates syntax.

Arithmetic operators #

Arithmatic operators are provided by Hugo’s Math functions.

Addition #

Java:

int result = 1 + 2;

Go Templates:

{{ $result := add 1 2 }}

Value of result variable:

3

Subtraction #

Java:

int result = 2 - 1;

Go Templates:

{{ $result := sub 2 1 }}

Value of result variable:

1

Multiplication #

Java:

int result = 3 * 3;

Go Templates:

{{ $result := mul 3 3 }}

Value of result variable:

9

Division #

Java:

int result = 6 / 3;

Go Templates:

{{ $result := div 6 3 }}

Value of result variable:

2

Modulus #

Java:

int result = 10 % 2;

Go Templates:

{{ $result := mod 10 2 }}

Value of result variable:

0

Relational operators #

Relational operators are provided as Hugo functions.

Equal to #

Java:

boolean result = "go" == "go";

Go Templates:

{{ $result := eq "go" "go" }}

Value of result variable:

true

Not equal to #

Java:

boolean result = "go" != "go";

Go Templates:

{{ $result := ne "go" "go" }}

Value of result variable:

false

Greater than #

Java:

boolean result = 2 > 1;

Go Templates:

{{ $result := gt 2 1 }}

Value of result variable:

true

Less than #

Java:

boolean result = 2 < 1;

Go Templates:

{{ $result := lt 2 1 }}

Value of result variable:

false

Greater than or equal to #

Java:

boolean result = 2 >= 1;

Go Templates:

{{ $result := ge 2 1 }}

Value of result variable:

true

Less than or equal to #

Java:

boolean result = 2 <= 1;

Go Templates:

{{ $result := le 2 1 }}

Value of result variable:

false

Logical operators #

See the Introduction to Hugo Templating for more examples of logical operators.

And #

Java:

if ("go" == "go" && 2 > 1) {
  System.out.println("Logical and"); 
}

Go Templates:

{{ if and (eq "go" "go") (gt 2 1) }}
  {{ print "Logical and" }}
{{ end }}

Output:

Logical and

Or #

Java:

if ("java" == "go" || 2 > 1) {
  System.out.println("Logical or"); 
}

Go Templates:

{{ if or (eq "java" "go") (gt 2 1) }}
  {{ print "Logical or" }}
{{ end }}

Output:

Logical or

Loops #

Go Templates use range to iterate over a map, array, or slice. It’s similar to the Java for-each loop.

For-each loop #

Java:

String[] animals = { "Cat", "Dog", "Bird" };
for (String animal : animals) {
  System.out.println(animal);
}

Go Templates:

{{ $animals := slice "Cat" "Dog" "Bird" }}
{{ range $animals }}
  {{ . }}
{{ end }}

Output:

Cat
Dog
Bird

Regular for loop #

Using the seq function, a regular Java for loop can be imitated.

Java:

for (int i = 1; i < 10; i++) {
  System.out.print(i + " ");
}

Go Templates:

{{ $i := seq 9 }}
{{ range $i }}
  {{- print . " " -}}
{{ end }}

Output:

1 2 3 4 5 6 7 8 9 

Strings #

For more info, see the docs on the print and printf functions, as well as the docs on fmt, a Go Package.

String concatenation using print #

Java:

String message = "Hello" + " " + "world";

Go Templates:

{{ $message := print "Hello" " " "world" }}

Value of message variable:

Hello world

String concatenation using printf #

Java:

String message = String.format("Hello %s", "world");

Go Templates:

{{ $message := printf "Hello %s" "world" }}

Value of message variable:

Hello world