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

Когда использовать аргументы среза, ограниченные типами среза, а не общие аргументы среза в Go?

Опубликовано 9 ноября 2024 г.
Просматривать:451

When to Use Slice Arguments Constrained to Slice Types vs. Generic Slice Arguments in Go?

Общие аргументы среза: понимание различий

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

Аргумент среза, ограниченный типами среза

Рассмотрим функцию среза. первый аргумент ограничен ~[]E. Это означает, что тип этого аргумента должен быть типом среза с типом элемента E.

Общий аргумент среза

Напротив, рассмотрим функцию слайсы.Contains с первым аргументом, просто набранным как []E. Это позволяет использовать любой тип среза с типом элемента E.

Практические различия

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

Возврат среза

Если функция требует возврата среза того же типа, что и входной срез, вы должны использовать аргумент среза, ограниченный типами среза (~[]E). Это гарантирует, что возвращаемый срез имеет правильный базовый тип.

Пример

Давайте сравним две реализации Grow(): одну с использованием ~[]E, а другую с использованием [ ]E.

func Grow[S ~[]E, E any](s S, n int) S {
    // ...
}

func Grow2[E any](s []E, n int) []E {
    // ...
}

Если мы передаем фрагмент пользовательского типа (например, []MyInt), Grow() может вернуть значение того же типа. Однако Grow2() может возвращать только общий тип среза ([]E).

Заключение

В общем, если вам нужно вернуть срез одного и того же type в качестве входного среза, вы должны использовать аргумент среза, ограниченный типами среза (~[]E). В противном случае достаточно использовать общий аргумент среза.

Заявление о выпуске Эта статья перепечатана по адресу: 1729666579. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3