Example code for Go generics

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
Comments
  • Fix: list, fix InsertAt

    Fix: list, fix InsertAt

    Problems caused by slice expansion.

    When the first time function InsertAt is called, cased by slice expansion, l.l[0] isn't changed, v is assigned to the old slice not new.

  • 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

  • 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? 🤔

  • 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.

  • 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

  • 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"
    	}))
    }
    
    
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

Dec 25, 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

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 ("

Dec 31, 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

Dec 14, 2022
Package truthy provides truthy condition testing with Go generics
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

Nov 11, 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

Dec 21, 2022
Extended library functions using generics in Go.

Just few extended standard library functions for Golang using generics.

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(

Dec 20, 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

Dec 23, 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

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

Dec 5, 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

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

Jul 8, 2022
Benchmarks to compare Go Generics

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

Dec 8, 2022
Utility library that uses Go generics mechanism

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

Dec 11, 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" "

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

Jan 2, 2023
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

Dec 27, 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

Apr 2, 2022