An open API service indexing awesome lists of open source software.

https://github.com/atomicgo/f

🦄 The closest thing to template literals in Go. Parse expressions in strings - the simple way.
https://github.com/atomicgo/f

atomicgo evaluate expressions go golang golang-library hacktoberfest literal string template template-engine

Last synced: about 2 months ago
JSON representation

🦄 The closest thing to template literals in Go. Parse expressions in strings - the simple way.

Awesome Lists containing this project

README

        

AtomicGo | f


Downloads


Latest Release


Tests


Coverage


Unit test count


License: MIT



Go report

---


Documentation
|
Contributing
|
Code of Conduct

---


AtomicGo


go get atomicgo.dev/f



# f

```go
import "atomicgo.dev/f"
```

F is the closest thing to template literals in Go.

F is a simple, fast and safe way to format strings in Go, with a familiar syntax. It evaluates expressions inside \`$\{\}\` and replaces them with their values.

The expressions support many operators, including ternary operator, and function calls. See the syntax here: https://expr.medv.io/docs/Language-Definition

Example (Demo)

```go
package main

import (
"fmt"

"atomicgo.dev/f"
)

type Person struct {
Name string
Age int
}

func main() {
// Format a string with a struct
john := Person{Name: "Bob", Age: 22}
fmt.Println(f.Format("${Name} is ${Age} years old", john))

// Format a string with a map
alice := map[string]any{"Name": "Alice", "Age": 27}
fmt.Println(f.Format("${Name} is ${Age} years old", alice))

// Evaluate an expression
fmt.Println(f.Format("John is 22 years old: ${Age == 22}", john))

// Ternary operator
fmt.Println(f.Format("John is 22 years old: ${Age == 22 ? 'yes' : 'no'}", john))

}
```

#### Output

```
Bob is 22 years old
Alice is 27 years old
John is 22 years old: true
John is 22 years old: yes
```

## Index

- [func Format\(template string, data ...any\) string](<#Format>)
- [func FormatSafe\(template string, data ...any\) \(string, error\)](<#FormatSafe>)
- [type Parsed](<#Parsed>)
- [func Parse\(template string\) Parsed](<#Parse>)
- [func \(parsed Parsed\) Eval\(data any\) \(string, error\)](<#Parsed.Eval>)
- [func \(parsed Parsed\) String\(\) string](<#Parsed.String>)
- [type Part](<#Part>)


## func [Format]()

```go
func Format(template string, data ...any) string
```

Format formats the template string.


## func [FormatSafe]()

```go
func FormatSafe(template string, data ...any) (string, error)
```

FormatSafe formats the template string and returns an additional, optional error, if something goes wrong.


## type [Parsed]()

Parsed contains a parsed template string, ready to be evaluated.

```go
type Parsed struct {
Template string
Parts []Part
}
```


### func [Parse]()

```go
func Parse(template string) Parsed
```

Parse parses a template string into a Parsed struct.


### func \(Parsed\) [Eval]()

```go
func (parsed Parsed) Eval(data any) (string, error)
```

Eval evaluated expressions in the parsed template string.


### func \(Parsed\) [String]()

```go
func (parsed Parsed) String() string
```

String returns the parsed template parts as a single string.


## type [Part]()

Part is a single part of a template string. Can either be a raw string, or an expression.

```go
type Part struct {
Value string
Parsed bool
}
```

Generated by [gomarkdoc]()

---

> [AtomicGo.dev](https://atomicgo.dev)  · 
> with ❤️ by [@MarvinJWendt](https://github.com/MarvinJWendt) |
> [MarvinJWendt.com](https://marvinjwendt.com)