Пример:Преобразование между типами псевдонимов в Go создает копии?
type MyString string
var s = "very long string"
var ms = MyString(s)
var s2 = string(s)
ли ms
или s2
полную копию s
(как это будет сделано с []byte(s)
)? Или они просто строковые копии структуры (которая сохраняет реальное значение в указателе)? Что делать, если мы передаем это функции? Например:
func foo(s MyString){
...
}
foo(ms(s)) // do we copy s here?
Это помогает запомнить, что * все * в Go является значением, а все присваивания являются копией этого значения. 'foo (ms (s))' делает копию, но не из-за преобразования. – JimB