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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/cd343e62-925f-4185-af3d-8c04c16aefbfn%40googlegroups.com.