Hello, I title say, I download Go 1.18 beta (at this moment "go version go1.18beta2 linux/amd64") and I try to work through "Type Parameters Proposal" with it (https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md). This thread is about thing that I can't code properly into Go 1.18 beta.
I hope that you forgive me if I ask some questions before reading full proposal for the second time, previously I read in the September of the last year, and trying every solution obvious to good gopher. I have a little time and energy recently and I still want to try my hand with generics ASAP. I read and try every example from "Tutorial: Getting started with generics" (https://go.dev/doc/tutorial/generics), but it didn't help me with my problems. Maybe I just not advanced enough gopher (I'm at most medicore gopher) or I'm to tired recently to think creatively about Go. My first stumbling block is from section "Generic types" (https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md#generic-types). At the end of it we have code. > type StringableVector[T Stringer] []T > > func (s StringableVector[T]) String() string { > var sb strings.Builder > for i, v := range s { > if i > 0 { > sb.WriteString(", ") > } > // It's OK to call v.String here because v is of type T > // and T's constraint is Stringer. > sb.WriteString(v.String()) > } > return sb.String() > } So, I try to code it. > package main > > import ( > "fmt" > "strings" > ) > > type Stringer interface { > String() string > } > > type StringableVector[T fmt.Stringer] []T > > type stupidFloat float64 > > func (sF stupidFloat) String() string { > return fmt.Sprintf("Stupid float %v", float64(sF)) > } > > func main() { > var varStupidFloat stupidFloat = -1.0 > > sliceStupidFloat := make([]stupidFloat, 3) > > for i := 0; i < 3; i++ { > sliceStupidFloat[i] = stupidFloat(float64(i)) > } > > fmt.Println("stupidFloat.String(): ", varStupidFloat.String()) > > fmt.Println("sliceStupidFloat:", sliceStupidFloat) > > fmt.Println("sliceStupidFloat:", sliceStupidFloat) // fmt.Println("sliceStupidFloat.String():", sliceStupidFloat.String()) > } > > func (s StringableVector[T]) String() string { > var sb strings.Builder > > for i, v := range s { > if i > 0 { > sb.WriteString(", ") > } > sb.WriteString(v.String()) > } > > return sb.String() > } It works fine and produce result. > stupidFloat.String(): Stupid float -1 > sliceStupidFloat: [Stupid float 0 Stupid float 1 Stupid float 2] > sliceStupidFloat: [Stupid float 0 Stupid float 1 Stupid float 2] But, when I uncommon last line in function main I get > ./Go-s11-08.go:46:61: sliceStupidFloat.String undefined > (type []stupidFloat has no field or method String) I try to change my code in several ways, but result is always the same. How correct code should look like? Best regards, Kamil -- 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/85a60176-a22d-46fb-9676-3d5360d44d05n%40googlegroups.com.