Skip to content

Instantly share code, notes, and snippets.

@innermond
Last active May 29, 2023 21:46
Show Gist options
  • Save innermond/ab4df813d50dfd8297db4856eca8ae68 to your computer and use it in GitHub Desktop.
Save innermond/ab4df813d50dfd8297db4856eca8ae68 to your computer and use it in GitHub Desktop.
Join a map of strings
package main
import (
"fmt"
"strings"
)
type stringsBuilder struct {
strings.Builder
kv map[string]string
midle string
right string
}
func NewStringsBuilder() *stringsBuilder {
return &stringsBuilder{}
}
func (sb *stringsBuilder) SetMap(kv map[string]string) {
sb.kv = kv
}
func (sb *stringsBuilder) SetJoiners(midle, right string) {
sb.midle = midle
sb.right = right
}
func (sb *stringsBuilder) join(kv map[string]string, midle, right string) string {
sb.kv = kv
sb.midle = midle
sb.right = right
return sb.String()
}
func (sb *stringsBuilder) Join(kv map[string]string) string {
return sb.join(kv, "=", "&")
}
func (sb *stringsBuilder) String() string {
b := sb.Builder
for k, v := range sb.kv {
b.WriteString(k)
b.WriteString(sb.midle)
b.WriteString(v)
b.WriteString(sb.right)
}
s := b.String()
if len(s) < 1 {
return ""
}
return strings.TrimRight(s, sb.right)
}
func main() {
opt := make(map[string]string)
opt["name"] = "Aname"
opt["surname"] = "Asurname"
opts := NewStringsBuilder().Join(opt)
fmt.Println(opts)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment