Golang String Padding Example

Padding overview

String padding in Go (Golang) is referred as the operation to prepending or appending spaces or characters to a string such that the total lenght of the final string is fixed, regardless of the input string’s length. You may have encountered a scenario where you had to display or format data in such way, such that it is aligned like in a table. Let’s see an example

athletes distances
john          10km
marylin      131km
joe          0.5km
arthur         1km

athletes are aligned to the left, distances are aligned to the right. In Go (Golang) padding can be done using just the standard library without having to write the padding logic by yourself or having to import third party libraries.

Use the fmt package for padding and formatting

In Go (Golang) you can use the fmt package to add padding to your strings. You can use the width option as defined in the fmt package.

Width is specified by an optional decimal number immediately preceding the verb. If absent

%f default width, default precision
%9f width 9, default precision
%.2f default width, precision 2
%9.2f width 9, precision 2
%9.f width 9, precision 0

Let’s see some examples how

Padding Right

fmt.Println("'%-4s'", "john")
'john    '

Padding Left

fmt.Println("'%4dkm'", 10)
'    10km'

Padding with zeroes

fmt.Println("'%04dkm'", 10)
'000010km'

Padding with arbitrary length

You can also define the padding width using a asterisk and specifying a parameter representing the length of the padding.

fmt.Println("'%*dkm'", 10, 2)
'          2km'

More Formatting Directives

You can check more formatting directives that can be applied when using the fmt package in the official documentation page

+   always print a sign for numeric values;
    guarantee ASCII-only output for %q (%+q)
-   pad with spaces on the right rather than the left (left-justify the field)
#   alternate format: add leading 0b for binary (%#b), 0 for octal (%#o),
    0x or 0X for hex (%#x or %#X); suppress 0x for %p (%#p);
    for %q, print a raw (backquoted) string if strconv.CanBackquote
    returns true;
    always print a decimal point for %e, %E, %f, %F, %g and %G;
    do not remove trailing zeros for %g and %G;
    write e.g. U+0078 'x' if the character is printable for %U (%#U).
' ' (space) leave a space for elided sign in numbers (% d);
    put spaces between bytes printing strings or slices in hex (% x, % X)
0   pad with leading zeros rather than spaces;
    for numbers, this moves the padding after the sign
    ```
Join the Golang Developers Community on Golang Cafe