«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создает ли преобразование типов псевдонимов Go копии?

Создает ли преобразование типов псевдонимов Go копии?

Опубликовано 21 декабря 2024 г.
Просматривать:781

Does Go's Alias Type Conversion Create Copies?

Вызывает ли назначение между псевдонимами копирование в Go?

Go позволяет определять пользовательские типы с использованием псевдонимов. Возникают сомнения относительно того, приводят ли преобразования между этими типами псевдонимов к копиям или просто к структурным изменениям.

Рассмотрим следующий пример:

type MyString string 
var s = "very long string"
var ms = MyString(s)
var s2 = string(s)

// Are ms or s2 a full copy of s?

Ответ:

Согласно правилам преобразования Go, непостоянные преобразования между числовыми типами или строками могут привести к стоимость выполнения из-за изменений представления. Однако все остальные преобразования, например между псевдонимами, сохраняют исходное представление без создания копий.

Поэтому и ms, и s2 не являются полными копиями s, а ссылаются на одно и то же базовое значение. .

Влияние на вызовы функций:

При передаче значений в функции обычно создаются копии. Однако это не относится к типам псевдонимов. Присвоение значения типа псевдонима параметру функции не запускает копирование:

func foo(s MyString){
  ...
}
foo(ms) // No copy is made when passing ms to foo()

Подводя итог, хотя преобразования между типами псевдонимов не создают копии базового значения, этот принцип не распространяется на передачу значений в функции где обычно делаются копии.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3