A small struct can represent an optional value without relying on a sentinel string.

Optional Value

optional_value.go
package main

import "fmt"

type OptionalName struct {
	Value string
	Valid bool
}

func main() {
	var hasNickname = 
	nickname := OptionalName{Value: "", Valid: hasNickname}
	if hasNickname {
		nickname.Value = "Ada"
	}

	display := "anonymous"
	if nickname.Valid {
		display = nickname.Value
	}

	fmt.Println("has_nickname=", hasNickname)
	fmt.Println("valid=", nickname.Valid)
	fmt.Println("display=", display)
}
package main

import "fmt"

type OptionalName struct {
	Value string
	Valid bool
}

func main() {
	var hasNickname = 
	nickname := OptionalName{Value: "", Valid: hasNickname}
	if hasNickname {
		nickname.Value = "Ada"
	}

	display := "anonymous"
	if nickname.Valid {
		display = nickname.Value
	}

	fmt.Println("has_nickname=", hasNickname)
	fmt.Println("valid=", nickname.Valid)
	fmt.Println("display=", display)
}
optional value Pair a value with a boolean when missing data should be explicit in the type.