In general, no. Each time you pass around a []byte you are actually passing around a copy of a pointer to the slice. Modifications will affect the underlying slice. You can use arrays instead, which are always PBV. Take care though, if you try to pass an array to a function accepting a slice via arr[:] you will still end up modifying the underlying slice values.
Examples: https://go.dev/play/p/qeUebAeXZAK On Thursday, October 20, 2022 at 8:48:01 AM UTC-5 Ian Lance Taylor wrote: > On Thu, Oct 20, 2022 at 5:46 AM Slawomir Pryczek <slawe...@gmail.com> > wrote: > > > > Hi Guys, writing a quick K/V caching system and have a performance > related question. > > > > Will be operating on []byte, for the system to be thread safe we need to > create a copy of data before each SET so we're sure that the slice which > gets added to pool can't be modified. This shouldn't be problematic, but > there's a problem with GET. > > > > For the system to be thread-safe we need to isolate the returned slice > from the data pool so if we do, eg. x := Get("key_abc") we won't create > issues by later doing x[1]='a'. So we'll need to create a copy of whole key > for each GET. We will have very few SETs but millions of GETs. So is it > possible for the slice to be not-mutable like strings are or you can > suggest some other approach? > > What if you simply return a string? If the caller must not modify the > returned data, a string is more or less the same as a []byte. > > Ian > -- 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/78f9482a-f795-48b6-a6d3-170c1cf4f8e3n%40googlegroups.com.