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

https://github.com/hymkor/go-minimal-optional

The minimal `optional` package for golang
https://github.com/hymkor/go-minimal-optional

generics go golang optional

Last synced: 24 days ago
JSON representation

The minimal `optional` package for golang

Awesome Lists containing this project

README

        

[![Go Reference](https://pkg.go.dev/badge/github.com/hymkor/go-minimal-optional.svg)](https://pkg.go.dev/github.com/hymkor/go-minimal-optional)

go-minimal-optional
===================

This package has only two constructors (Some, None) and three methods (IfSome, IsNone, Match).

+ `optional.Value` is an array whose size is 0 or 1. Therefore, the contents can be handled with for-range even in versions below Go 1.22.
+ `optional.Option` was renamed to `optional.Value`

```example.go
package main

import (
"github.com/hymkor/go-minimal-optional"
)

func test(x optional.Value[int]) {
x.IfSome(func(v int) {
println(" IfSome: it has a value:", v)
})

for _, v := range x {
println(" for-range(ready for v1.18): it has a value:", v)
}

// GOEXPRIMENT=rangefunc is required to build following line.
for v := range x.Each {
println(" for-range(v1.22 X:rangefunc): it has a value:", v)
}

if x.IsNone() {
println(" IsNone: it does not have a value")
}

x.Match(func(v int) {
println(" Match: it has a value:", v)
}, func() {
println(" Match: it does not hava a value")
})

println()
}

func main() {
println("None[int]")
test(optional.None[int]())

println("Some(4)")
test(optional.Some(4))
}
```

**env GOEXPERIMENT=rangefunc go run example.go**

```env GOEXPERIMENT=rangefunc go run example.go|
None[int]
IsNone: it does not have a value
Match: it does not hava a value

Some(4)
IfSome: it has a value: 4
for-range(ready for v1.18): it has a value: 4
for-range(v1.22 X:rangefunc): it has a value: 4
Match: it has a value: 4

```