Dear all,
the following code panics with: runtime error: slice bounds out of range
var testTransform = transform.Chain(norm.NFD, norm.NFC)
func main() {
for i := 0; i < 200; i++ {
go func() {
transform.String(testTransform, "nonemptystring")
}()
}
time.Sleep(time.Second)
}
The reason is transform.Chain returns a Transformer which keeps an internal state
while sequentially applying each transformation. When called by two goroutines,
this state gets corrupted.
For me, this was unexpected, as each transform by itself seems thread-safe. Errors
caused by this behaviour might be hard to track. I suggest changing the implementation
of transform.Chain.Transform to generate a new state for each call or make a note about
this in the docs.
Or maybe I was expecting something I should not?
I can write a thread-safe version of chain.Transform if this is the way to go. Please comment.
Regards
Bryan