Re:The ups and downs of porting 50k lines of C++ to Go (2015)
by 314 on Thursday March 14, 2019 @06:22AM
(#19387900)
In python slice[0:-1] drops the last element. To get the same effect in Go you need world := b[:len(b)-1]. The len() needs to be there (your example is a different case).
Re:The ups and downs of porting 50k lines of C++ to Go (2015)
by laumars on Thursday March 14, 2019 @06:26AM
(#19387926)
Yes, I was the one who made the comment about Go's lack of a -1 for slices in the first place. ;)
I was actually referencing the 0 part and thus saying Go does already have some syntactic sugar when dealing with slices. ie you can do:
slice[5:] // slice[:len(slice)]
but not slice[5:-1] // slice[:len(slice)-1]
Which is a great pity.However I'll update my previous comment to make that clearer because I can totally understand how it reads confusingly.
Lots of languages offer something akin to that. If not `[-1]` then something more OO like `.last`. Even the language I wrote supports it. This is why I made the complaint about Go.
> Also slice[0:-1] etc.
In fairness, Go can do that. You just omit the value for where you want the last (or first) element of the slice or array. eg
(this would work with strings too but I'm using a byte to make it clear we're working with slices)edit: just for clarity I mean Go has the syntactic sugar for stating the start or end of a slice - rather than a negative number of elements from the end of the slice. My point being that there is already some syntactic sugar in specifying slices so it's a shame Go doesn't take that further.