Example code for Go generics

Overview
Issues
  • Set rand.Seed to shuffle makes other results in every runtime

    Set rand.Seed to shuffle makes other results in every runtime

    Before

    $ ./shuffle
    [5 9 3 6 4 10 1 8 7 2]
    $ ./shuffle
    [5 9 3 6 4 10 1 8 7 2]
    $ ./shuffle
    [5 9 3 6 4 10 1 8 7 2]
    $ ./shuffle
    [5 9 3 6 4 10 1 8 7 2]
    

    After

    $ ./shuffle
    [2 9 8 7 3 4 1 5 10 6]
    $ ./shuffle
    [2 1 10 9 4 5 3 7 8 6]
    $ ./shuffle
    [8 4 6 1 3 10 5 9 2 7]
    $ ./shuffle
    [8 5 2 7 1 10 6 4 9 3]
    

    I have tested rand.Shuffle, it makes same results in every runtime when without setting seed, so if current behavior is intentional, please just close this PR 🙏 https://golang.org/pkg/math/rand/#Shuffle

    opened by kachick 2
  • Fix dependent Go version to 1.17+

    Fix dependent Go version to 1.17+

    Using docker container run --volume="$(pwd)/:/usr/src" --workdir='/usr/src/' -it 'golang:latest' '/bin/bash'

    $ go version
    go version go1.16.2 linux/amd64
    $ cd add
    $ go build -gcflags=-G=3
    flag provided but not defined: -G
    

    Using built Go from current master

    $ /Users/kachick/repos/go/bin/go version
    go version devel +e0fae78e1d Sat Mar 20 17:08:03 2021 +0000 darwin/amd64
    $ cd add
    $ /Users/kachick/repos/go/bin/go build -gcflags=-G=3
    $ ls
    add     main.go
    

    So can we use generics from 1.17? 🤔

    opened by kachick 2
  • add

    add "some" and "every"

    I wanted to try my hand at Go generics and find myself using these function often to assert if every value or some values of a slice match a predicate.

    opened by gillesdemey 1
  • Replace type lists with type sets

    Replace type lists with type sets

    Replaces type lists with type sets: https://github.com/golang/go/issues/45346

    Type lists produce compiler errors with the latest gotip: use generalized embedding syntax instead of a type list

    opened by colinking 1
  • Ternaryop and Normal Order Evaluation

    Ternaryop and Normal Order Evaluation

    Normal Order Evaluation is an evaluation strategy in which an expression is evaluated by repeatedly evaluating its leftmost outermost reducible expression. This means that a function's arguments are not evaluated before the function is applied.

    In a word, left or right value should be evaluated when it is applied

    So this code should be some kind of the following form:

    package main
    
    import (
    	"fmt"
    )
    
    func ternaryOp[T any](s bool, t func() T, f func() T) T {
    	if s {
    		return t()
    	}
    	return f()
    }
    
    func main() {
    	fmt.Println(ternaryOp(4 < 5, func() string {
    		fmt.Println("left evaluated")
    		return "less"
    	}, func() string {
    		fmt.Println("right evaluated")
    		return "greater"
    	}))
    }
    
    
    opened by yuchanns 1
Owner
mattn
Long-time Golang user&contributor, Google Dev Expert for Go, and author of many Go tools, Vim plugin author. Windows hacker C#/Java/C/C++
mattn
Code Generation for Functional Programming, Concurrency and Generics in Golang

goderive goderive derives mundane golang functions that you do not want to maintain and keeps them up to date. It does this by parsing your go code fo

Walter Schulze 997 Jul 31, 2022
F - Experimenting with Go 1.18 generics to write more functional Go code

f f is a simple library that leverages the new generics in Golang to create a tools for functional style of code. Pipe like '|>' in Elixir or Elm. inp

Amirreza Askarpour 3 Apr 12, 2022
Experiments with Go generics

generics Quick experiments with Go generics algebra, a generic square root function for float, complex and and rational. future, a concurrent cache ("

Alan Donovan 79 Jul 1, 2022
Collection of unusual generics usecases in Go

Unusual Generics Type parameters or Generics in Go designed to reduce boilerplate for container data types like lists, graphs, etc. and functions like

Vladimir Stolyarov 48 May 14, 2022
Package truthy provides truthy condition testing with Go generics

Truthy Truthy is a package which uses generics (Go 1.18+) to create useful boolean tests and helper functions. Examples // truthy.Value returns the tr

Carl Johnson 30 Jul 24, 2022
Go Library for Competitive Programming with Generics

Go Library for Competitive Programming with Generics Go used to be a difficult language to use for competitive programming. However, with the introduc

Katsuyuki Tateishi 2 Apr 19, 2022
Extended library functions using generics in Go.

Just few extended standard library functions for Golang using generics.

null 1 Dec 16, 2021
A library that provides Go Generics friendly "optional" features.

go-optional A library that provides Go Generics friendly "optional" features. Synopsis some := optional.Some[int](123) fmt.Printf("%v\n", some.IsSome(

moznion 14 Jul 22, 2022
experimental promises in go1.18 with generics

async go a prototype of "promises" in go1.18. note: this is just an experiment used to test alternate patterns for dealing with asynchronous code in g

nick comer 58 Jul 31, 2022
Go 1.18 generics use cases and examples

Go 1.18 generics use cases What are generics? See Type Parameters Proposal. How to run the examples? As of today, gotip is the simplest way to run the

Vladimir Varankin 3 Jan 10, 2022
Functional tools in Go 1.18 using newly introduced generics

functools functools is a simple Go library that brings you your favourite functi

Rakeeb Hossain 176 Jul 29, 2022
Experimenting with golang generics to implement functional favorites like filter, map, && reduce.

funcy Experimenting with golang generics to implement functional favorites like filter, map, && reduce. 2021-12 To run the tests, you need to install

null 0 Dec 29, 2021
A collection of functional operators for golang with generics

fn fn is a collection of go functional operators with generics Getting Started P

Billy Irwin 9 Jul 8, 2022
Benchmarks to compare Go Generics

This is a collection of various sorts implemnted both as []int only and as const

Jacob Alberty 3 Jan 30, 2022
Utility library that uses Go generics mechanism

golang-generics-util Utility library that explores Go generics (1.18) xsync Sync

Anton Tiurin 2 Apr 23, 2022
CDN-like in-memory cache with shielding, and Go 1.18 Generics

cache CDN-like, middleware memory cache for Go applications with integrated shielding and Go 1.18 Generics. Usage package main import ( "context" "

Alex 0 Apr 26, 2022
Go 1.18 generics based slice and sorts.

genfuncs import "github.com/nwillc/genfuncs" Package genfuncs implements various functions utilizing Go's Generics to help avoid writing boilerplate c

Nwillc 20 Jul 20, 2022
A hands-on approach for getting started with Go generics.

Go Generics the Hard Way This repository is a hands-on approach for getting started with Go generics: Prerequisites: how to install the prerequisites

Andrew Kutz 1.7k Aug 2, 2022
Optional type using Go 1.18 generics.

go.eth-p.dev/goptional Generic Optional (or Go Optional, if you prefer) goptional is a package that provides an implementation of an Optional[T] monad

Ethan P. 0 Apr 2, 2022