Изглежда не разбирам нещо фундаментално свързано с Go стринговете. Документацията, както обикновенно, не помага с нищо. Но този път и reverse engineering с четене на Go имплементацията не помогна. Затова ми се иска да питам тук за парче код.
var out string
buf := make([]byte, 10*1024)
// случват се някакви неща с buf, най - вече File.Read
// и няколко пъти, нека да кажем два, се изпълнява следния ред
out = out + string(buf)
// след всичките тези неща искаме да видим какво е станало
println(out)
println(len(out))
След всичко това резултата от горните две е, че първия println показва стринга, какъвто очаквам. Но втория за len(out) e 20480 (!словом: двадесет хиляди, четери стотин и осемдесет). Ъх? Стринга, който очаквам е 10-на, 15 символа. И толкова си се показва. strings.TrimSpace нищо не променя. С какво е пълен този стринг? WTF? Как се проверява колко е дълъг стринг наистина? А ако всъщност е пълен с боклуци как да видя? Като спра да се дразня на Go може да напиша и малка програмка, която да демонстрира поведението.