Skip to content

Instantly share code, notes, and snippets.

@svanellewee
Last active April 12, 2022 07:44
Show Gist options
  • Save svanellewee/8642835b81a50d9ebb0e008153b90254 to your computer and use it in GitHub Desktop.
Save svanellewee/8642835b81a50d9ebb0e008153b90254 to your computer and use it in GitHub Desktop.
Generic Prepend in Go!
package main
// https://play.golang.com/p/PNax2a1rL3q
import (
"fmt"
"math/rand"
"time"
"golang.org/x/exp/constraints"
)
type Number interface {
constraints.Signed | constraints.Unsigned | constraints.Float
}
func prepend[T Number](list []T, elems ...T) []T {
results := make([]T, len(list)+len(elems))
results = append(results, 0)
copy(results[len(elems):], list)
copy(results[:len(elems)], elems)
return results
}
func intPrepend(list []int, elems ...int) []int {
results := make([]int, len(list)+len(elems))
results = append(results, 0)
copy(results[len(elems):], list)
//results[0] = elem
copy(results[:len(elems)], elems)
return results
}
func main() {
rand.Seed(time.Now().Unix())
var items []int
items = rand.Perm(10)
fmt.Println(items)
results := prepend(items, 1000, 2000)
items2 := []float32{10.0, 200.0, 200}
results2 := prepend(items2, 10000.0)
fmt.Println(results, results2)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment