An example demostrating how to let Reader.Read support both string and 
[]byte parameters.

package readonlybytes[T] (
    assert T.kind & (String | Slice)
)

package Reader[T] (
    assert readonlybytes[T]
){
    type Reader interface {
        Read(bytes T)(n int, err error)
    }
}

package MyReader[T](
    assert T.kind & (String | Slice)
){
    type MyReader struct{}

    type (r *MyReader) Read(s T)(int, error) {
        return len(s), nil
    }
}

// use it:

var mrs MyReader string
var mrb MyReader []byte

s := "Golang"
bs := make([]byte, 100)

var rs Reader string = mrs
_, _ = rs.Read(s)
var rb Reader []byte = mrb
_, _ = rb.Read(bs)

rb = (MyReader string)(rs)
_, _ = rb.Read(bs)
rs = (MyReader []byte)(rb)
_, _ = rs.Read(s)



On Wednesday, August 26, 2020 at 1:16:49 PM UTC-4 Di gg wrote:

>
>
> https://github.com/dotaheor/unify-Go-builtin-and-custom-generics/blob/master/use-package-as-gen.md
>
> This is an alternative generic idea set, which should be Go 1 compatible.
> It tries to use the same syntax forms as builtin generics.
>
> Different from the official draft, it adopts a from-top-to-bottom pattern,
> instead of the from-bottom-to-top pattern, to describe type parameters.
> For example, given a map type parameter M, its key and element types could
> be denoted as M.key and M.element, whereas to use a map type parameter,
> its key and elements must also present in the declaration signarure or 
> constraint definitions.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/cd343e62-925f-4185-af3d-8c04c16aefbfn%40googlegroups.com.

Reply via email to