Skip to content

Instantly share code, notes, and snippets.

@mortdeus
Created August 2, 2020 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mortdeus/dc6bf15c8c2858cdc7780dd7f33c26fd to your computer and use it in GitHub Desktop.
Save mortdeus/dc6bf15c8c2858cdc7780dd7f33c26fd to your computer and use it in GitHub Desktop.
golang generic experiment
package main
import (
"fmt"
)
export{
"T": type{int, uint, struct{type, type, int}},
"syncable": type{$T, bool, sync.Mutex}
}
type syncer interface{
sync($T) $syncable
}
type queue($T) []$T
func (q *queue($T)) enqueue(v $T) {
*q = append(*q, v)
}
func (q *queue($syncable)) dequeue() ($syncable, bool) {
if len(*q) == 0 {
var zero $syncable
return zero, false
}
r := (*q)[0]
*q = (*q)[1:]
return r, true
}
func main() {
q := new(queue(int))
q.enqueue(5)
q.enqueue(6)
fmt.Println(q)
fmt.Println(q.dequeue())
fmt.Println(q.dequeue())
fmt.Println(q.dequeue())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment