Go: всС: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° постСпСнного восстановлСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 1 Π΄Π΅ΠΊ. 2016  Β·  225ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: golang/go

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° постСпСнного восстановлСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ

Go Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ эквивалСнтныС ΠΈΠΌΠ΅Π½Π° для Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ постСпСнноС восстановлСниС ΠΊΠΎΠ΄Π° Π²ΠΎ врСмя Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Ρ†Π΅Π»ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ псСвдонима Go 1.8, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² # 16339, Π½ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ ΠΎΡ‚ Go 1.8. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для Go 1.8, ΠΎΠ½Π° остаСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΈ я надСюсь, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ смоТСм Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π΅ для Go 1.9.

ΠŸΡ€ΠΈ обсуТдСнии прСдлоТСния ΠΏΠΎ псСвдониму Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ вопросов ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для Ρ‚ΠΈΠΏΠΎΠ² особСнно Π²Π°ΠΆΠ½Π°. Π’ качСствС свСТСй ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° эти вопросы я написал ΠΈ размСстил ΡΡ‚Π°Ρ‚ΡŒΡŽ Β« Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Go) Β». ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ вопросы ΠΎ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ. (ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ, Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΡƒΡŽ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡŽ см. Π’ выступлСнии Π ΠΎΠ±Π΅Ρ€Ρ‚Π° Π½Π° Gophercon Lightning . К соТалСнию, это Π²ΠΈΠ΄Π΅ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ доступно Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π΄ΠΎ 9 октября. ОбновлСниС, 16 дСкабря: Π²ΠΎΡ‚ ΠΌΠΎΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ GothamGo , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΠΎ сути, Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊΠΎΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ.)

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° _Π½Π΅_ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ВмСсто этого я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π²Ρ‹ ΠΎΡ‚ сообщСства Go ΠΎ пространствС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Один ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… способов - ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ псСвдонимы Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ стоит Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠΉΡ‚Π΅ мысли ΠΎ псСвдонимах Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² здСсь.

Бпасибо.

ОбновлСниС, 16 дСкабря : ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° докумСнтация ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ².
ОбновлСниС, 9 января : ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ принято, Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ dev.typealias создан, рСализация Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Go 1.9 для экспСримСнтов.


Π‘Π²ΠΎΠ΄ΠΊΠ° обсуТдСния (послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: 02.02.2017)

ОТидаСм Π»ΠΈ ΠΌΡ‹, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ понадобится ΠΎΠ±Ρ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ для всСх объявлСний?

Если псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π° 100%, Ρ‚ΠΎΠ³Π΄Π° псСвдонимы var, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π° 10%, псСвдонимы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π° 1%, Π° псСвдонимы const Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π° 0%. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ const ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ = ΠΈ func Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ =, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ вопрос Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, достаточно Π»ΠΈ Π²Π°ΠΆΠ½Ρ‹ псСвдонимы var для планирования ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Как ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ @rogpeppe (https://github.com/golang/go/issues/16339#issuecomment-258771806) ΠΈ @ianlancetaylor (https://github.com/golang/go/issues/16339#issuecomment-233644777) Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ псСвдонима ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°ΡΡΡ глобальная пСрСмСнная ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ошибкой. ВСроятно, Π½Π΅Ρ‚ смысла ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для исправлСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ошибкой. (На самом Π΄Π΅Π»Π΅, Ссли ΠΌΡ‹ смоТСм Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, мСня Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚, Ссли Π² долгосрочной пСрспСктивС Go ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ нСизмСнности Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….)

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ псСвдонимы var, вСроятно, нСдостаточно Π²Π°ΠΆΠ½Ρ‹ для планирования, каТСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ здСсь - ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° псСвдонимах Ρ‚ΠΈΠΏΠΎΠ². Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² здСсь, каТСтся, согласны. НС Π±ΡƒΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ всСх.

НуТСн Π»ΠΈ Π½Π°ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис (= vs => vs export)?

Π‘Π°ΠΌΡ‹ΠΉ вСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ псСвдонимов var сСйчас ΠΈΠ»ΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ (https://github.com/golang/go/issues/18130#issuecomment-264232763 ΠΎΡ‚ @Merovius). ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС псСвдонимов var (см. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»).

Π‘Π΅Π· псСвдонимов var ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС = ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ => ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ псСвдонима, ~ (https://github.com/golang/go/issues/18130#issuecomment-264185142 by @joegrasse) ΠΈΠ»ΠΈ экспорт (https://github.com/golang/go/issues/18130#issuecomment-264152427 ΠΎΡ‚ @cznic).

ИспользованиС = in Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствуСт синтаксису псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² Π² Pascal ΠΈ Rust. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис.

ЗабСгая Π²ΠΏΠ΅Ρ€Π΅Π΄, Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Go, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (см. Https://github.com/golang/go/issues/18130#issuecomment-264324306 ΠΎΡ‚ @nigeltao), ΠΈ Ρ‚ΠΎΠ³Π΄Π° всС объявлСния Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒ :

const C2 = C1
func F2 = F1
type T2 = T1
var V2 = V1

ЕдинствСнным ΠΈΠ· Π½ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ истинный псСвдоним, Π±ΡƒΠ΄Π΅Ρ‚ объявлСниС var, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ V2 ΠΈ V1 ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ нСзависимо ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ объявлСний const, func ΠΈ type, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½Π° ΠΈΠ· основных ΠΏΡ€ΠΈΡ‡ΠΈΠ½ использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ. Если Go ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ исчСзнСт.

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ясным, я Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ здСсь псСвдонимы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ нСизмСняСмыС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° просто ΠΏΡ€ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽ послСдствия Ρ‚Π°ΠΊΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ.

@jimmyfrasche ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» (https://github.com/golang/go/issues/18130#issuecomment-264278398) псСвдонимы для всСго, ΠΊΡ€ΠΎΠΌΠ΅ const, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ const вмСсто var:

const C2 = C1 // no => form
func F2 => F1
type T2 => T1
var V2 => V1
var V2 = V1 // different from => form

НСсоотвСтствиС ΠΊΠ°ΠΊ с константой, Ρ‚Π°ΠΊ ΠΈ с var каТСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ для объяснСния, Ρ‡Π΅ΠΌ просто нСсоотвСтствиС для var.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ это Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнтария ΠΈΠ»ΠΈ компилятора вмСсто измСнСния языка?

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, стоит ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ постСпСнноС восстановлСниС ΠΊΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, прСдоставлСнной компилятору (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, https://github.com/golang/go/issues/18130#issuecomment-264205929 ΠΎΡ‚ @btracey).

Или, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ссли компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½Π° основС ΠΏΡ€Π°Π²ΠΈΠ» для прСобразования Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, https://github.com/golang/go/issues/18130#issuecomment-264329924 by @ tux21b).

К соТалСнию, Π½Π΅Ρ‚, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ этим. Π•ΡΡ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄Π²Π° компилятора (gc ΠΈ gccgo), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ go vet, guru, goimports, gocode (Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Как сказал @bcmills (https://github.com/golang/go/issues/18130#issuecomment-264275574), Β«ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΒ« Π±Π΅Π· измСнСния языка Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ всСми рСализациями, Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ являСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка - это просто Ρ‚ΠΎΡ‚, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ плохая докумСнтация Β».

КакиС Π΅Ρ‰Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ псСвдонимы?

Нам извСстно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅. Учитывая, Ρ‡Ρ‚ΠΎ Π² частности псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π±Ρ‹Π»ΠΈ сочтСны достаточно Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Pascal ΠΈ Rust, вСроятно, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

  1. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ (ΠΈΠ»ΠΈ просто псСвдонимы Ρ‚ΠΈΠΏΠΎΠ²) позволят ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ замСняСмыС Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. НапримСр, см. Https://go-review.googlesource.com/#/c/32145/ , особСнно объяснСниС Π² сообщСнии фиксации.

  2. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ (ΠΈΠ»ΠΈ просто псСвдонимы Ρ‚ΠΈΠΏΠΎΠ²) ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ с нСбольшой ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒΡŽ API, Π½ΠΎ с большой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры, Π½ΠΎ всС ΠΆΠ΅ прСдставляли Π±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ использования ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. На https://github.com/golang/go/issues/16339#issuecomment -232813695 описан нСсколько абстрактный ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

  3. Π‘ΡƒΡ„Π΅Ρ€Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Β«ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°Β», сСмантику ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² сгСнСрированном ΠΊΠΎΠ΄Π΅ C ++, Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² сгСнСрированном ΠΊΠΎΠ΄Π΅ Go. Π­Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ C ++ ΠΈ Go. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΠΎΠ² позволят Go Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ЀактичСски, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования import public Π±Ρ‹Π»ΠΎ постСпСнноС исправлСниС ΠΊΠΎΠ΄Π° . ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΊΠΎΠ΄Π°.

  4. Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ (нСэкспортированныС ΠΈΠ»ΠΈ Π½Π΅ связанныС с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ) псСвдонимы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ для сокращСния Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠ° Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚, связанных с ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Как ΠΈ Π²ΠΎ всСх этих случаях, ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ сильно Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ‚ΠΎ, являСтся Π»ΠΈ это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ использованиСм.

КакиС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ псСвдонимам Ρ‚ΠΈΠΏΠΎΠ²?

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΡ… для справки. НС ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅, хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈ суммированы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π½ΠΈΠΆΠ΅.

  1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Π³ΠΎΠ΄ΠΎΠΊ. (https://github.com/golang/go/issues/18130#issuecomment-264323137 ΠΎΡ‚ @nigeltao ΠΈ https://github.com/golang/go/issues/18130#issuecomment-264326437 ΠΎΡ‚ @jimmyfrasche)

  2. МоТно Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ², Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… псСвдонимом? (https://github.com/golang/go/issues/18130#issuecomment-265077877 ΠΎΡ‚ @ulikunitz)

  3. Если псСвдонимы для псСвдонимов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ псСвдонимов? (https://github.com/golang/go/issues/18130#issuecomment-264494658 ΠΎΡ‚ @thwd)

  4. Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ псСвдонимы ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСэкспортированныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹? (https://github.com/golang/go/issues/18130#issuecomment-264494658 ΠΎΡ‚ @thwd)

  5. Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ встраиваСтС псСвдоним (ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ встроСнному полю)? (https://github.com/golang/go/issues/18130#issuecomment-264494658 ΠΎΡ‚ @thwd , Ρ‚Π°ΠΊΠΆΠ΅ # 17746)

  6. Доступны Π»ΠΈ псСвдонимы Π² Π²ΠΈΠ΄Π΅ символов Π²ΠΎ встроСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅? (https://github.com/golang/go/issues/18130#issuecomment-264494658 ΠΎΡ‚ @thwd)

  7. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ строки ldflags: Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ обратимся ΠΊ псСвдониму? (https://github.com/golang/go/issues/18130#issuecomment-264494658 ΠΎΡ‚ @thwd; это Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ псСвдонимов var.)

ВСрсионированиС - это само ΠΏΠΎ сСбС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?

Β«Π’ этом случаС, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вСсь ΠΎΡ‚Π²Π΅Ρ‚ - это ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями, Π° Π½Π΅ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ²Β».
(https://github.com/golang/go/issues/18130#issuecomment-264573088 ΠΎΡ‚ @iainmerrick)

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ , я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ², Π΄Π°Π΅Ρ‚ систСмС управлСния вСрсиями Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° создаСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Π΅Π΅ отсутствиСм.

МоТно Π»ΠΈ вмСсто этого Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°?

Π’ https://github.com/golang/go/issues/18130#issuecomment -265052639 @niemeyer ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π±Ρ‹Π»ΠΎ Π΄Π²Π° измСнСния для пСрСмСщСния os.Error Π² error: измСнилось имя, Π½ΠΎ измСнилось ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠœΠ΅Ρ‚ΠΎΠ΄ ошибки Ρ€Π°Π½ΡŒΡˆΠ΅ Π±Ρ‹Π» ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ String).

@niemeyer ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ смоТСм Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, которая исправляСт Ρ‚ΠΈΠΏΡ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΊΠ°ΠΊ особый случай, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, построСнноС Π½Π° Β«Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°Ρ…Β».

Π’ коммСнтариях Π΅ΡΡ‚ΡŒ изрядноС количСство обсуТдСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π΅ ΠΌΠΎΠ³Ρƒ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ здСсь. Дискуссия Π½Π΅ ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Π½ΠΎ ΠΏΠΎΠΊΠ° нСясно, ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈ Β«Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹Β» Π²ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π² язык ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° порядок слоТнСС псСвдонимов Ρ‚ΠΈΠΏΠΎΠ².

АдаптСрам Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ выдСлСния ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ², ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅.

МоТно Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для псСвдонимов Ρ‚ΠΈΠΏΠΎΠ²?

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, псСвдонимы Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ограничСния опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ опрСдСляСт Ρ‚ΠΈΠΏ T1 = otherpkg.T2, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° T1, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ нСпосрСдствСнно Π½Π° otherpkg.T2. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Ρ‚ΠΈΠΏ T1 = otherpkg.T2, Ρ‚ΠΎΠ³Π΄Π° func (T1) M () эквивалСнтСн func (otherpkg.T2) M (), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сСгодня нСдопустим ΠΈ остаСтся Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Однако, Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ опрСдСляСт Ρ‚ΠΈΠΏ T1 = T2 (ΠΎΠ±Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅), Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ ясСн. Π’ этом случаС func (T1) M () Π±Ρ‹Π» Π±Ρ‹ эквивалСнтСн func (T2) M (); ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послСднСС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ, Π΅ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ. ВСкущая проСктная докумСнтация здСсь Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ (Π² соотвСтствии с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ избСТания ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ func (T1) M () Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° Π² этой ситуации.

Π’ https://github.com/golang/go/issues/18130#issuecomment -267694112 @jimmyfrasche ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вмСсто этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Β«Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы Π² опрСдСлСниях ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β» Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ. Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π° Π»ΠΈ функция func (T) M (). Π’ https://github.com/golang/go/issues/18130#issuecomment -267997124 @rsc ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ сСгодня Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ T, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… func (T) M () нСдСйствитСлСн: https: // play .golang.org / p / bci2qnldej. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ этого Π½Π΅ происходит, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ люди ΠΏΠΈΡˆΡƒΡ‚ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎΠ± этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ, Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ появятся ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π΅Π³ΠΎ нСобходимости, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π•ΡΡ‚ΡŒ Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ чистый способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ встраивания ΠΈ, Π² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΠ»Π°Π½Π΅, пСрСимСнования ΠΏΠΎΠ»Π΅ΠΉ?

Π’ https://github.com/golang/go/issues/18130#issuecomment -267691816 @Merovius ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ встроСнный Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ мСняСт своС имя Π²ΠΎ врСмя пСрСмСщСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° это Π½ΠΎΠ²ΠΎΠ΅ имя Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ принято Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сайты. НапримСр, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ U ΠΈΠΌΠ΅Π΅Ρ‚ встроСнный io.ByteBuffer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСмСщаСтся Π² bytes.Buffer, Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° U встраиваСт io.ByteBuffer, имя поля - U.ByteBuffer, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° U обновляСтся для ссылки Π½Π° bytes.Buffer, имя поля ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ мСняСтся Π½Π° U.Buffer.

Π’ https://github.com/golang/go/issues/18130#issuecomment -267710478 @neild ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сущСствуСт ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, Ссли ссылки Π½Π° io.ByteBuffer Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹: ΠΏΠ°ΠΊΠ΅Ρ‚ P, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт U, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ 'type ByteBuffer = bytes.Buffer' ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ этот Ρ‚ΠΈΠΏ Π² U. Π’ΠΎΠ³Π΄Π° U всС Π΅Ρ‰Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ U.ByteBuffer Π΄Π°ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ io.ByteBuffer ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ исчСзнСт.

Π’ https://github.com/golang/go/issues/18130#issuecomment -267703067 @bcmills ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ идСю псСвдонимов ΠΏΠΎΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠ³Π»ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΈΠΌΠ΅Π½ Π²ΠΎ врСмя постСпСнного восстановлСния. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ type U struct { bytes.Buffer; ByteBuffer = Buffer } вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ псСвдоним Ρ‚ΠΈΠΏΠ° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.

Π’ https://github.com/golang/go/issues/18130#issuecomment -268001111 @rsc ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ синтаксис для Β«Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ этот Ρ‚ΠΈΠΏ с этим ΠΈΠΌΠ΅Π½Π΅ΠΌΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹. Buffer Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ поля ByteBuffer, Π±Π΅Π· нСобходимости Π² Ρ‚ΠΈΠΏΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈΠ»ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ. Если Π±Ρ‹ ΠΎΠ½ сущСствовал, Ρ‚ΠΎ имя Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ с io.ByteBuffer Π΄ΠΎ bytes.Buffer, сохранив исходноС имя (ΠΈ Π½Π΅ вводя Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠΈΠΉ экспортируСмый Ρ‚ΠΈΠΏ).

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ всС это стоит ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ большС ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π² ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ², Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»Π΅ΠΉ. Как написал @rsc : «Если псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΌ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° отсутствиС псСвдонимов ΠΏΠΎΠ»Π΅ΠΉ станСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ большим прСпятствиСм для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ², это Π±ΡƒΠ΄Π΅Ρ‚ прогрСсс!Β»

Π‘Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ использованиС псСвдонимов Π²ΠΎ встроСнных полях ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ встроСнноС имя для использования ΠΈΠΌΠ΅Π½ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ это заставляСт Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ псСвдонима Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ опрСдСлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ исправлСны Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ, ΠΏΠΎ сущСству прСдотвращая любоС постСпСнноС восстановлСниС. @rsc: Β«ΠœΡ‹ обсуТдали это довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² # 17746 Π― ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» Π½Π° сторонС ΠΈΠΌΠ΅Π½ΠΈ встроСнного псСвдонима io.ByteBuffer Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π±ΡƒΡ„Π΅Ρ€, Π½ΠΎ Π²Ρ‹ΡˆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΠ» мСня , Ρ‡Ρ‚ΠΎ я Π±Ρ‹Π» Π½Π΅ΠΏΡ€Π°Π² @jimmyfrasche , Π² частности , сдСлали нСсколько Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ….. Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅ мСняСтся Π² зависимости ΠΎΡ‚ опрСдСлСния встроСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ цСлСсообразно ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ встроСнныС псСвдонимы ".

Как это влияСт Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅?

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, видят псСвдонимы. Π’ https://github.com/golang/go/issues/18130#issuecomment -267903649 @atdiar ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΈΠΏ, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ имя Ρ‚ΠΈΠΏΠ°, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ°, Π΄Π°ΠΆΠ΅ Ссли псСвдоним пСрСсылки оставлСн. Π’ https://github.com/golang/go/issues/18130#issuecomment -268001410 @rsc ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ» это ΠΈ написал: «Как ΠΈ ситуация с встраиваниСм, ΠΎΠ½Π° Π½Π΅ идСальна. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ситуации с встраиваниСм, Ρƒ мСня Π½Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ΄ Π½Π΅ слСдуСт ΠΏΠΈΡΠ°Ρ‚ΡŒ с использованиСм отраТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊ этим дСталям ".

ИспользованиС Π²Π΅Π½Π΄ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² сСгодня Ρ‚Π°ΠΊΠΆΠ΅ мСняСт ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ reflection, ΠΈ ΠΌΡ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ освСдомлСны ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ…, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… этой Π΄Π²ΡƒΡΠΌΡ‹ΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. Π­Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Reflect.Type.PkgPath способами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Ρ‹ использованиСм псСвдонимов. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, это ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π», ΠΊΠ°ΠΊ ΠΈ встраиваниС.

Как это влияСт Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²?

Π’ https://github.com/golang/go/issues/18130#issuecomment -268524504 @atdiar ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ вопрос ΠΎ влиянии Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. Π’ https://github.com/golang/go/issues/18130#issuecomment -268560180 @rsc ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅Ρ‚ нСобходимости Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния: Ссли X ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ измСнСния Y ΠΈ Y ΠΈ пСрСкомпилируСтся, Ρ‚ΠΎΠ³Π΄Π° X Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½. Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ сСгодня Π±Π΅Π· псСвдонимов ΠΈ останСтся Π²Π΅Ρ€Π½Ρ‹ΠΌ с псСвдонимами. РаздСльная компиляция ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ X ΠΈ Y Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ шаги (компилятор Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ²Π΅), Π° Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Y Π±Π΅Π· пСрСкомпиляции X.

ΠœΠΎΠ³ΡƒΡ‚ Π»ΠΈ Ρ‚ΠΈΠΏΡ‹ суммирования ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Ρ‹Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ?

Π’ https://github.com/golang/go/issues/18130#issuecomment -264413439 @iand ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Β«Π·Π°ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹Β», «список Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… значСниях ΠΈ Ρ‚. Π”. ". Π’ https://github.com/golang/go/issues/18130#issuecomment -268072274 @ j7b ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ алгСбраичСскиС Ρ‚ΠΈΠΏΡ‹, «поэтому ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ эквивалСнт пустого интСрфСйса с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя компиляции Π² качСствС бонуса». Π”Ρ€ΡƒΠ³ΠΈΠ΅ названия этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ - Ρ‚ΠΈΠΏΡ‹ сумм ΠΈ Ρ‚ΠΈΠΏΡ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, этого нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² с постСпСнным исправлСниСм ΠΊΠΎΠ΄Π°. Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом.

Π’ https://github.com/golang/go/issues/18130#issuecomment -268075680 @bcmills ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, указывая Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ алгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ прСдставлСниС, Ρ‡Π΅ΠΌ исходноС, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ суммы Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΠΊΠ°ΠΊ взаимозамСняСмый: послСдний ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π³ΠΈ Ρ‚ΠΈΠΏΠ°.

Π’ https://github.com/golang/go/issues/18130#issuecomment -268585497 @rsc ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ тСорСтичСский ΠΏΡƒΡ‚ΡŒ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ https://github.com/golang/go/issues/18130#issuecomment -265211655, Π°Π²Ρ‚ΠΎΡ€ @gri ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ постСпСнном восстановлСнии ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ T1 Π±Ρ‹Π» ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ T2, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. ЕдинствСнный способ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π° Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, - это Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ случайно являСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ².

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° постСпСнного восстановлСния ΠΊΠΎΠ΄Π° Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½Π°, алгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ / Ρ‚ΠΈΠΏΡ‹ сумм / Ρ‚ΠΈΠΏΡ‹ объСдинСний / Ρ‚ΠΈΠΏΡ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² сами ΠΏΠΎ сСбС слоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Go. Π’ΠΈΠ΄Π΅Ρ‚ΡŒ
ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы ΠΈ обсуТдСниС Go 1.6 AMA для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’ https://github.com/golang/go/issues/18130#issuecomment -265206780 @thwd ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Go ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ интСрфСйсами (bytes.Buffer ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ io.Reader ) ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсами (io.ReadWriter являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ io.Reader Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ), дСлая интСрфСйсы «рСкурсивно ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌΠΈ (согласно Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ диспСрсии) Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β», это Ρ€Π΅ΡˆΠΈΠ»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ всС Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ интСрфСйсы, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ структуры (Β«Ρ‚Π°ΠΊΠΆΠ΅ способствуСт Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ Π΄ΠΈΠ·Π°ΠΉΠ½ΡƒΒ»).

Π£ этого Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, описанныС Π²Ρ‹ΡˆΠ΅, поэтому ΠΎΠ½ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это Π½Π΅ относится ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ» @thwd Π² этом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС интСрфСйсов ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (см., НапримСр, https://github.com/golang/go/issues/18130#issuecomment-265211726 ΠΎΡ‚ @Merovius ΠΈ https: // github .com / golang / go / issues / 18130 # issuecomment-265224652 ΠΎΡ‚ @zombiezen).

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ собраны ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ограничСния для справки, Π½ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ограничСния Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ слоТности. Как я писал Π² https://github.com/golang/go/issues/18130#issuecomment -264195616, Β«Π½Π°ΠΌ, вСроятно, слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти ограничСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ фактичСский ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ, Π±ΠΎΠ»Π΅Π΅ простым Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, принСсСт Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ достаточно Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΎΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ".

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, любоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ обосновано Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°ΠΌΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΈΡ… Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² Π½Π΅Ρ‚. Если ΠΎΠΏΡ‹Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прСдоставил Ρ‚Π°ΠΊΠΈΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°, ΠΊ Π½ΠΈΠΌ стоит Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅? ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

(https://github.com/golang/go/issues/18130#issuecomment-264165833 ΠΈ https://github.com/golang/go/issues/18130#issuecomment-264171370 ΠΎΡ‚ @iand)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Β«ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π» стандартныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ соглашСнию ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ…Β», ΠΈΠ»ΠΈ Β«Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ спагСтти псСвдонимов Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒΒ», ΠΈΠ»ΠΈ «псСвдонимы Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ интСрфСйс {} ΠΈ ошибка» .

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ описанному Π²Ρ‹ΡˆΠ΅ ΡΠ»ΡƒΡ‡Π°ΡŽ Β«ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΒ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ x / image / draw.

НСпонятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ особСнной: ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΠΈ интСрфСйс {}, Π½ΠΈ ошибка Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΠ΅Ρ€Π΅Ρ„Ρ€Π°Π·ΠΈΡ€ΡƒΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ «псСвдоним ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²Β», ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ псСвдонима, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ псСвдонима error Π±Ρ‹Π»Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅? Π¦Π΅Π»Π΅Π²ΠΎΠΉ псСвдоним Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

(https://github.com/golang/go/issues/18130#issuecomment-264188282 ΠΎΡ‚ @jba)

Π­Ρ‚ΠΎ сдСлало Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ созданиС псСвдонима ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ достаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ постСпСнного восстановлСния (https://github.com/golang/go/issues/18130#issuecomment-264274714 by @ ΠΌΠ»Ρ€Π΄. ΠΊΡƒΠ±ΠΎΠΌΠ΅Ρ‚Ρ€ΠΎΠ²).

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎ Π±Ρ‹ ΠΎΡˆΠΈΠ±ΠΊΡƒ псСвдонима, ΠΊΠ°ΠΊ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅? Π¦Π΅Π»Π΅Π²ΠΎΠΉ псСвдоним Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ псСвдоним.

(ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΏΡ€ΠΈ обсуТдСнии псСвдонимов Π² Go 1.8)

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², опрСдСляСмых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π·Π°ΠΏΡ€Π΅Ρ‚Ρƒ прСобразования ΠΈΠ· io.ByteBuffer Π² bytes.Buffer Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅? ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ слСдуСт ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π΅ ΠΎΠ΄ΠΎΠ±Ρ€ΡΡ‚ΡŒ.

«Как насчСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ псСвдонимы Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ для« C Β»ΠΈΒ« нСбСзопасно Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‰Π΅ большС ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ использованию? Π’ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π΄ΡƒΡ…Π΅ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ синтаксис псСвдонимов Π±Ρ‹Π» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ ΠΈ выдСлялся Π² качСствС основы для продолТСния Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° . " - https://github.com/golang/go/issues/18130#issuecomment -264289940 ΠΎΡ‚ @xiegeo

Β«Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ автоматичСски Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ с псСвдонимом являСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ? Если ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ Π² дСйствиС golint, godoc ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ инструмСнты для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ старого Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ, это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ псСвдонимом Ρ‚ΠΈΠΏΠΎΠ². И послСдняя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° злоупотрСблСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ псСвдонима Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½Π° ". - https://github.com/golang/go/issues/18130#issuecomment -265062154 ΠΎΡ‚ @rakyll

Пока ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, каТСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… использованию. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ примСнСния (см. Π’Ρ‹ΡˆΠ΅).

Π”Π°ΠΆΠ΅ Π² случаС исправлСния ΠΊΠΎΠ΄Π° старый ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ псСвдонимом Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, Π² зависимости ΠΎΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π½Π°Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… Π³Ρ€Π°Ρ„ΠΎΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. ПсСвдоним Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ имя устарСло.

Π£ΠΆΠ΅ сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… объявлСний ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… (см. Https://github.com/golang/go/issues/18130#issuecomment-265294564 ΠΎΡ‚ @jimmyfrasche).

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅? ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ†Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

Β«ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ бСзымянному Ρ‚ΠΈΠΏΡƒ. Π­Ρ‚ΠΎ Π½Π΅ история« Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π° ΠΊΠΎΠ΄Π° Β»ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ бСзымянного Ρ‚ΠΈΠΏΠ° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ псСвдонимов для бСзымянных Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ я большС Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ Go ΠΊΠ°ΠΊ просто ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ бСзымянныС Ρ‚ΠΈΠΏΡ‹Β». - https://github.com/golang/go/issues/18130#issuecomment -276864903, Π°Π²Ρ‚ΠΎΡ€: @davecheney

Пока ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, каТСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… использованию. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ примСнСния с бСзымянными цСлями (см. Π’Ρ‹ΡˆΠ΅).

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ измСнСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

FrozenDueToAge Proposal Proposal-Accepted

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@cznic , @iand , Π΄Ρ€ΡƒΠ³ΠΈΠ΅: ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ _restrictions Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ_. Они ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ объяснСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ для любого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ссли Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΠ± ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ, Π²Π°ΠΌ придСтся Π»ΠΎΠΌΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²Ρƒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ мнСнию, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Часто ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния Π½Π° ΠΏΡ€ΠΎΠ±Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·-Π·Π° гипотСтичСского Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡ€ΠΈ обсуТдСнии прСдлоТСния псСвдонима, ΠΈ ΠΈΠ·-Π·Π° этого псСвдонимы Π² ΠΏΡ€ΠΎΠ±Π½ΠΎΠΉ вСрсии Π½Π΅ смогли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ io.ByteBuffer => bytes.Buffer ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ. Частично Ρ†Π΅Π»ΡŒ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ случаи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ случайно Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈ ΠΈΡ….

Π’ качСствС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ Π±Π΅Π· указатСля ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для нСструктурных Ρ‚ΠΈΠΏΠΎΠ². Если Π±Ρ‹ ΠΌΡ‹ сдСлали ΠΎΠ΄Π½ΠΎ ΠΈΠ· этих дСйствий, Π²Ρ‹ Π½Π΅ смогли Π±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ пСрСчислСния с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ String () для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ самих сСбя, ΠΈ Ρƒ вас Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ http.Headers ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являясь простой ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈ прСдоставляя Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Часто Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС злоупотрСблСния; Для появлСния ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пространство для экспСримСнтов.

Π’ качСствС Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, исходный Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ рСализация для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² указатСля ΠΈ значСния Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π»ΠΈ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° T ΠΈ * T: Ссли Π±Ρ‹ Ρƒ вас Π±Ρ‹Π» * T, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ значСния (ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ T), ΠΈ Ссли Π±Ρ‹ Ρƒ вас Π±Ρ‹Π» a T, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ указатСля (ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ * T). Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ просто, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Но Π·Π°Ρ‚Π΅ΠΌ фактичСский ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π» Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² указатСля Π½Π° значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ классу ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… с Ρ‚ΠΎΠ»ΠΊΡƒ, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ошибок. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

var buf bytes.Buffer
io.Copy(buf, reader)

ΠΈ io.Copy Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ, Π½ΠΎ Π² buf Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Нам ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ объяснСниСм, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈΠ»ΠΈ объяснСниСм, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ. Π’ любом случаС вопросы Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚, Π½ΠΎ ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ исполнСния. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… вопросов ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² конструкции Π²Ρ‹Ρ€Π΅Π·Π°Π½ΠΎ отвСрстиС.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ограничСния Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ слоТности. Как ΠΈ всякая ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ограничСния Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ обосновании. На этом этапС процСсса проСктирования Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ограничСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ подходящими для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°, Π½ΠΎ ΠΌΡ‹, вСроятно, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ эти ограничСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ фактичСский ΠΎΠΏΡ‹Ρ‚ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ, Π±ΠΎΠ»Π΅Π΅ простым Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, принСсСт Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ. ΠΎΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ.

ВсС 225 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

МнС нравится, насколько это Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎ.

const OldAPI => NewPackage.API
func  OldAPI => NewPackage.API
var   OldAPI => NewPackage.API
type  OldAPI => NewPackage.API

Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΈ постСпСнно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ элСмСнтов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, самый простой
Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ _is_ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ = для Ρ‚ΠΈΠΏΠΎΠ².

const OldAPI = NewPackage.API
func  OldAPI() { NewPackage.API() }
var   OldAPI = NewPackage.API
type  OldAPI = NewPackage.API

Π˜Ρ‚Π°ΠΊ, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, я просто Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ вас Π·Π° эту ΠΏΡ€Π΅ΠΊΡ€Π°ΡΠ½ΡƒΡŽ Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡŽ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов / ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ синтаксис ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π· ΠΊΠΎΠ΄Π°.

Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Русса, любоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ псСвдониму, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ https://github.com/golang/go/issues/17746 ΠΈ https://github.com/golang/go/issues/17784.

Бпасибо Π·Π° описаниС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ псСвдонимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΈΠΏΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ:

type OldAPI = NewPackage.API

Мои ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  • Π’Π°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅.
    ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ => ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ нСсколько ΠΈΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, основанноС Π½Π° Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π΅, каТСтся нСумСстным для Go.
  • Он Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΈ консСрвативСн.
    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½Π°, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ слоТностях ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.
  • Π­Ρ‚ΠΎ эстСтично.
    Π”ΡƒΠΌΠ°ΡŽ, это выглядит приятнСС.

ВсС Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅: простой, сфокусированный, консСрвативный ΠΈ эстСтичный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ позволяСт ΠΌΠ½Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС, Ρ‡Ρ‚ΠΎ это Ρ‡Π°ΡΡ‚ΡŒ Go.

Если Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚ΠΎ синтаксис

type NewFoo = old.Foo

ΡƒΠΆΠ΅ рассмотрСнный Ρ€Π°Π½Π΅Π΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ @rsc , ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС для констант, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ синтаксис (ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅)

package newfmt

import (
    "fmt"
)

// No renaming.
export fmt.Printf // Note: Same as `export Printf fmt.Printf`.

export (
        fmt.Sprintf
        fmt.Formatter
)

// Renaming.
export Foo fmt.Errorf // Foo must be exported, ie. `export foo fmt.Errorf` would be invalid.

export (
    Bar fmt.Fprintf
    Qux fmt.State
)

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, нСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ вводится Π½ΠΎΠ²ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΡŽ, Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, хотя тСхничСски осущСствимо ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимо. МнС нравится этот синтаксис, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ схСму ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. МнС казалось Π±Ρ‹ СстСствСнным, Ρ‡Ρ‚ΠΎ экспорт Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅, Π³Π΄Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΈΠΌΠΏΠΎΡ€Ρ‚, Ρ‚.Π΅. ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ TLD Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΈΠΏΠ°, константы ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ пСрСимСнования Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² области ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π² ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌ ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ (newfmt Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ объявлСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ TLD

var v = Printf // undefined: Printf.
var Printf int // Printf redeclared, previous declaration at newfmt.go:8.

Π’ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ пСрСимСнования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΈΠ΄Π½Ρ‹, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ экспортируСмый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Π»ΠΎΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π° (newftm).

package foo

import "newfmt"

type bar interface {
    baz(qux newfmt.Qux) // qux type is identical to fmt.State.
}

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… привязок Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ Π² newfmt, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, обсуТдаСмых Π² # 17746, ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ # 17784.

МоС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ - type NewFoo = old.Foo Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΈΠΏΠ°.

Если трСбуСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, я согласСн с @cznic Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (особСнно асиммСтричный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ с Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ [1]). ΠŸΡ€ΠΈ этом я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово export ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ни синтаксис, Π½ΠΈ сСмантика Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ import . А ΠΊΠ°ΠΊ насчСт alias ?

Π― понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ @cznic Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π±Ρ‹Π»ΠΈ доступны Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌ ΠΈΡ…, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для мСня это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ каТСтся Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ ΠΈ искусствСнным (хотя я прСкрасно понимаю ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ этого).

[1] Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Unix ΠΏΠΎΡ‡Ρ‚ΠΈ 20 Π»Π΅Ρ‚ ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ. И я ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π΅Ρ€ΠΏΠ»ΡŽ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Π΄Π°ΠΆΠ΅ со Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ, послС прочтСния инструкции.

Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² для стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

МоС рассуТдСниС состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ соглашСнию ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ…. Π― Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ спагСтти-Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°ΠΌΠΈ псСвдонимов Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

@iand : это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ использованиС этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для пСрСноса Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Context Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ Π΄ΠΎΠΌ Context Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ псСвдонимом для Context Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

@quentinmit , ΠΊ соТалСнию, это ΠΏΡ€Π°Π²Π΄Π°. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования golang.org/x/image/draw Π² этом CL https://go-review.googlesource.com/#/c/32145/

МСня большС всСго бСспокоит, Ρ‡Ρ‚ΠΎ люди ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ псСвдонимы Π²Ρ€ΠΎΠ΄Π΅ interface{} ΠΈ error

Если Π±ΡƒΠ΄Π΅Ρ‚ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ~ . Π’ английском языкС это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π°Β», Β«ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΒ», Β«ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΒ» ΠΈΠ»ΠΈ Β«ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΒ». Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅ Π² => - это асиммСтричный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ с Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ.

НапримСр:

const OldAPI ~ NewPackage.API
func  OldAPI ~ NewPackage.API
var   OldAPI ~ NewPackage.API
type  OldAPI ~ NewPackage.API

@i, ΠΈ Ссли ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ ΠΏΡ€Π°Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ для ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‚ΠΎ это ΠΈΠ·Π±Π°Π²ΠΈΡ‚ вас ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ озабочСнности.

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ псСвдонимов для Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ для Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ map[string]map[int]interface{} . Но Ρ‚Π°ΠΊΠΎΠ΅ использованиС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с основной Ρ†Π΅Π»ΡŒΡŽ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π΅ большая потСря.

@cznic , @iand , Π΄Ρ€ΡƒΠ³ΠΈΠ΅: ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ _restrictions Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ_. Они ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ объяснСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ для любого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ссли Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΠ± ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ, Π²Π°ΠΌ придСтся Π»ΠΎΠΌΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²Ρƒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ мнСнию, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Часто ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния Π½Π° ΠΏΡ€ΠΎΠ±Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·-Π·Π° гипотСтичСского Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡ€ΠΈ обсуТдСнии прСдлоТСния псСвдонима, ΠΈ ΠΈΠ·-Π·Π° этого псСвдонимы Π² ΠΏΡ€ΠΎΠ±Π½ΠΎΠΉ вСрсии Π½Π΅ смогли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ io.ByteBuffer => bytes.Buffer ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ. Частично Ρ†Π΅Π»ΡŒ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ случаи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ случайно Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈ ΠΈΡ….

Π’ качСствС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ Π±Π΅Π· указатСля ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для нСструктурных Ρ‚ΠΈΠΏΠΎΠ². Если Π±Ρ‹ ΠΌΡ‹ сдСлали ΠΎΠ΄Π½ΠΎ ΠΈΠ· этих дСйствий, Π²Ρ‹ Π½Π΅ смогли Π±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ пСрСчислСния с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ String () для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ самих сСбя, ΠΈ Ρƒ вас Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ http.Headers ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являясь простой ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈ прСдоставляя Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Часто Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС злоупотрСблСния; Для появлСния ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пространство для экспСримСнтов.

Π’ качСствС Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, исходный Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ рСализация для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² указатСля ΠΈ значСния Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π»ΠΈ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° T ΠΈ * T: Ссли Π±Ρ‹ Ρƒ вас Π±Ρ‹Π» * T, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ значСния (ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ T), ΠΈ Ссли Π±Ρ‹ Ρƒ вас Π±Ρ‹Π» a T, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ указатСля (ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ * T). Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ просто, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Но Π·Π°Ρ‚Π΅ΠΌ фактичСский ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π» Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² указатСля Π½Π° значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ классу ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… с Ρ‚ΠΎΠ»ΠΊΡƒ, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ошибок. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

var buf bytes.Buffer
io.Copy(buf, reader)

ΠΈ io.Copy Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ, Π½ΠΎ Π² buf Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Нам ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ объяснСниСм, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈΠ»ΠΈ объяснСниСм, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ. Π’ любом случаС вопросы Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚, Π½ΠΎ ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ исполнСния. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… вопросов ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² конструкции Π²Ρ‹Ρ€Π΅Π·Π°Π½ΠΎ отвСрстиС.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ограничСния Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ слоТности. Как ΠΈ всякая ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ограничСния Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ обосновании. На этом этапС процСсса проСктирования Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ограничСниях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ подходящими для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°, Π½ΠΎ ΠΌΡ‹, вСроятно, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ эти ограничСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ фактичСский ΠΎΠΏΡ‹Ρ‚ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ, Π±ΠΎΠ»Π΅Π΅ простым Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, принСсСт Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ. ΠΎΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, я надСюсь, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ смоТСм ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ для экспСримСнтов Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Go 1.9 (Π² ΠΈΠ΄Π΅Π°Π»Π΅ - Π² дСнь открытия Ρ†ΠΈΠΊΠ»Π°). Если Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для экспСримСнтов, это даст ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, Π² Ρ‚ΠΎΠΌ числС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Одна ошибка с псСвдонимом Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ полная рСализация Π½Π΅ Π±Ρ‹Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ†ΠΈΠΊΠ»Π° Go 1.8.

Одна Π²Π΅Ρ‰ΡŒ ΠΎΠ± исходном ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ псСвдонима Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ использования (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°) фактичСскоС использованиС Ρ‚ΠΈΠΏΠ° псСвдонима Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΡ€ΠΎΡ‚ΠΎΠ±ΡƒΡ„Π΅Ρ€ΠΎΠΌ Π·Π°Π³Π»ΡƒΡˆΠΊΠ° io.BytesBuffer Π±Ρ‹Π»Π° ΡƒΠ΄Π°Π»Π΅Π½Π° послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ постСпСнного восстановлСния.

Если ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ псСвдонима Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ смСны языка? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для прСдоставлСния gc со списком «псСвдонимов». gc ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ произвСсти Π·Π°ΠΌΠ΅Π½Ρ‹, Π° Π°Π²Ρ‚ΠΎΡ€ ниТСстоящСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ постСпСнно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты Π² этом Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ объСдинСния исправлСний. Π― понимаю, Ρ‡Ρ‚ΠΎ это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСпростыС послСдствия, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, поощряСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² обсуТдСнии синтаксиса (мСня Π² основном Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚), Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ: Ссли принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ псСвдонимов ΠΈ Ссли Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, поТалуйста, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄ΠΎ var , Ссли Π½Π΅ func ΠΈ const (всС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ синтаксичСскиС конструкции Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ всС, ΠΊΡ€ΠΎΠΌΠ΅ type Foo = pkg.Bar ). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, хотя я согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ случаи, ΠΊΠΎΠ³Π΄Π° псСвдонимы для var ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π΄ΠΊΠΈΠΌΠΈ, я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΈ поэтому ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Ρ‚ΠΎΠΆΠ΅. На этом этапС ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС объявлСния псСвдонимов Π±Ρ‹Π»ΠΈ согласованными, Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ это Π±Ρ‹Π»ΠΈ type Foo = pkg.Bar ΠΈ var Foo => pkg.Bar .

Π― Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ поспорил Π±Ρ‹ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹

1) сущСствуСт Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π² var ΠΈ я ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π΅Π³ΠΎ. НапримСр, я часто Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ var Debug *log.Logger ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°ΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ синглтоны, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ http.DefaultServeMux для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° / удалСния рСгистраций ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ.

2) Π― Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ, хотя func Foo() { pkg.Bar() } Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ func Foo => pkg.Bar , Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ послСднСго Π³ΠΎΡ€Π°Π·Π΄ΠΎ яснСС (особСнно Ссли Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ псСвдонимах). Π’ Π½Π΅ΠΌ ясно сказано, Ρ‡Ρ‚ΠΎ Β«Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ здСсь». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, хотя синтаксис псСвдонима тСхничСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ.

Но это Π½Π΅ Ρ‚ΠΎΡ‚ Ρ…ΠΎΠ»ΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я ΡƒΠΌΡ€Ρƒ; Одни Ρ‚ΠΎΠ»ΡŒΠΊΠΎ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² сСйчас мСня ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚, Ссли Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ·ΠΆΠ΅.

Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ написано Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ. Он суммируСт ΠΊΡƒΡ‡Ρƒ ΠΌΠ½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ мСня Π±Ρ‹Π»ΠΈ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ API Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ простым справочником, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ людСй Ρ‚ΠΎΠΆΠ΅ :)

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, я Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ псСвдонимами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (ΠΈ AIUI являСтся Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ постСпСнного восстановлСния). Π― ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄, Ссли сообщСство смоТСт ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ постСпСнного восстановлСния, Π½ΠΎ Ссли для Π΅Π³ΠΎ достиТСния Π±ΡƒΠ΄Π΅Ρ‚ принято Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ псСвдонимы, я Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π² этом случаС слСдуСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, слСдуСт Π»ΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ общСдоступный ΠΈΠΌΠΏΠΎΡ€Ρ‚ protobuf ΠΈΠ»ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² x/image/draw (ΠΎΠ±Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни Π±Π»ΠΈΠ·ΠΊΠΈ ΠΌΠΎΠ΅ΠΌΡƒ сСрдцу) с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @btracey ΠΎ Ρ„Π»Π°Π³Π΅ go-tool / gc для псСвдонимов являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ, хотя ΠΎΠ½ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ описываСт постСпСнноС восстановлСниС, ΠΎΠ½ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ x/image/draw для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ этих Ρ„Π»Π°Π³ΠΎΠ², просто Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ go get .

@jba

@i, ΠΈ Ссли ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ ΠΏΡ€Π°Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ для ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‚ΠΎ это ΠΈΠ·Π±Π°Π²ΠΈΡ‚ вас ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ озабочСнности.

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ псСвдонимов для Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ […]. Но Ρ‚Π°ΠΊΠΎΠ΅ использованиС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с основной Ρ†Π΅Π»ΡŒΡŽ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π΅ большая потСря.

ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π±ΠΎΠ»Π΅Π΅ идиоматичСскоС ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ имя), бСзусловно, являСтся Ρ‚ΠΈΠΏΠΎΠΌ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ провСсти, ΠΈ Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ постСпСнного исправлСния.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, Π±Ρ‹Π»ΠΎ Π±Ρ‹ ошибкой. (ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ экспортированными ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‚Π΅Ρ€ΠΏΠΈΠΌΡ‹ΠΌ.)

@btracey

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для прСдоставлСния gc списка «псСвдонимов». gc ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ произвСсти Π·Π°ΠΌΠ΅Π½Ρ‹, Π° Π°Π²Ρ‚ΠΎΡ€ ниТСстоящСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ постСпСнно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты Π² этом Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ объСдинСния исправлСний.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для gc Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gc Π²ΠΎ врСмя процСсса восстановлСния, Π»ΠΈΠ±ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ компиляторами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, gccgo ΠΈ llgo ) Ρ‚ΠΎΠΆΠ΅. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Β«Π±Π΅Π· смСны языка», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ всСми рСализациями, Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ являСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка - это всСго лишь ΠΎΠ΄ΠΈΠ½ с Ρ…ΡƒΠ΄ΡˆΠ΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ.

@btracey ΠΈ @bcmills , Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компиляторы: любой инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ guru ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, созданноС людьми. Π­Ρ‚ΠΎ, бСзусловно, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ языка, ΠΊΠ°ΠΊ Π±Ρ‹ Π²Ρ‹ это Π½ΠΈ Π½Π°Ρ€Π΅Π·Π°Π»ΠΈ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ спасибо.

Другая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ - это псСвдонимы для всСго, ΠΊΡ€ΠΎΠΌΠ΅ const (ΠΈ @rsc, проститС мСня Π·Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ограничСния!)

Для констант => - это просто Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ способ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ = . НСт Π½ΠΎΠ²ΠΎΠΉ сСмантики, ΠΊΠ°ΠΊ Π² случаС с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ Π²Π°Ρ€Π°ΠΌΠΈ. НСт сохранСнных Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш, ΠΊΠ°ΠΊ с функциями.

По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, это Ρ€Π΅ΡˆΠΈΠ»ΠΎ Π±Ρ‹ # 17784.

ΠšΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ инструмСнты ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π΅Π»Π° ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π½ΠΎ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π²Π΅ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ это Π΄Π²Π° основных способа ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, мСня ΠΏΠΎΠΊΠ° ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠ½ΠΈ, бСзусловно, самыС Π²Π°ΠΆΠ½Ρ‹Π΅. Π― ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ согласСн с @Merovius, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния псСвдонимов var ΠΈ func Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Π΄Π°ΠΆΠ΅ Ссли этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как насчСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ псСвдонимы Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ для Β«CΒ» ΠΈ «нСбСзопасно», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‰Π΅ большС ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ использованию? Π’ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π΄ΡƒΡ…Π΅ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ синтаксис псСвдонимов Π±Ρ‹Π» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ ΠΈ выдСлялся Π² качСствС основы для ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

Π’ качСствС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ пространство Π΄ΠΈΠ·Π°ΠΉΠ½Π°, Π²ΠΎΡ‚ нСсколько ΠΈΠ΄Π΅ΠΉ. Они Π½Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Они, вСроятно, ΠΏΠ»ΠΎΡ…ΠΈΠ΅ ΠΈ / ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅; Π½Π°Π΄Π΅ΠΆΠ΄Π° Π² основном состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½ΠΎΠ²Ρ‹Π΅ / Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ. И Ссли Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ интСрСс, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дальшС.

ΠœΠΎΡ‚ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ идСя для (1) ΠΈ (2) состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ вмСсто псСвдонимов. Π’ # 17746 псСвдонимы ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, связанными с Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠΌΠ΅Π½ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° (ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… способов написания ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎ псСвдонимах ΠΊΠ°ΠΊ ΠΎ #define ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎ ТСстких ссылках). ИспользованиС прСобразования ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ это, сохраняя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‰Π΅ автоматичСскоС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.

Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ fmt.Println("abc") ΠΈΠ»ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ var e interface{} = "abc" , "abc" автоматичСски прСобразуСтся Π² interface{} . ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ язык Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ объявили type T struct { S } , Π° T Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², компилятор Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ S ΠΈ T ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Π² Ρ‚ΠΎΠΌ числС рСкурсивно Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… структур. Π’ΠΎΠ³Π΄Π° T ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ фактичСским псСвдонимом S (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚) для Ρ†Π΅Π»Π΅ΠΉ постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ‚ΠΈΠΏΠ° "ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ".

ΠŸΡƒΡΡ‚ΡŒ type T ~S ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ T, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ "выглядит ΠΊΠ°ΠΊ S". Π’ΠΎΡ‡Π½Π΅Π΅, T - это Β«ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ любого Ρ‚ΠΈΠΏΠ° Π² Ρ‚ΠΈΠΏ S ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΒ». (Как всСгда, синтаксис ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.) Подобно интСрфСйсным Ρ‚ΠΈΠΏΠ°ΠΌ, T Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²; Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ с T, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² S (ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π² / ΠΈΠ· S). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² интСрфСйса, здСсь Π½Π΅Ρ‚ Β«ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°Β», ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ S Π² T ΠΈ T Π² S Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° собой ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ прСдставлСния. Для постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° эти Ρ‚ΠΈΠΏΡ‹ Β«ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎΒ» ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ API, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊ старыС, Ρ‚Π°ΠΊ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. (Π’ΠΈΠΏΡ‹ Β«ΠŸΠΎΡ…ΠΎΠΆΠ΅Β» - это, ΠΏΠΎ сути, строго ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ объСдинСния.)

  1. Π’Π΅Π³ΠΈ Ρ‚ΠΈΠΏΠ°

Бонус супСр-ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ идСя. (ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ это уТасно - я знаю это. Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΡ‚ΠΈΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ….) Π§Ρ‚ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ Ρ‚Π΅Π³ΠΈ Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, структурныС Ρ‚Π΅Π³ΠΈ) ΠΈ использовали ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ Ρ‚ΠΈΠΏΠΎΠ² для настройки ΠΈ управляйтС псСвдонимами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ type T S "alias:\"T\"" . Π’Π΅Π³ΠΈ Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈ это Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ псСвдонимы, Ρ‡Π΅ΠΌ просто «этот Ρ‚ΠΈΠΏ являСтся псСвдонимом»; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π²Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ встраивания.

Если ΠΌΡ‹ снова ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ псСвдонимы, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, стоит ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Β«Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ godocΒ», Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ вопросам Β«Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΉΠΎΡ‚Π°Β» ΠΈ Β«Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ встраиваниС».

Π’ частности, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ

type  OldAPI => NewPackage.API

ΠΈ NewPackage.API ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, оТидаСтся Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ скопируСм / вставим этот ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ рядом с Β«type OldAPIΒ», Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² (ΠΏΡ€ΠΈ этом godoc автоматичСски прСдоставит ссылку ΠΈΠ»ΠΈ автоматичСски скопируСт / вставит), ΠΈΠ»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ соглашСниС?

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни косвСнно, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ основной ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ являСтся ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, второстСпСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ псСвдонима, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅) ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ прСдставлСнии ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. поддСрТиваСтся нСсколькими рСализациями, зависящими ΠΎΡ‚ Ρ‚Π΅Π³ΠΎΠ² сборки. БСйчас я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°ΡˆΡƒ Ρ€ΡƒΠΊΠΎΠΉ, Π½ΠΎ ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ псСвдонимы ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² Π½Π΅Π΄Π°Π²Π½Π΅ΠΌ https://groups.google.com/d/topic/golang-nuts/wb5I2tjrwoc/discussion "Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… с рСализациями go + asm Β».

@nigeltao re godoc, я Π΄ΡƒΠΌΠ°ΡŽ:

Π’ любом случаС ΠΎΠ½ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π».

Если Π² псСвдонимС Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² любом случаС.

Если Π² псСвдонимС Π½Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ godoc ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π» исходныС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π½ΠΎ имя Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, Ссли псСвдоним Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ имя, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° элСмСнты, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, ΠΈ, Ссли ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΏΡ€ΠΈ просмотрС X ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ сообщСниС «УстарСло: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ XΒ».

Однако, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° случаСв использования. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ, Π° Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ Ρ‚Π°ΠΊ. И Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ псСвдонимы ΠΈ случайноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΠ± устарСвании.

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π°ΡΡŒ Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ идСя Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ ΠΊΠ°ΠΊ насчСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, основанного Π½Π° инструмСнтах "gofix" / "gorename"? Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ:

  • любой ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» пСрСзаписи (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ pkg.Ident => otherpkg.Ident )
  • эти ΠΏΡ€Π°Π²ΠΈΠ»Π° пСрСзаписи ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³ΠΎΠ² //+rewrite ... Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² go
  • эти ΠΏΡ€Π°Π²ΠΈΠ»Π° пСрСзаписи Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ измСнСниями, совмСстимыми с ABI, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pkg.MyFunc(a) => pkg.MyFunc(context.Contex(), a) )
  • инструмСнт, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ gofix, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для примСнСния всСх ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ свой ΠΊΠΎΠ΄.
  • Π½Π΅Ρ‚ нСобходимости Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ инструмСнт gofix для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая всС Π΅Ρ‰Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старый API зависимости X (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ совмСстимой со старой ΠΈ Π½ΠΎΠ²ΠΎΠΉ вСрсиями X), всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ это Π΄Π΅Π»Π°Ρ‚ΡŒ. Команда go build Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ прСобразования (ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅Π³Π°Ρ… пСрСзаписи ΠΏΠ°ΠΊΠ΅Ρ‚Π° X) Π½Π° Π»Π΅Ρ‚Ρƒ Π±Π΅Π· измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° дискС.

ПослСдниС шаги ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ / Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ компилятор, Π½ΠΎ Π² основном это всСго лишь прСпроцСссор, ΠΈ количСство ΠΏΡ€Π°Π²ΠΈΠ» пСрСзаписи Π² любом случаС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ нСбольшим. Π˜Ρ‚Π°ΠΊ, Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΌΠΎΠ·Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡˆΡ‚ΡƒΡ€ΠΌΠ° Π½Π° сСгодня :)

ИспользованиС псСвдонимов для избСТания Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ каТСтся ΡƒΠ»ΠΎΠ²ΠΊΠΎΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ компилятора Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ нСлистовыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ нСдостатки Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ языка.

@josharian Π₯отя Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½Ρ‹Π΅ прСдлоТСния, ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅

  1. На самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² конвСрсии. x/net/context.Context присваиваСтся / конвСртируСтся / ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно context.Context . ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΈΠΏΠ°Ρ… Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка; Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏΡ‹ func (ctx x/net/context.Context) ΠΈ func (ctx context.Context) Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Π΄Π°ΠΆΠ΅ Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π˜Ρ‚Π°ΠΊ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ 1 type T struct { S } Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ T ΠΈ S ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ синтаксис для псСвдонимов (просто этот синтаксис ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅).

  2. Π‘Π½ΠΎΠ²Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ высокого порядка, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹Π΅ / ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ прСдставлСниС Π² памяти (ΠΈ Ссли ΠΎΠ½ΠΈ это ΡΠ΄Π΅Π»Π°ΡŽΡ‚, интСрпрСтация ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ). НапримСр, uint8 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² uint64 ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Но это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с type T ~uint8 компилятор Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ func(T) ; Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² стСк 1, 2,4 ΠΈΠ»ΠΈ 8 Π±Π°ΠΉΡ‚ΠΎΠ²? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΡ‚ΡŒ способы ΠΎΠ±ΠΎΠΉΡ‚ΠΈ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ для мСня это Π·Π²ΡƒΡ‡ΠΈΡ‚ довольно слоТно (ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ для понимания, Ρ‡Π΅ΠΌ псСвдонимы).

Бпасибо, @Merovius.

  1. Π”Π°, ΠΌΠ½Π΅ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ здСсь ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΡ ΠΎΡ‚ интСрфСйса. Π’Ρ‹ ΠΏΡ€Π°Π²Ρ‹, это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

  2. Π― ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρƒ Β«ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ прСдставлСниС Π² памяти». ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π²ΠΏΠ΅Ρ€Π΅Π΄-Π½Π°Π·Π°Π΄ явно Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ объяснСниС этого - спасибо.

@uluyol Π΄Π°, Π² основном это Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ нСлистовыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ явноС Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ встроСнныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ нСлистовых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² трассировках стСка, runtime.Callers ΠΈ Ρ‚. Π΄.

Π’ любом случаС, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ сказал, это второстСпСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

@josharian Аналогичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: [2]uintptr ΠΈ interface{} ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ прСдставлСниС Π² памяти; поэтому использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдставлСния Π² памяти ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ². uint64 ΠΈ float64 Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ прСдставлСниС памяти ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π°Π·Π°Π΄ ΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΡ‡Π΅Π½ΡŒ странным Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ , Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ.

Однако Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ сойти с Ρ€ΡƒΠΊ Β«Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏΒ». НС ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ для этого послСдствия. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам, Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² полях. Если Ρƒ вас Π΅ΡΡ‚ΡŒ type S1 struct { T1 } ΠΈ type S2 struct { T2 } (с T1 ΠΈ T2 ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°), Ρ‚ΠΎ ΠΏΡ€ΠΈ type L1 ~T1 ΠΎΠ±Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ type S struct { L1 } , Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ T1 ΠΈ T2 ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ (хотя ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ) Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, с type L2 ~S1 вас Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ S2 ΠΏΠΎΡ…ΠΎΠΆ Π½Π° S1 ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ L2 .

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π°ΠΌ придСтся Π²ΠΎ мноТСствС мСст Π² спСцификации Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Β«ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹Β» Π½Π° Β«Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эту Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‡Ρ‚ΠΎ каТСтся Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΈ, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹Π΅ послСдствия для бСзопасности Ρ‚ΠΈΠΏΠΎΠ². ИМΠ₯О, Ρƒ "ΠΏΠΎΡ…ΠΎΠΆΠΈΡ…" Ρ‚ΠΈΠΏΠΎΠ² Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ больший ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, Ρ‡Π΅ΠΌ Ρƒ псСвдонимов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² псСвдонимов.

Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ для этого простоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ :)

БлСдуя идСям @josharian , Π²ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° 2:

Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ «замСняСмых Ρ‚ΠΈΠΏΠΎΠ²Β». Π­Ρ‚ΠΎ список Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… значСниях ΠΈ Ρ‚. Π”. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ любой ΠΈΠ· Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½. Π—Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, совмСстимоС с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ здСсь ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ прСдставлСния Π² памяти ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ объявлСния послС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² объявлСниС Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

Одна нСпосрСдствСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ этой связи ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ псСвдонима, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Ρ€Π°Ρ„ зависимостСй. Одно это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ нСработоспособным, Π½ΠΎ я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π΅Π³ΠΎ здСсь, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ способ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это. Одним ΠΈΠ· способов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСниС Π·Π°ΠΌΠ΅Π½ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² // go, Π° Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· Π³Ρ€Π°Ρ„ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ½ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, станут большС ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° макросы.

И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρƒ этого измСнСния направлСнности Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства:

  • Π½Π°Π±ΠΎΡ€ замСняСмых Ρ‚ΠΈΠΏΠΎΠ² контролируСтся Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСмантику
  • Π² исходном ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π½Π΅ трСбуСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π°, поэтому ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого ΠΊ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ контСкста: ΠΏΠ°ΠΊΠ΅Ρ‚ контСкста стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ context.Context ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° golang.org/x/net/context.Context . Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ любоС использованиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ контСкст. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ вмСсто Π½Π΅Π³ΠΎ golang.org/x/net/context.Context . Однако Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ контСкста, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Context, всСгда Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ context.Context .

Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ позволяСт ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ внСдрСния (# 17746), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ имя встроСнного Ρ‚ΠΈΠΏΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ мСняСтся. Однако встроСнный Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

@iand @josharian Π²Ρ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

@josharian , спасибо Π·Π° прСдлоТСния.

Re type T struct { S } , это выглядит ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ синтаксис для псСвдонима, ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ.

Re type T ~S , я Π»ΠΈΠ±ΠΎ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Π΅ΠΌ ΠΎΠ½ отличаСтся ΠΎΡ‚ псСвдонима, Π»ΠΈΠ±ΠΎ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ (скаТСм, io.ByteBuffer -> bytes.Buffer) Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

package io
type ByteBuffer ~bytes.Buffer

Π½ΠΎ Ссли, ΠΊΠ°ΠΊ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, «для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с T, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² SΒ», Ρ‚ΠΎΠ³Π΄Π° вСсь ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ с io.ByteBuffer, всС Ρ€Π°Π²Π½ΠΎ ломаСтся.

Re type T S "alias" : ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ @bcmills, сдСланный Π²Ρ‹ΡˆΠ΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… эквивалСнтных ΠΈΠΌΠ΅Π½ для Ρ‚ΠΈΠΏΠΎΠ² - это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ языка, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ. ВсС компиляторы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ, скаТСм, io.ByteBuffer ΠΈ bytes.Buffer - это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Ρ‚ΠΈΠΏ ΠΊΠΎΠ΄Π°. ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ вашСго прСдлоТСния каТСтся ΠΌΠ½Π΅ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Β«ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΌ слСдуСт Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дополнСния». Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ нСясно, Ρ‡Ρ‚ΠΎ строка Π±Ρ‹Π»Π° Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠΈΠΌ способом ΠΈΡ… описания, ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ нСясно, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ синтаксис (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Java) Π±Π΅Π· явной нСобходимости. Π”Π°ΠΆΠ΅ Ссли Π±Ρ‹ Ρƒ нас Π±Ρ‹Π»Π° общая Ρ„ΠΎΡ€ΠΌΠ°, Π½Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС послСдствия любой Π½ΠΎΠ²ΠΎΠΉ сСмантики, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… всС Ρ€Π°Π²Π½ΠΎ Π±Ρ‹Π»ΠΈ Π±Ρ‹ измСнСниями языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈ Π±Ρ‹ обновлСния всСх инструмСнтов (ΠΊΡ€ΠΎΠΌΠ΅ gofmt, ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΡŽ). Π’ Ρ†Π΅Π»ΠΎΠΌ каТСтся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ поиск Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ способа написания Π½ΡƒΠΆΠ½Ρ‹Ρ… Π½Π°ΠΌ Ρ„ΠΎΡ€ΠΌ ΠΎΠ΄Π½Ρƒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ вмСсто создания Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ мСтаязыка.

@Merovius FWIW, я Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ [2] uintptr ΠΈ interface {} Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ прСдставлСния памяти. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ {} - это [2] unsafe.Pointer, Π° Π½Π΅ [2] uintptr. Uintptr ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ - это Ρ€Π°Π·Π½Ρ‹Π΅ прСдставлСния. Но я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ваша общая Ρ‚ΠΎΡ‡ΠΊΠ° зрСния Π²Π΅Ρ€Π½Π°, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прямоС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π²Π΅Ρ‰Π΅ΠΉ. Π― имСю Π² Π²ΠΈΠ΄Ρƒ, Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· интСрфСйса {} Π² [2] * Π±Π°ΠΉΡ‚? Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

@jimmyfrasche ΠΈ @nigeltao , re godoc: Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ это ΠΏΠΎΡ€Π°Π½ΡŒΡˆΠ΅. Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ «новая функция - ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ ΠΎΠ½Π° Π½ΠΈ Π±Ρ‹Π»Π° - Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹Β». Π£ Π½Π΅Π³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ примСнСния, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, НайдТСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нашСл для ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π² написании ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ отрисовки с псСвдонимами. Π― оТидаю, Ρ‡Ρ‚ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π²Π΅Ρ‰ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ явно ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π² ΠΈΡ… коммСнтариях ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ сказал Π”ΠΆΠΈΠΌΠΌΠΈ. Π― Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΡƒΠΌΠ°Π» ΠΎΠ± автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ коммСнтария ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚, Π½ΠΎ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ясно ΠΈΠ· синтаксиса (говоря Π² Ρ†Π΅Π»ΠΎΠΌ). Π’ качСствС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим старыС псСвдонимы Go 1.8. Π”Π°Π½Π½Ρ‹ΠΉ

type ByteBuffer => bytes.Buffer

ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΈΠ½Ρ‚Π΅Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ говорится, Ρ‡Ρ‚ΠΎ Β«ByteBuffer - это псСвдоним для bytes.BufferΒ», Π½ΠΎ это каТСтся излишним ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ опрСдСлСния. Если сСгодня ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ Β«type X struct {}Β», ΠΌΡ‹ Π½Π΅ синтСзируСм Β«X - ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для struct {}Β».

@iand , спасибо. ΠŸΠΎΡ…ΠΎΠΆΠ΅, вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π²Ρ‚ΠΎΡ€ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° написал Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· старого ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ объявлСниС, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π΄Π²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (составляя синтаксис):

package old
type T { x int }

package new
import "old"
type T1 { x int }
substitutable T1 <- old.T

Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ рСвСрсированиС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ само ΠΏΠΎ сСбС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ прСпятствиСм, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ пропустим это. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ кодовая Π±Π°Π·Π° каТСтся Ρ…Ρ€ΡƒΠΏΠΊΠΎΠΉ: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ ΠΏΡƒΡ‚Π΅ΠΌ добавлСния поля структуры Π² старый ΠΏΠ°ΠΊΠ΅Ρ‚. Учитывая Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ строку, Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для T1: Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ old.T. Если Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ опрСдСлСния, Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…: Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ? Если Π½Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ помСститС T Π² интСрфСйс {}, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΊ T1, ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ M ()? Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ T1.M? Π§Ρ‚ΠΎ, Ссли Π²Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΊΠ°ΠΊ интСрфСйс {M ()}, Π½Π΅ называя Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ T1, ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ M ()? Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ВМ? Много слоТностСй Π²Ρ‹Π·Π²Π°Π½ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ наличия ΠΎΠ±ΠΎΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π² Π΄Π΅Ρ€Π΅Π²Π΅ исходных тСкстов.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ замСняСмая строка Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ опрСдСлСния Ρ‚ΠΈΠΏΠ° T1 ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Но Ρ‚ΠΎΠ³Π΄Π° это Π² основном Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ (Π² старом синтаксисС псСвдонима) type T1 => old.T .

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, хотя всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ сдСлали старый ΠΊΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ссли Π³Ρ€Π°Ρ„ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±Ρ‹Π» Ρ‚Π°ΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ старый вмСсто этого, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ эффСктивно ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°.

Π― Π΄ΡƒΠΌΠ°ΡŽ, это ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² любом ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅, вСроятно, Π½Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ старого ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Ρ†Π΅Π»ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· старого, поэтому Π² этом случаС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ задСйствованы ΠΎΠ±Π° Π°Π²Ρ‚ΠΎΡ€Π° (Ссли ΠΎΠ½ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅). И этим Π΄Π²ΡƒΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½Π° какая-Ρ‚ΠΎ скоординированная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π² сСрСдинС, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ явная (своСго Ρ€ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ нСявная (опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π² Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΈ замСняСмости).

@rsc этот сцСнарий ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ псСвдонимы любого Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ. Π”Π°ΠΆΠ΅ Π² соотвСтствии с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ псСвдонима любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ любого количСства ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ псСвдоним Ρ‚ΠΈΠΏΠ°.

@iand Если Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Β«Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ _that_ oneΒ»), Ρ‚ΠΎ Π½Π΅ стоит Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ синхронизированы.

Π’ # 13467 @joegrasse ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ прСдоставило ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ C ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Go ΠΏΡ€ΠΈ использовании cgo Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…. Π­Ρ‚ΠΎ совсСм Π½Π΅ Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½ΠΎ ΠΎΠ±Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ связаны с псСвдонимом Ρ‚ΠΈΠΏΠΎΠ².

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… / принятых / ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ / ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° псСвдонимы? На ΡƒΠΌ приходят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

  • ВсСгда Π»ΠΈ RHS ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½?
  • Если псСвдонимы для псСвдонимов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ псСвдонимов?
  • Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ псСвдонимы ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСэкспортированныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹?
  • Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ вставляСтС псСвдоним? (ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ встроСнному полю)
  • Доступны Π»ΠΈ псСвдонимы Π² Π²ΠΈΠ΄Π΅ символов Π²ΠΎ встроСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅?
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ строки ldflags: Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ обратимся ΠΊ псСвдониму?

@rsc Π― Π½Π΅ Ρ…ΠΎΡ‡Ρƒ слишком ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€, Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ псСвдонима, Ссли Β«Π½ΠΎΠ²Ρ‹ΠΉΒ» удаляСт ΠΏΠΎΠ»Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ «старый» полагался, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ «старого» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Однако Π² Ρ€Π°ΠΌΠΊΠ°Ρ… прСдлоТСния ΠΎ Π·Π°ΠΌΠ΅Π½Π΅, я Π΄ΡƒΠΌΠ°ΡŽ, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈ старыС, ΠΈ Π½ΠΎΠ²Ρ‹Π΅ вмСстС, ΡΠ»ΠΎΠΌΠ°ΡŽΡ‚ΡΡ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π·Π°ΠΌΠ΅Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° компилятор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ использованиС «старых» Ρ‚ΠΈΠΏΠΎΠ² Π² Β«Π½ΠΎΠ²ΠΎΠΌΒ» ΠΏΠ°ΠΊΠ΅Ρ‚Π΅.

@thwd Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ рСцСнзия. Мои Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ:

  • Π¦ΠΈΠΊΠ»Ρ‹ псСвдонимов Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π’ случаС псСвдонимов, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ†ΠΈΠΊΠ» ΡƒΠΆΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ ΠΈΠ·-Π·Π° Ρ†ΠΈΠΊΠ»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π’ случаС псСвдонимов Π±Π΅Π· пСрСсСчСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΡ…, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ†ΠΈΠΊΠ»Ρ‹ Π² порядкС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π›ΠΈΡ‡Π½ΠΎ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ псСвдонимы для псСвдонимов, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ использования постСпСнного восстановлСния (см. Мой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π²Ρ‹ΡˆΠ΅), ΠΈ Π±Ρ‹Π»ΠΎ Π±Ρ‹ грустно, Ссли Π±Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ A ΠΌΠΎΠ³ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ пСрСмСстил Ρ‚ΠΈΠΏ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ B с псСвдонимом (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ x/image/draw.Image псСвдоним draw.Image Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ draw.Image Π² image.Draw Ρ‡Π΅Ρ€Π΅Π· псСвдоним, считая Π΅Π³ΠΎ бСзопасным. Π’Π½Π΅Π·Π°ΠΏΠ½ΠΎ x/image/draw ломаСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ псСвдонимы для псСвдонимов нСдопустимы).
  • Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ сторонники псСвдонимов соглашались с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ экспорт псСвдонимов нСэкспортированных ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², вСроятно, являСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ ΠΈΠ·-Π·Π° странностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. ЀактичСски это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ псСвдонимы для нСэкспортированных ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² бСсполСзны ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.
  • Вопрос ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ, AFAIK, ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½. Π’ # 17746 Π΅ΡΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ обсуТдСниС, я оТидаю, Ρ‡Ρ‚ΠΎ это обсуТдСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ, Ссли / ΠΊΠΎΠ³Π΄Π° / Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с псСвдонимами (Π½ΠΎ всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ постСпСнный Ρ€Π΅ΠΌΠΎΠ½Ρ‚ Ρ†Π΅Π»ΡŒΡŽ Π²ΠΎΠΎΠ±Ρ‰Π΅)

@iand , re "

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ, ΠΎ Ρ‡Π΅ΠΌ я Π΅Ρ‰Π΅ Π½Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ явной Ρ†Π΅Π»ΡŒΡŽ здСсь являСтся обСспСчСниС ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠ³ΠΎ постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π±Π°Π·Π°Ρ… ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° Π²Π»Π°Π΄Π΅Π»Π΅Ρ† Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ очистку, которая ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСизвСстного количСства ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² для измСнСния своСго ΠΊΠΎΠ΄Π° (Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ " ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ старый "шаг API"). ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это - Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ± устарСвании, Π½ΠΎ компилятор Go Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Π‘Π΅Π· прСдупрСТдСния компилятора, ΠΊΠ°ΠΊ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½ Π² бСзопасности выполнСния Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°?

Одним ΠΈΠ· ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ какая-Ρ‚ΠΎ схСма управлСния вСрсиями - это Π½ΠΎΠ²Ρ‹ΠΉ выпуск Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Π½ΠΎΠ²Ρ‹ΠΌ нСсовмСстимым API. Π’ этом случаС, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вСсь ΠΎΡ‚Π²Π΅Ρ‚ - это ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСрсиями, Π° Π½Π΅ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ².

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, ΠΊΠ°ΠΊ насчСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Β«ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ± устарСвании», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ фактичСски Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΎ с явным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ? Π― ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ сСбС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

Error: os.time is obsolete, use time.time instead. Run "go upgrade" to fix this.

Для псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π±ΡƒΠ΄Π΅Ρ‚ просто Β«Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС экзСмпляры OldType Π½Π° NewTypeΒ», Π½ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ здСсь ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ тонкости.

Π’ любом случаС, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ Π°Π²Ρ‚ΠΎΡ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΊΠΎΠ΄ Π²ΠΎΡ‚-Π²ΠΎΡ‚ сломаСтся, ΠΈ Π΄Π°Ρ‚ΡŒ ΠΈΠΌ простой способ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ старый API.

@iainmerrick Для Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ошибки: golang / lint # 238 ΠΈ golang / gddo # 456.

РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ описано Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ @rsc , сводится ΠΊ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ взаимозамСняСмости Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ констант).

Для этого Π½ΡƒΠΆΠ΅Π½ инструмСнт ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ языка.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ созданиС взаимозамСняСмых Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ мСняСт способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ языка, любой инструмСнт ΠΌΠΎΠ³ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ эквивалСнтности Π²Π½Π΅ компилятора, вСроятно, ΠΏΡƒΡ‚Π΅ΠΌ пСрСзаписи всСх экзСмпляров старого Ρ‚ΠΈΠΏΠ° Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Но это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ инструмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поставляСмый ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ golang.org/x/net/context вмСсто ΠΏΠ°ΠΊΠ΅Ρ‚Π° контСкста stdlib. БпСцификация измСнСния Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ манифСста, Π»ΠΈΠ±ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Если Π²Ρ‹ Π½Π΅ запуститС инструмСнт, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ошибки сборки. Π‘ΠΎ всСм этим становится слоТно ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ инструмСнт ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, сколько ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ придСтся ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, хотя ΠΈ нСсколько приятнСС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‡Π°ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°.

Если язык ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌΠΈ, ΠΈ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй всС просто Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹, Π½ΠΎ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ источником являСтся спСцификация, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Как ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ» @griesemer (я Π½Π΅ помню, Π³Π΄Π΅ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ обсуТдСний ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ) Go ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ псСвдонимы для Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ byte ↔ uint8 , ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π²Π°ΠΆΠ΄Ρ‹, с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ исходный Ρ„Π°ΠΉΠ».

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ способа явного псСвдонима Ρ‚ΠΈΠΏΠΎΠ² Π² языкС просто позволяСт Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ сСмантику. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ управляСмым способом.

Π‘ΠΌΠ΅Π½Π° языка ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ являСтся ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ, ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

Насколько ΠΌΠ½Π΅ извСстно, ΠΎΠ΄Π½ΠΈΠΌ «слоном Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅Β» являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ для псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡ… Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ допускаСт Π½Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (Ρ‚. Π•. «НСрСфакторинговыС») использования. Π― Π²ΠΈΠ΄Π΅Π» Ρ‚Π΅, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ ΠΌΠΈΠΌΠΎΡ…ΠΎΠ΄ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ экспорт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ для упрощСния APIΒ»). БлСдуя Π΄ΠΎΠ±Ρ€ΠΎΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, пСрСчислитС всС извСстныС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «ВоздСйствиС» . Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΡŽ вообраТСния людСй для изобрСтСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… способов использования ΠΈ ΠΈΡ… освСщСния Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ обсуТдСнии. Π’ настоящСС врСмя ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ освСдомлСны ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… использования псСвдонимов Ρ‚ΠΈΠΏΠΎΠ². Π’Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ касаСтся рСэкспорта, Rust / OCaml ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Π½ΠΈΡ….

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ вопрос: пояснитС, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π»ΠΈ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊ Ρ‚ΠΈΠΏΡƒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ) ΠΈΠ»ΠΈ Π½Π΅Ρ‚? ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ полям старых структур ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ вопрос: пояснитС, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π»ΠΈ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊ Ρ‚ΠΈΠΏΡƒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°Ρ€ΡƒΡˆΠ°Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ) ΠΈΠ»ΠΈ Π½Π΅Ρ‚? ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ полям старых структур ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

ПсСвдоним - это просто Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ Π½Π΅ мСняСт ΠΏΠ°ΠΊΠ΅Ρ‚ Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½Π° ΠΎΠ±Π° Π²Π°ΡˆΠΈΡ… вопроса (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ == старый ΠΏΠ°ΠΊΠ΅Ρ‚).

@akavel На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅Ρ‚. Но ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎ Π΄Π²ΡƒΡ… интСрСсных возмоТностях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π²ΠΎ врСмя испытаний псСвдонима Go 1.8.

  1. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ (ΠΈΠ»ΠΈ просто псСвдонимы Ρ‚ΠΈΠΏΠΎΠ²) позволят ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ замСняСмыС Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. НапримСр, см. Https://go-review.googlesource.com/#/c/32145/ , особСнно объяснСниС Π² сообщСнии фиксации.

  2. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ (ΠΈΠ»ΠΈ просто псСвдонимы Ρ‚ΠΈΠΏΠΎΠ²) ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ с нСбольшой ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒΡŽ API, Π½ΠΎ с большой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры, Π½ΠΎ всС ΠΆΠ΅ прСдставляли Π±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΠΊΠ΅Ρ‚ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈ использования ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. На https://github.com/golang/go/issues/16339#issuecomment -232813695 описан нСсколько абстрактный ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Основная Ρ†Π΅Π»ΡŒ псСвдонимов Π²Π΅Π»ΠΈΠΊΠ°, Π½ΠΎ всС ΠΆΠ΅ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ совсСм чСстны с Ρ†Π΅Π»ΡŒΡŽ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π°, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это являСтся ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠ΄ΠΈΠ½ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НСкоторыС ΠΈΠ· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ имя, ΠΈ я Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π» упоминания ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ свою ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°ΠΌΠΈ. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ os.Error => error часто ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΡ‹ΠΉ Π²ΠΎΠΊΡ€ΡƒΠ³ псСвдонимов, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ os.Error ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ String Π° Π½Π΅ Error . Если Π±Ρ‹ ΠΌΡ‹ просто пСрСмСстили Ρ‚ΠΈΠΏ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ, вСсь ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок всС Ρ€Π°Π²Π½ΠΎ Π±Ρ‹Π» Π±Ρ‹ сломан. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ мСсто Π²ΠΎ врСмя Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ... старыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ, ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, ΠΈ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это сохранит Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

Π’ интСрСсах ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΎΡ‚ Π²Π°ΠΌ исходная идСя: Ρ‡Ρ‚ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ посмотрСли Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ², Π° Π½Π΅ псСвдонимов? АдаптСр Π΄Π°Π» Π±Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ имя _ΠΈ интСрфСйс_, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· ΡƒΠΊΡ€Π°ΡˆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π΅Ρ… мСстах, Π³Π΄Π΅ исходный Ρ‚ΠΈΠΏ Π±Ρ‹Π» Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ Ρ€Π°Π½Π΅Π΅. АдаптСру потрСбуСтся явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π° Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ интСрфСйса Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ type foo bar , Π½ΠΎ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сСмантикой.

io.ByteBuffer

НапримСр, Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ скСлСта, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊ ΡΠ»ΡƒΡ‡Π°ΡŽ io.ByteBuffer , с Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом "adapts" Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚:

type ByteBuffer adapts bytes.Buffer

func (old *ByteBuffer) Write(b []byte) (n int, err error) {
        buf := (*bytes.Buffer)(old)
        return buf.Write(b)
}

(... etc ...)

Π˜Ρ‚Π°ΠΊ, с этим Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ вСсь этот ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ дСйствитСлСн:

func newfunc(b *bytes.Buffer) { ... }
func oldfunc(b *io.ByteBuffer) { ... }

func main() {
        var newvar bytes.Buffer
        var oldvar io.BytesBuffer

        // New code using the new type obviously just works.
        newfunc(&newvar)

        // New code using the old type receive the underlying value that was adapted.
        newfunc(&oldvar)

        // Old code using the old type receive the adapted value unchanged.
        oldfunc(&oldvar)

        // Old code gets new variable adapted on the way in. 
        oldfunc(&newvar)
}

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ newfunc ΠΈ oldfunc совмСстимы. Оба фактичСски ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ *bytes.Buffer , Π° oldfunc Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΡŽΡ‚ Π΅Π³ΠΎ ΠΊ *io.BytesBuffer ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ. Π’Π° ΠΆΠ΅ концСпция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Π·Π°Π΄Π°Π½ΠΈΠΉ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ Ρ‚. Π”.

os.Error

Π’Π° ΠΆΠ΅ самая Π»ΠΎΠ³ΠΈΠΊΠ°, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с интСрфСйсом, хотя Π΅Π΅ рСализация компилятором Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для os.Error => error , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ пСрСимСнования ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

package os

type Error adapts error

func (e Error) String() string { return error(e).Error() }

Однако этот случай Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ дальнСйшСго Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ:

func (v *T) Read(b []byte) (int, os.Error) { ... }`

Π‘ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ String , поэтому ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ постСпСнно ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

_ ΠžΠ‘ΠΠžΠ’Π›Π•ΠΠž: Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ дальнСйшСго обдумывания.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° встраивания

Π§Ρ‚ΠΎ касаСтся ошибки встраивания, которая Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΠ»Π° эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· 1.8, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ясСн с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ просто Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅: Ссли Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ встроСн, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ имя поля совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€, поэтому старая Π»ΠΎΠ³ΠΈΠΊΠ° остаСтся работоспособной, ΠΈ для доступа ΠΊ полю Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ интСрфСйс Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°, Ссли ΠΎΠ½ явно Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² контСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Если внСдряСтся Π½Π΅Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, происходит ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ.

кубСрнСтСс, Π΄ΠΎΠΊΠ΅Ρ€

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² сообщСнии, каТутся вариациями Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π²Π°Ρ€Ρ‹, константы

НСт смысла Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ константы ΠΏΠΎΠ΄ этот сцСнарий, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Π½ΠΈΠΌΠΈ. ΠΠ΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π±Ρ‹ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Π“ΠΎΠ΄ΠΎΠΊ

ΠœΡ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ это Π°Π΄Π°ΠΏΡ‚Π΅Ρ€, ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ Π½Π΅ΠΌΡƒ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ содСрТит интСрфСйс, нСзависимый ΠΎΡ‚ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ.

синтаксис

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ приятноС. ;)

@iainmerrick @zombiezen

Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ автоматичСски Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ псСвдонимный Ρ‚ΠΈΠΏ являСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ? Если ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ Π² дСйствиС golint, godoc ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ инструмСнты для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ старого Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ, это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ псСвдонимом Ρ‚ΠΈΠΏΠΎΠ². И послСдняя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, связанная со Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ псСвдонима, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½Π°.

Π”Π²Π° наблюдСния:

1. Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ссылок Π½Π° Ρ‚ΠΈΠΏΡ‹ зависит ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Густаво ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ большС ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования для ссылок Π½Π° Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ сСмантикой.

НовоС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Росс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис type OldAPI = newpkg.newAPI . Но ΠΊΠ°ΠΊΠΎΠ²Π° сСмантика? НСвозмоТно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ OldAPI с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… общСдоступных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ΠΉ? ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°, ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ newAPI ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» всС общСдоступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля OldAPI для обСспСчСния совмСстимости. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ любой ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ с OldAPI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ полагаСтся Π½Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ пСрСписан, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ общСдоступный newAPI, прСдполагая, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ видимости ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π²Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ - Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для OldAPI. Π­Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ брСмя NewAPI ΠΏΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ всСх общСдоступных старых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Но это сдСлало Π±Ρ‹ OldAPI Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ‡Π΅ΠΌ NewAPI. НСкоторая Ρ„ΠΎΡ€ΠΌΠ° присваивания ΠΌΠ΅ΠΆΠ΄Ρƒ значСниями Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ сохранСна, Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ слоТными. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ добавлСния ΠΏΠΎΠ»Π΅ΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ большСй слоТности.

2. ΠŸΠ°ΠΊΠ΅Ρ‚ с NewAPI Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ с OldAPI.

Для пСрСопрСдСлСния OldAPI трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ O, содСрТащий ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ OldAPI, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» ΠΏΠ°ΠΊΠ΅Ρ‚ N с NewAPI. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ N Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ O. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ± этом Π½Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Π½ΠΎ ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ это Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ для Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

ОбновлСниС: ΠΏΠ°ΠΊΠ΅Ρ‚ N Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° O. НапримСр, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ O.

@niemeyer ИзмСнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΡƒΠΆΠ΅ постСпСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹: Π°) Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ старый ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚), Π±) постСпСнно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²) ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ старый ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это с псСвдонимом Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это сосрСдоточСно Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ², Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ВсС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ измСнСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ нСсколько шагов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π΅Π· Π΅Π³ΠΎ пСрСимСнования). Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ исправлСниС с мСньшСй ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒΡŽ повСрхности (мСньшС Π²Π΅Ρ‰Π΅ΠΉ для понимания).

@rakyll Π›ΠΈΡ‡Π½ΠΎ, Ссли Π±Ρ‹ я считал псСвдонимы ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²ΠΎΠ³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²-ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования), я Π±Ρ‹ просто использовал ΠΈΡ…, ΠΊ Ρ‡Π΅Ρ€Ρ‚Ρƒ прСдупрСТдСния ΠΎΠ± устарСвании. Π― Π±Ρ‹Π» Π±Ρ‹ Π·ΠΎΠ» Π½Π° Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ искусствСнно искалСчил ΠΈΡ… ΠΈ сбил с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΌΠΎΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½ΠΎ я Π±Ρ‹ Π½Π΅ отчаивался.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΌΡ‹ считаСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, общСдоступный ΠΈΠΌΠΏΠΎΡ€Ρ‚ protobuf ΠΈΠ»ΠΈ раскрытиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… API-интСрфСйсов ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π²Π΅Ρ‰ΡŒΡŽ (ΠΈ я Π½Π΅ знаю, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅, Ссли ΠΎΠ΄Π½Π° сторона просто Π½Π΅ повторяСт снова ΠΈ снова, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ говорят: «НСт, это Π½Π΅ Ρ‚Π°ΠΊΒ». МнС каТСтся, здСсь Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²).

Π― ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ (ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ) ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΈ я Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ языковой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ искусствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΅Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования - это ΠΏΠ»ΠΎΡ…ΠΎ; ΠžΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ язык позволяСт Π²Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ максимально Ρ€Π°ΡΡˆΠΈΡ€ΡΠ»ΠΈ Β«ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ пространство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ», поэтому Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая добавляСт ΠΊ пространству Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Ρ‚ΠΎΡ‡ΠΊΡƒ, каТСтся ΠΌΠ½Π΅ странным.

Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования, ΠΊΠΎΠ³Π΄Π° разрабатываСтся любоС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ псСвдонима Ρ‚ΠΈΠΏΠ°.

Π₯отя основным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ обсуТдаСм Π² этом выпускС, являСтся Ρ‚ΠΈΠΏ _replacement_, псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для отдСлСния Ρ‚Π΅Π»Π° ΠΊΠΎΠ΄Π° ΠΎΡ‚ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°.

НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ оказался Β«Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΒ» (Ρ‚.Π΅. ΠΎΠ½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, нСсовмСстимым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ). Π—Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Β«ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽΒ» Π·Π°ΠΌΠ΅Π½Ρƒ. Π― Π΄ΡƒΠΌΠ°ΡŽ ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° github ΠΈ Ρ‚. Π”., Π“Π΄Π΅ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρ‹ Ρ‚ΠΈΠΏΠ° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² тСсном сотрудничСствС ΠΈΠ»ΠΈ ΡΠΎΠ³Π»Π°ΡˆΠ°ΡŽΡ‚ΡΡ с Ρ†Π΅Π»ΡŒΡŽ обСспСчСния ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ случаи, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ - СдинствСнноС, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ зависимости ΠΎΡ‚ большого ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΉ.

Π˜Ρ‚Π°ΠΊ, процСсс здСсь Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ псСвдоним Ρ‚ΠΈΠΏΠ°
  2. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ тСкст ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдоним Ρ‚ΠΈΠΏΠ°
  3. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ псСвдоним Ρ‚ΠΈΠΏΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ°.

Π’ ΠΊΠΎΠ½Ρ†Π΅ этого процСсса появятся Π΄Π²Π° нСзависимых Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ смогут свободно Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² своих собствСнных направлСниях.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом случаС использования:

  • Π½Π΅Ρ‚ возмоТности ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚, содСрТащий ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ исходного Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° псСвдоним Ρ‚ΠΈΠΏΠ° (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρ‹ вряд Π»ΠΈ согласятся с этим)
  • исходный Ρ‚ΠΈΠΏ Π½Π΅ являСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ (хотя ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ Π² Ρ‚Π΅Π»Π΅ ΠΊΠΎΠ΄Π° Π² процСссС «отлучСния» ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°).

@Merovius Π’ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ удаляСтС ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚Π΅ старый ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ сразу ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚Π΅ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ использовали. Если Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ всС Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ добавлСнию языковой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для прСдотвращСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ спорным. Π‘ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ успСхом ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°: просто ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ сразу Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сайтС Π²Ρ‹Π·ΠΎΠ²Π°. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Оба дСйствия ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой простоС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° Π½Π° сайтах Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΈ Π² случаС с Google, Π½ΠΎ ΠΊΠ°ΠΊ спСциалист ΠΏΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, это Π½Π΅ Ρ‚ΠΎΡ‚ ΠΌΠΈΡ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я ΠΆΠΈΠ²Ρƒ.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв я Π½Π°Ρ…ΠΎΠΆΡƒ эту ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒ нСсправСдливой, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° Go Π΄Π΅Π»Π°Π΅Ρ‚ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ доступным для Π²Π½Π΅ΡˆΠ½ΠΈΡ… сторон, Π½ΠΎ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС ΠΊΠΎΠ΄Π°, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, это ограничиваСтся стСной. сад, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ соотвСтствуСт контСксту сообщСства ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ исходного ΠΊΠΎΠ΄Π°. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ языка, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ³ΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… садов, Π±Ρ‹Π»ΠΎ Π±Ρ‹, мягко говоря, Π½Π΅Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎ.

@niemeyer Я, видимо, нС ясно

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ API, взаимозамСняСмый со старым API
  2. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ API
    3Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС Π±ΡƒΠ΄Π΅Ρ‚ пСрСнСсСно ΠΈΠ»ΠΈ истСчСт ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ устарСвания, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ старый API.
    3b. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΡŒΡ‚Π΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ, навсСгда сохранив ΠΎΠ±Π° API (см., НапримСр, эту Ρ‡Π°ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ )

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Π²Ρ‹ споритС ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ 3Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ² 3b. Но Π½Π° Ρ‡Ρ‚ΠΎ я ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π», Ρ‡Ρ‚ΠΎ 1. ΡƒΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для ΠΈΠΌΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для Ρ‚ΠΈΠΏΠΎΠ², ΠΎ Ρ‡Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ.

Π₯отя Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я понимаю, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡƒ, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ вас понял :) Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡƒΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ os.Error - это Ρ€Π°Π·Π½Ρ‹Π΅ опрСдСлСния интСрфСйса, поэтому этот шаг Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ срабатываСт. Π― Π΄ΡƒΠΌΠ°ΡŽ, это ΠΏΡ€Π°Π²Π΄Π°; Ссли Π²Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ API, псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ позволят ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² интСрфСйсов.

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ для мСня Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΈΠ΄Π΅ΠΈ вашСго Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°: Ρ€Π°Π·Π²Π΅ это Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС os.Error) любой fmt.Stringer Π² качСствС os.Error?

Π’ любом случаС идСя Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° каТСтся Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ дальнСйшСго развития, Π΄Π°ΠΆΠ΅ Ссли я ΠΊ Π½Π΅ΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ скСптичСски ΠΎΡ‚Π½ΠΎΡˆΡƒΡΡŒ. Но Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Ρ†Π΅Π»ΡŒ - ΠΈΠΌΠ΅Ρ‚ΡŒ способ постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° интСрфСйсов Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ / ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ.

@niemeyer Π”Π°, Π²Ρ‹

Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ исправлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎ Π±Ρ‹ ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π― Π½Π΅ понимаю, Ρ‡Ρ‚ΠΎ это Π·Π° исправлСниС. Π’ частности, я Π½Π΅ понимаю, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с описанными Π²Π°ΠΌΠΈ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ автоматичСски прСобразуСтся Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ°? А ΠΊΠ°ΠΊ насчСт отраТСния? НаличиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с двумя ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Ρ‚ΡƒΠ΄Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ.

@rsc Π”Π°, Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ситуации, поэтому ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. ΠœΡ‹ Π±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ Ρ‚ΠΈΠΏΠΎΠ², содСрТащиС ΠΊΠ°ΠΊ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€, Ρ‚Π°ΠΊ ΠΈ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡƒΠΏΡƒΡΠΊΠ°ΡŽ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΈΠΆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ контСкст ΠΊΠΎΠ΄Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ явно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Как ΠΈ сСгодня, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠΉΡ‚ΠΈ Π² interface{} Π½Π΅ зная, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ‚ΡƒΠ΄Π° ΠΏΠΎΠΏΠ°Π»ΠΈ, Ссли это ΠΈΠΌΠ΅Π΅Ρ‚ смысл.

@Merovius Мои Π΄Π²Π° коммСнтария Π²Ρ‹ΡˆΠ΅ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΎ Ρ‡Π΅ΠΌ Π²Ρ‹ всС Π΅Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅. Если Π²Ρ‹ пСрСмСститС ΡˆΡ€ΠΈΡ„Ρ‚ сСгодня, Π²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Если Π²Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ ΠΊΠΎΠ΄Π° Π² любом ΠΈΠ· этих случаСв исправлСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ с ΠΏΠΎΠ»ΠΎΠΌΠΊΠΎΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сайтС Π²Ρ‹Π·ΠΎΠ²Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ - это ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ случай Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ IMO Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°Π΅Ρ‚ языковой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

@niemeyer Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. А ΠΊΠ°ΠΊ насчСт утвСрТдСния Ρ‚ΠΈΠΏΠ° для .(interface{String() string}) vs .(interface{Error() string}) ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… частСй интСрфСйса? Π”ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°?

@niemeyer НСт. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ· A.Foo Π² A.Bar , Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ A.Bar Π² качСствС ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ A.Foo
  2. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π²Ρ‹Π·ΠΎΠ² A.Bar Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²
  3. Π›ΠΈΠ±ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ A.Foo , ΠΈΠ»ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ этого, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

ИзмСнСниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ x int ΠΊ func Foo() , Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ func FooWithInt(x int) { Foo(); // use x somehow; }
  2. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ для добавлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ²
  3. Если Π²Ρ‹ Π½Π΅ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ устарСваниС (ΠΈΠ»ΠΈ вас Π½Π΅ бСспокоит Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ WithInt), всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Foo Π½Π° func Foo(x int) { FooWithInt(x) } .
  4. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с s/FooWithInt/Foo/g Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².
  5. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ FooWithInt .

Π’ΠΎ ΠΆΠ΅ самоС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ практичСски для всСх случаСв, ΠΊΡ€ΠΎΠΌΠ΅ двиТущихся Ρ‚ΠΈΠΏΠΎΠ² (ΠΈ, строго говоря, vars). Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ Π½Π΅ трСбуСтся. Π’Ρ‹ Π»ΠΈΠ±ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, примСняя устарСваниС, Π»ΠΈΠ±ΠΎ Π½Π΅Ρ‚, Π½ΠΎ это ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½ΠΎ атомарности. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΈ для обозначСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ внСсСнии Π² основном ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для всСх случаСв, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΈΠΏΠΎΠ². Π”Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ шаг , Π° Π½Π΅ ΠΏΠΎΠΏΡ€Π°Π²ΠΊΡƒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ (Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°Ρ€ΡƒΡˆΠ°Ρ сборку ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ нСизвСстного ΠΊΠΎΠ΄Π°, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ ΠΈ своСврСмСнного объявлСния). Но Π΄Π°ΠΆΠ΅ Ссли это Π½Π΅ Ρ‚Π°ΠΊ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ API Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ (см. X / image / draw) Ρ‚Π°ΠΊΠΆΠ΅ зависит ΠΎΡ‚ способности ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ‰ΡŒ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ² сСгодня ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСгодня Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния постСпСнно, Ρ‡Π΅Ρ€Π΅Π· нСзависимыС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹. НС ΠΊΠ°ΠΊ Β«Π― сдСлаю ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ s / Foo / Bar /Β», Π½ΠΎ Π΅ΡΡ‚ΡŒ процСсс, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π’ любом случаС. Π― Π½Π΅ знаю, Π³Π΄Π΅ ΠΌΡ‹, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΌΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π― Π½Π°Ρ…ΠΎΠΆΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ @rsc довольно ясным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ мою

@rsc Π― Π²ΠΈΠΆΡƒ Π΄Π²Π° Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ: интСрфСйс нСсСт Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вошСл, Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΈ обычная сСмантика примСняСтся ΠΏΡ€ΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ интСрфСйса. Π”Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Ссли ΠΎΠ½ΠΎ Π½Π΅ удовлСтворяСт интСрфСйсу, Π° Π±Π°Π·ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ удовлСтворяСт. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, достаточСн для рассматриваСмых Π½Π°ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ согласуСтся с ΠΈΠ΄Π΅Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

@Merovius ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° _Π²Ρ‹ фактичСски Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ_ ΠΈ Π½Π΅ заставляСтС сайты Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого Π½ΠΎΠ²Ρ‹ΠΉ API. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° _Π²Ρ‹ фактичСски Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ _ ΠΈ заставляСтС сайты Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого Π½ΠΎΠ²Ρ‹ΠΉ API. ΠœΡ‹ всС Π³ΠΎΠ΄Π°ΠΌΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ старый ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π».

@niemeyer Но Π΅Ρ‰Π΅ Ρ€Π°Π·: для Ρ‚ΠΈΠΏΠΎΠ² Π²Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Π΅Ρ‰ΠΈ достойным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘ΠΌ. X / image / draw. И Π½Π΅ Ρƒ всСх ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ прСдставлСниС ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ; Π― сам Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Β«Ρ‡Π΅Ρ€Π΅Π· 6,12,… мСсяцСв $ function, $ type,… ΡƒΡ…ΠΎΠ΄ΠΈΡ‚, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚Β», Π° Π·Π°Ρ‚Π΅ΠΌ просто сломайтС Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ слСдитС Π·Π° этим ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± устарСвании (Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄ΡƒΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Π° долгосрочная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° API, ΠΎΠ½ навСрняка Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, ΠΊΡ‚ΠΎ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ Π·Π° это). Π― Π±Ρ‹ Π΄Π°ΠΆΠ΅ сказал, Ρ‡Ρ‚ΠΎ Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ взгляда Π½Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ; см. Π½Π΅Π΄Π°Π²Π½ΠΈΠΉ Ρ‚ΠΎΠ»Ρ‡ΠΎΠΊ ΠΊ сСмантичСским вСрсиям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ. И Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ Π΄Π°ΠΆΠ΅ Π² этом случаС Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ ΠΎΡ‚ возмоТности постСпСнного Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π° ΠΈ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ, Ссли Π½Π΅ ΠΏΠΎ сущСству Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ зависимости ΠΎΡ‚ Π°Π»ΠΌΠ°Π·ΠΎΠ².

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования псСвдонимов для постСпСнного восстановлСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ваша позиция Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π°. Но я Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ для большСй части сообщСства Π³ΠΎ это отличаСтся, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°Ρ… ΠΈ Π΅ΡΡ‚ΡŒ смысл Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ.

@niemeyer @rsc @Merovius Π―

Π§Π΅ΠΌ большС ΠΌΡ‹ повторяСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ сСмантики ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ ΠΌΡ‹ΡΠ»ΡŒ: Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ сСмантика ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ° (Β«is-aΒ»), опрСдСлСнная ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊ интСрфСйсам ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсами. МоС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ интСрфСйсы рСкурсивно ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌΠΈ (согласно Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ диспСрсии) Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π­Ρ‚ΠΎ Π½Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для всСх Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Но ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ для всСх Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ прСдстоит Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Β«ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹Π΅ части» API ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ интСрфСйсами (Ρ‚Π°ΠΊΠΆΠ΅ способствуСт Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ).

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всС трСбования, (ab) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ интСрфСйсы Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠœΡ‹ Π»ΠΎΠΌΠ°Π΅ΠΌ Go 1.0? Π― Π½Π΅ знаю, Π½ΠΎ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚.

@thwd Π― Π΄ΡƒΠΌΠ°ΡŽ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, говоря Β«ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ интСрфСйсы рСкурсивно ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌΠΈΒ». ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ - ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, это Π½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ (Π½Π΅ интСрфСйсными) Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

@thwd Π― Π½Π΅ согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ интСрфСйсы (Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Π΅) - Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ любой ΠΈΠ· этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… случаСв). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ΄Π½ΠΈΠΌ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС Π² вашСм API интСрфСйсом (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ / ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚), Π²ΠΊΠ»ΡŽΡ‡Π°Ρ vars / consts / funcs /… ΠΈ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ (я Π²ΠΈΠ΄Π΅Π» это Π² java. МСня это Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°Π΅Ρ‚). Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ являСтся структурой, просто сдСлайтС это структурой. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ просто добавляСт странныС синтаксичСскиС ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² ваш ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ практичСски Π±Π΅Π· ΠΏΠΎΠ»ΡŒΠ·Ρ‹. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ СдинствСнный способ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² Π·Π΄Ρ€Π°Π²ΠΎΠΌ ΡƒΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅; Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с простого, Π° ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ слоТностСй Π² API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π²ΠΈΠ΄Π΅Π» Π΄ΠΎ сих ΠΏΠΎΡ€, исходит ΠΎΡ‚ людСй, Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ API ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ понадобится. А ΠΏΠΎΡ‚ΠΎΠΌ, Π² 80% (это очСвидная лоТь) случаСв Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ «чистого Π΄ΠΈΠ·Π°ΠΉΠ½Π° APIΒ».

(для ясности: я Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Π΅ интСрфСйсы - плохая идСя. Π― просто Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ)

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ мнСнию @Merovius , ΠΌΠ½ΠΎΠ³ΠΈΠ΅ постСпСнныС

package foo

type Authority struct {
  Host string
  Port int
}

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ foo разрастаСтся, ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ большС отвСтствСнности (ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°), Ρ‡Π΅ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ‚ΠΎΡ‚, ΠΊΠΎΠΌΡƒ просто Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΈΠΏ Authority . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования являСтся способ создания ΠΏΠ°ΠΊΠ΅Ρ‚Π° fooauthority , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто содСрТит Authority Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ foo.Authority всС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ любоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΡ‹ интСрфСйсов, здСсь Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

@Merovius Π’Π°Ρˆ послСдний ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±Ρ‹Π» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ адрСсован ΠΌΠ½Π΅ Π»ΠΈΡ‡Π½ΠΎ, Π° Π½Π΅ ΠΌΠΎΠ΅ΠΌΡƒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ закончится, поэтому я ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽ эту линию обсуТдСния здСсь.

@griesemer @Merovius Π― согласСн с Π²Π°ΠΌΠΈ ΠΎΠ±ΠΎΠΈΠΌΠΈ. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ обсуТдСниС Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ нас ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² / ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, любая Π΅Π³ΠΎ рСализация Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ Π·Π° собой косвСнноС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния. Π­Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π» @niemeyer (Ссли я ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΅Π³ΠΎ понял). Но я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС ΠΈΠ΄Π΅ΠΉ. Π― Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°ΡŽ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

@niemeyer БущСствовал Π½ΠΈΡ‡Π΅Π³ΠΎ _AD hominem_ Π² коммСнтариях @Merovius Β«s. Π•Π³ΠΎ заявлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ «ваша позиция ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π°Β», являСтся наблюдСниСм ΠΎ вашСй ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΎ вас, ΠΈ являСтся Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Π°ΡˆΠΈΡ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π’ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ удаляСтС ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚Π΅ старый ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ сразу ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚Π΅ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ использовали.

Π° Ρ‚Π°ΠΊΠΆΠ΅

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли Π²Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈ Π½Π΅ заставляСтС сайты Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого Π½ΠΎΠ²Ρ‹ΠΉ API. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ фактичСски Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ, Π° вмСсто этого заставляСтС сайты Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ API. ΠœΡ‹ всС Π³ΠΎΠ΄Π°ΠΌΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ старый ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π».

Из этих заявлСний Ρƒ мСня слоТилось Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠœΠ΅Ρ€ΠΎΠ²ΠΈΡƒΡΠ° - Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ сочувствуСтС, Ссли ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя осуТдаСтС Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², удаляСтС это; Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π» бСсконСчно; Ρ‡Ρ‚ΠΎ «ваша позиция ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π°Β». (И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ дальнСйшСС Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ слово Β«Π²Ρ‹Β» для обозначСния Π²Π°ΡˆΠΈΡ… ΠΈΠ΄Π΅ΠΉ, Π° Π½Π΅ вашСй личности.)

@niemeyer ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ΅ adapts каТСтся тСсно связанным с instance ΠΈΠ· классов Ρ‚ΠΈΠΏΠΎΠ² Haskell. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ пСрСводя это Π½Π° Go, это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

package os

type Error interface {
  String() string
}

instance error Error (
  func (e error) String() string { return e.Error() }
)

К соТалСнию (ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ @zombiezen ), нСясно, ΠΊΠ°ΠΊ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ для

МнС Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ значСниями); Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ сСмантика adapts ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ пСрСносС Context Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ?

Из этих заявлСний Ρƒ мСня слоТилось Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠœΠ΅Ρ€ΠΎΠ²ΠΈΡƒΡΠ° - Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π΅ сочувствуСтС ΠΎΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ.

@jba Π­Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚Ρ‹, Π° Π½Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ мнСния. Если Π²Ρ‹ удаляСтС ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ, ΠΊΠΎΠ΄ Go, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ, ломаСтся, поэтому эти измСнСния Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ. МоС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, касаСтся постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ здСсь ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ устарСваниС. Однако этот процСсс осуТдСния - Π½Π΅ вопрос сочувствия. Π£ мСня Π΅ΡΡ‚ΡŒ нСсколько общСдоступных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Go с тысячами Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… зависимостСй ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈ нСсколько нСзависимых API-интСрфСйсов ΠΈΠ·-Π·Π° этой постСпСнной ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ. Когда ΠΌΡ‹ Π»ΠΎΠΌΠ°Π΅ΠΌ API, Π»ΡƒΡ‡ΡˆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ партиями, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ссли ΠΌΡ‹ Π½Π΅ надССмся, Ρ‡Ρ‚ΠΎ люди Π½Π΅ сойдут с ΡƒΠΌΠ°. Если, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ ΠΆΠΈΠ²Π΅Ρ‚Π΅ Π² обнСсСнном стСной саду ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ мСстом Π·Π²ΠΎΠ½ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это. Но я ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡΡŒ ... всС это ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π² исходном ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅.

@Merovius

Π›ΠΈΡ‡Π½ΠΎ, Ссли Π±Ρ‹ я считал псСвдонимы ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²ΠΎΠ³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²-ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ использования), я Π±Ρ‹ просто использовал ΠΈΡ…, ΠΊ Ρ‡Π΅Ρ€Ρ‚Ρƒ прСдупрСТдСния ΠΎΠ± устарСвании.

ΠœΡ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ большим количСством Π½ΠΎΠ²Ρ‹Ρ… ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… API, ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ псСвдонимов Π±Π΅Π· Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ объяснСния состояния старого (с псСвдонимом) Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ постСпСнному Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌΡƒ количСству ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ повСрхности API. Π― согласСн с @niemeyer, Ρ‡Ρ‚ΠΎ нашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ

Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ частичных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π½ΠΎ Π½Π΅ Π² этой Ρ‚Π΅ΠΌΠ΅. Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС эта Ρ‚Π΅ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с инкапсуляциСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌ рассмотрСниСм.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ псСвдонимом нСсколько Π·Π°ΠΌΠ΅Π½Π΅Π½, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ. Вакая Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ инструмСнтам автоматичСски ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… API.

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ясно, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° устарСвания тСхничСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° для Ρ‚ΠΈΠΏΠΎΠ², Π½Π΅ входящих Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π’ΠΈΠΏ являСтся старым Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° псСвдонимов. Учитывая, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смоТСм ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ это Π² экосистСмС, я всС ΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ псСвдонимы стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ строго ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π»ΠΈ устарСваниС (Π½Π° Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ увСдомлСния ΠΎΠ± устарСвании).

Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ понятиС устарСвания Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ обсуТдСнии ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² Π½Π°ΡˆΠΈΡ… основных инструмСнтах (golint, godoc ΠΈ Ρ‚. Π”.). ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΠ± устарСвании - самая большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² экосистСмС Go ΠΈ Π±ΠΎΠ»Π΅Π΅ распространСнная, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° постСпСнного восстановлСния ΠΊΠΎΠ΄Π°.

@rakyll МнС симпатичСн Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎΠ± устарСвании; Π― просто Π²ΠΎΠ·Ρ€Π°ΠΆΠ°ΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°) псСвдонимы Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π±) Π²Ρ‹Π΄Π°Π²Π°Π»ΠΈ ΠΈΡ… ΠΊΠ°ΠΊ прСдупрСТдСния компилятора.

Для Π°), ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ…ΠΎΠ΄ΠΎΠ², это Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΡ‡Π΅Π½ΡŒ нСбольшого Π½Π°Π±ΠΎΡ€Π° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ. НапримСр, скаТСм, я Ρ…ΠΎΡ‡Ρƒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… выпусках; На самом Π΄Π΅Π»Π΅ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сигнатура Π½ΠΎΠ²ΠΎΠ³ΠΎ API Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π½ΠΎ я всС Ρ€Π°Π²Π½ΠΎ Ρ…ΠΎΡ‡Ρƒ это ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ. Для Π±) прСдупрСТдСния компилятора IMHO повсСмСстно ΠΏΠ»ΠΎΡ…ΠΈΠ΅. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π² основном соотвСтствуСт Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Go ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚, поэтому Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ оправдания.

Π― согласСн со всСм, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎΠ± увСдомлСниях ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. По-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, для этого ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ синтаксис: # 10909, поэтому ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ инструмСнтов, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² ΠΈΡ… Π² godoc ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΡƒΡŽ ΠΎΠ± ΠΈΡ… использовании (скаТСм, go vet, golint ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт Π²ΠΎΠΎΠ±Ρ‰Π΅).

@rakyll Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ stdlib слСдуСт Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с консСрвативного использования псСвдонимов Ρ‚ΠΈΠΏΠΎΠ², Ссли ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Π²Π΅Π΄Π΅Π½Ρ‹.


Боковая панСль:

Бправочная информация для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ статусС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΎΠ± устарСвании Π² Go ΠΈ связанных инструмСнтах, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ довольно распространСны:

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ @Merovius Π²Ρ‹ΡˆΠ΅, сущСствуСт стандартноС соглашСниС для ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ элСмСнтов ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ…, # 10909, см. Https://blog.golang.org/godoc-documenting-go-code

TL; DR: сдСлайтС Π°Π±Π·Π°Ρ† Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ начинаСтся с «УстарСло:Β» ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°ΠΌΠ΅Π½Π°.

Для godoc принято ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… элСмСнтов: # 17056.

@rakyll ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ golint ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π» ΠΎΠ± использовании ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… элСмСнтов: golang / lint # 238.


Π”Π°ΠΆΠ΅ Ссли stdlib Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ½ΡΠ΅Ρ€Π²Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ использования псСвдонимов Π² stdlib, я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ сущСствованиС псСвдонима Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Ρ‚ΡŒ (Π»ΡŽΠ±Ρ‹ΠΌ способом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся мСханичСски ΠΈΠ»ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ), Ρ‡Ρ‚ΠΎ старый Ρ‚ΠΈΠΏ устарСл, Π΄Π°ΠΆΠ΅ Ссли это всСгда ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ·:

  • сканированиС Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² stdlib, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ псСвдоним ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏΠ°, явно Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС
  • ТСсткоС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх псСвдонимов stdlib Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструмСнты
  • сообщСниС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ старый Ρ‚ΠΈΠΏ устарСл, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠΆΠ΅ рассматриваСтС Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½Ρƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ

Когда псСвдоним Ρ‚ΠΈΠΏΠ° вводится ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ старый Ρ‚ΠΈΠΏ объявлСн ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, помСчая старый Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ со ссылкой Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ.

Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ инструмСнтарий, дСлая Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ простым ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ: Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² особом рСгистрС ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ ΠΎ псСвдонимах Ρ‚ΠΈΠΏΠΎΠ²: Π΅ΠΌΡƒ просто Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Β«Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ:Β» Π² коммСнтариях ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ врСмСнная, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ псСвдоним Π² stdlib ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для устарСвания, Ρ…ΠΎΡ€ΠΎΡˆΠ°, Π½ΠΎ Π΅Π΅ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со стандартными коммСнтариями ΠΎΠ± устарСвании ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ Π·Π°ΠΏΡ€Π΅Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠΎΠ΄Π°.

@niemeyer Мой ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π±Ρ‹Π» потСрян ΠΈΠ·-Π·Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΈ питания :( НС Π² порядкС:

Но я ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡΡŒ ..

FWIW, я нашСл ваш послСдний ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΎ мСня Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ большС согласны, Ρ‡Π΅ΠΌ казалось Ρ€Π°Π½Π΅Π΅ (ΠΈ Ρ‡Π΅ΠΌ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ). Π₯отя, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅.

МоС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, касаСтся постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π°.

Π”ΡƒΠΌΠ°ΡŽ, здСсь Π½Π΅Ρ‚ споров. :) Π― с самого Π½Π°Ρ‡Π°Π»Π° согласился, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ - интСрСсная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° для рассмотрСния для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. МСня ΡΠΌΡƒΡ‰Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ утвСрТдСния:

Если Π²Ρ‹ удаляСтС ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ, ΠΊΠΎΠ΄ Go, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ, ломаСтся, поэтому эти измСнСния Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ.

МнС всС Π΅Ρ‰Π΅ интСрСсно, Ρ‡Ρ‚ΠΎ Π²Ρ‹ здСсь рассуТдаСтС. Π― понимаю, Ρ‡Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ атомарности являСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого прСдполоТСния, я просто Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ сначала ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ многочислСнными ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ Π² зависимых рСпозиториях, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ большС Π½Π΅Ρ‚ (ΠΈ достаточноС устарСваниС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½) ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ удаляСтся Π² восходящСм ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ (Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈΠΊΡ‚ΠΎ большС Π½Π΅ зависит). Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сущСствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€ нСчСткости Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… зависимостСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ (ΠΈΠ»ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ), Π½ΠΎ это, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни Π½Π΅ зависит ΠΎΡ‚ рассматриваСмого вопроса; Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ примСняСтС критичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈ ΠΊΠ°ΠΊ Π±Ρ‹ Π²Ρ‹ Π½ΠΈ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Π΅Π³ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

И, чСстно говоря: ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ прСдлоТСния, ΠΊΠ°ΠΊ

Если, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ ΠΆΠΈΠ²Π΅Ρ‚Π΅ Π² обнСсСнном стСной саду ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ мСстом Π·Π²ΠΎΠ½ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это.

Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я сказал, создало Ρƒ вас Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΡΠΏΠΎΡ€ΡŽ, я надСюсь, Ρ‡Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ шаг Π½Π°Π·Π°Π΄ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ это, исходя ΠΈΠ· прСдполоТСния, Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ исходного ΠΊΠΎΠ΄Π°. сообщСство (Ссли Π²Ρ‹ ΠΌΠ½Π΅ Π½Π΅ Π²Π΅Ρ€ΠΈΡ‚Π΅, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΌΠΎΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅; я всСгда ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ, ΠΊΡ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это скорСС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сообщСства, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° монорСпозитория. Π£ ΠΌΠΎΠ½ΠΎΡ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π΅ΡΡ‚ΡŒ способы ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это , ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ).

Π’ любом случаС. Π― Π½Π°Ρ…ΠΎΠΆΡƒ это Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π²Ρ‹. Π― надСюсь, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΉΠΌΡƒ Π²Π°ΡˆΡƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ protobuf ...
Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΌΡ‹ рассматриваСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ protobuf ΠΈΠ»ΠΈ раскрытиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… API-интСрфСйсов ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π²Π΅Ρ‰ΡŒΡŽ.

nit: Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ protobuf слСдуСт ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ особый Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования. Они Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ явно ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ, Ρ‚Π°ΠΊ ΠΈ Π΄Π°ΠΆΠ΅ Π² общСдоступной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ , поэтому ΠΎΠ½ΠΈ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ΄ дСйствиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, описанных Π² этом выпускС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² Π±Ρ‹Π»ΠΎ Π±Ρ‹ достаточно для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ общСдоступного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° protobuf. (ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΎΠ½ΠΈ логичСски ΡΠ²Π»ΡΡŽΡ‚ΡΡ константными, поэтому "var Enum_name = import.Enum_name" Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ достаточно.)

@Merovius Бпасибо Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚. ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ контСкст:

МнС всС Π΅Ρ‰Π΅ интСрСсно, Ρ‡Ρ‚ΠΎ Π²Ρ‹ здСсь рассуТдаСтС. Π― понимаю, Ρ‡Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ атомарности являСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого прСдполоТСния, я просто Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ сначала ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ,

Никогда Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ этого Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ. ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ шаг Π½Π°Π·Π°Π΄ ΠΈ Π΅Ρ‰Π΅ Ρ€Π°Π· Π·Π°ΡΠ²ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ.

ΠœΡ‹, вСроятно, всС согласны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ конСчная Ρ†Π΅Π»ΡŒ двоякая: ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. НСкоторыС ΠΈΠ· послСдних Π»ΠΎΠΌΠ°ΡŽΡ‚ измСнСния, ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†Π΅Π»ΠΈ. Π˜Ρ‚Π°ΠΊ, Π΅ΡΡ‚ΡŒ напряТСниС, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСкоторая ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Π³Π΄Π΅ находится золотая сСрСдина. Π—Π΄Π΅ΡΡŒ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ интСрСсная Ρ‡Π°ΡΡ‚ΡŒ нашСй дискуссии.

Один ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… способов Π½Π°ΠΉΡ‚ΠΈ эту Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ сСрСдину - ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ чСловСчСском Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ людСй измСнСния ΠΊΠΎΠ΄Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π», Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ инСрция. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ всСх зависимых Π±Π°Π· ΠΊΠΎΠ΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· этот процСсс. ΠœΡ‹ просим занятых людСй Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, ΠΎ Ρ‡Π΅ΠΌ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ½ΠΈ Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° эту Π·ΠΎΠ»ΠΎΡ‚ΡƒΡŽ сСрСдину - это, вСроятно, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС. НСваТно, сколько ΠΌΡ‹ просим людСй Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Если ΠΎΠ½ лСгкодоступСн ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ здСсь ΠΈ сСйчас, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠΌ. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ здСсь: _ΠΎΡ…, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° это ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ломаСтся! _ Но это ΠΈΠ΄Π΅Ρ‚ Π²Ρ€Π°Π·Ρ€Π΅Π· с заявлСнной Ρ†Π΅Π»ΡŒΡŽ: ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, Π° Π½Π΅ ΠΏΡ€Π°Π²Ρ‹.

Π˜Ρ‚Π°ΠΊ, надСюсь, это Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ простоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° каТСтся бСсполСзным. Π§Ρ‚ΠΎΠ±Ρ‹ люди Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ использовали этот Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² своСм Π½ΠΎΠ²ΠΎΠΌ Π΄ΠΎΠΌΠ΅, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Когда люди Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ измСнСния своСго ΠΊΠΎΠ΄Π°, Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ _ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ_ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ скоро снова измСнится Ρƒ Π½ΠΈΡ… ΠΏΠΎΠ΄ Π½ΠΎΠ³Π°ΠΌΠΈ Π² блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Если ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ добавлСния языковой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π² Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅, Π² ΠΈΠ΄Π΅Π°Π»Π΅ это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ людям постСпСнно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ _ Π² этот Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, _ Π½Π΅ просто Π² Π½ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΌ, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅.

Бпасибо Π·Π° объяснСниС. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я Π»ΡƒΡ‡ΡˆΠ΅ понимаю Π²Π°ΡˆΡƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ согласСн с вашими прСдполоТСниями (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ люди Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, нСсмотря Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ, поэтому прСдоставлСниС любой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΠΎΠΌΠΎΡ‰ΠΈ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° Π·Π°ΠΌΠ΅Π½Ρƒ, ΠΈΠΌΠ΅Π΅Ρ‚ пСрвостСпСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). FWIW, ΠΌΠΎΠΉ Π½Π°ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ (нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для постСпСнного исправлСния ΠΌΡ‹ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ) - это инструмСнт, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ошибок, для автоматичСской ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° посылка Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ устарСвания, Π½ΠΎ я свободно ΠΏΡ€ΠΈΠ·Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π― Π΅Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π», ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ это Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

@niemeyer Π― Π½Π΅ Π²Π΅Ρ€ΡŽ, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ³ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ систСмы Ρ‚ΠΈΠΏΠΎΠ² Go.

Рассмотрим Π΄ΠΈΠ»Π΅ΠΌΠΌΡƒ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ этим ΠΊΠΎΠ΄ΠΎΠΌ:

package old
import "new"
type A adapts new.A
func (a A) NewA() {}

package new
type A struct{}
func (a A) OldA() {}

package main
import (
    "new"
    "old"
    "reflect"
)
func main() {
    oldv := reflect.ValueOf(old.A{})
    newv := reflect.ValueOf(new.A{})
    if oldv.Type() == newv.Type() {
        // The two types are equal, therefore they must
        // have exactly the same method set, so either
        // oldv doesn't have the OldA method or newv doesn't
        // have the NewA method - both of which imply a contradiction
        // in the type system.
    } else {
         // The two types are not equal, which means that the
         // old adapted type is not fully compatible with the old
         // one. Any type that includes either new.A or new.B will
         // be incompatible as one of its components will likewise be
         // unequal, so any code that relies on dynamic type checking
         // will fail when presented with the type that's not using the
         // expected version.
    }
 }

Одна ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… аксиом ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, ΠΈΡ… значСния ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚.Ρ‚ΠΈΠΏ Ρ€Π°Π²Π½Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· основ эффСктивности прСобразования Ρ‚ΠΈΠΏΠΎΠ² срСды выполнСния Go. Насколько я понимаю, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«adaptsΒ», Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ Π΅Π³ΠΎ.

@rogpeppe Π‘ΠΌ. бСсСду с @rsc ΠΎΠ± ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π²Ρ‹ΡˆΠ΅. Π­Ρ‚ΠΈ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅, поэтому «РСфлСкс» просто скаТСт ΠΏΡ€Π°Π²Π΄Ρƒ ΠΈ прСдоставит ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π΅, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ спросят ΠΎΠ± этом.

@niemeyer Если эти Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‚ΠΎ я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ смоТСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ постСпСнноС восстановлСниС ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. НапримСр, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ².

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

package newimage
import "image"
type RGBA adapts image.RGB
func (r *RGBA) At(x, y) color.Color {
    return (*image.Buffer)(r).At(x, y)
}
etc for all the methods

Учитывая Ρ†Π΅Π»ΡŒ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ
ΠΎΠ±Ρ€Π°Π·, созданный Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, совмСстим с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ функциями
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ старый Ρ‚ΠΈΠΏ изобраТСния.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ image / png Π΅ΡΡ‚ΡŒ
Π±Ρ‹Π» ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ для использования newimage, Π° image / jpeg - Π½Π΅Ρ‚.

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:

img, err := png.Decode(r)
if err != nil { ... }
err = jpeg.Encode(w, img, nil)

Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΡ‚ΠΈΠ² * image.RGBA, Π° Π½Π΅ * newimage.RGBA,
ΠΎΠ½ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ AFAICS, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ Ρ€Π°Π·Π½Ρ‹Π΅.

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ‚ΠΈΠΏ assert, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ Ρ‚ΠΈΠΏ * image.RGBA
ΠΈΠ»ΠΈ Π½Π΅. Π­Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ.Π’ΠΈΠΏΠ΅ΠΎΡ„ (Ρ…) == ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ.Π’ΠΈΠΏΠ΅ΠΎΡ„ (Ρ…. (anyStaticType))

Π’ΠΎ Π΅ΡΡ‚ΡŒ, использованиС утвСрТдСния статичСского Ρ‚ΠΈΠΏΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ просто ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ статичСский Ρ‚ΠΈΠΏ
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСняСт Π΅Π³ΠΎ.

Допустим, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎΠ³Π΄Π°, вСроятно, Π½Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ понадобится
Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² любой интСрфСйс, совмСстимый с Π»ΡŽΠ±Ρ‹ΠΌ
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΈΠ½Π°Ρ‡Π΅ остановится Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ, Π»ΠΈΠ±ΠΎ старый ΠΊΠΎΠ΄
Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π² Ρ‚ΠΈΠΏΡ‹ интСрфСйсов, совмСстимыС с
Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΠΉ ситуации:

// oldInterface is some interface with methods that
// are only supported by the old type.
type oldInterface interface {
    OldMethod()
}
var x = interface{} = newpackage.Type{}
switch x.(type) {
case oldInterface:
    // This would fail because the newpackage.Type
    // does not implement OldMethod, even though we
    // we just supposedly checked that x implements OldMethod.
    reflect.TypeOf(x).Method("OldMethod")
}

Π’ Ρ†Π΅Π»ΠΎΠΌ, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ…, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²
ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ объяснимой систСмС Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ нСсовмСстимости
Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ динамичСскиС Ρ‚ΠΈΠΏΡ‹.

Π― ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β«Ρ‚ΠΈΠΏ X = YΒ». ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ просто ΠΈ Π½Π΅
слишком сильно Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ систСму Ρ‚ΠΈΠΏΠΎΠ².

@rogpeppe : Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ @niemeyer Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² нСявном ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ прСдлоТСниям @josharian .

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для постСпСнного Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°ΠΊΠΆΠ΅ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²; ΠΏΠΎ сути, это ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ добавлСния ΠΊ языку ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ нСвыполнимая Π·Π°Π΄Π°Ρ‡Π° - ΠΌΠ½ΠΎΠ³ΠΈΠ΅ языки Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ, особСнно для Ρ‚ΠΈΠΏΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΉ структурой, - Π½ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ добавляСт ΠΌΠ½ΠΎΠ³ΠΎ слоТности Π² систСму Ρ‚ΠΈΠΏΠΎΠ², особСнно для Ρ‚ΠΈΠΏΠΎΠ² интСрфСйса .

Как Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ интСрСсным ΠΊΡ€Π°ΠΉΠ½ΠΈΠΌ случаям, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Β«ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Β» сами ΠΏΠΎ сСбС:

type oldInterface interface {
    OldMethod()
}
var x = interface{} = newpackage.Type{}
switch y := x.(type) {
case oldInterface:
    reflect.TypeOf(y).Method("OldMethod")  // ok
    reflect.TypeOf(x).Method("NewMethod")  // ok

    // This would fail because y has been implicitly converted to oldInterface.
    reflect.TypeOf(y).Method("NewMethod")

    // This would fail because accessing OldMethod on newpackage.Type requires
    // a conversion to oldInterface.
    reflect.TypeOf(x).Method("OldMethod")
}
// This would fail because accessing OldMethod on newpackage.Type requires
// a conversion to oldInterface.

МнС это всС Π΅Ρ‰Π΅ каТСтся ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹ΠΌ. ВСкущая модСль ΠΎΡ‡Π΅Π½ΡŒ проста: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ интСрфСйса ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ статичСский Ρ‚ΠΈΠΏ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠ± этом Π±Π°Π·ΠΎΠ²ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ заглядываСм Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлали. На ΠΌΠΎΠΉ взгляд, это ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ (ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ объяснимоС) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ языка.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ здСсь, каТСтся, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ @egonelbre Π² https://github.com/golang/go/issues/16339#issuecomment -247536289, я ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» исходный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ (Π²Π²Π΅Ρ€Ρ…Ρƒ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ связанноС Ρ€Π΅Π·ΡŽΠΌΠ΅ обсуТдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π»Π΅ΠΊΠΎ. Π― Π±ΡƒΠ΄Ρƒ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ этому, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° обновляю сводку.

Π’ Ρ†Π΅Π»ΠΎΠΌ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ здСсь большС внимания удСляСтся псСвдонимам Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Π΅ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ псСвдонимам. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, идСя Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° Густаво Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅Ρ‚. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это каТСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТным, хотя, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ обсуТдСния Π±ΡƒΠ΄Π΅Ρ‚ достигнута Π±ΠΎΠ»Π΅Π΅ простая Ρ„ΠΎΡ€ΠΌΠ°. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ обсуТдСниС Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ.

Π― Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ измСняСмыС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ошибкой» (ΠΈ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибкой, Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π³ΠΎΠ½ΠΊΠΈ являСтся Π»ΡƒΡ‡ΡˆΠΈΠΌ инструмСнтом для поиска Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ошибок). Π― Π±Ρ‹ попросил, Ρ‡Ρ‚ΠΎΠ±Ρ‹, Ссли этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для оправдания отсутствия Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ синтаксиса, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° вСтСринарная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, которая, скаТСм, провСряСт присвоСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² ΠΊΠΎΠ΄Π΅, Π½Π΅ доступном ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для init () ΠΈΠ»ΠΈ ΠΈΡ… объявлСний. Π― Π½Π°ΠΈΠ²Π½ΠΎ Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ это Π½Π΅ особСнно слоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ это, скаТСм, всС зарСгистрированныС Π½Π° godoc.org ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования измСняСмых Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ Π»ΠΈ ΠΌΡ‹ считайтС всС ΠΈΡ… ошибками.

(Π― Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли go вырастСт нСизмСняСмыми Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ объявлСний const, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимо, Π½ΠΎ я ΠΏΡ€ΠΈΠ·Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ это, вСроятно, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ слоТности, связанныС с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ выраТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚ΠΈΠΏΠ°Ρ… массивов ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ)

Re Β«ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅? ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅Β». - Π² частности, это ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ случайноС использованиС x/image/draw , ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ проявил интСрСс ΠΊ использованию псСвдонимов. Π― ΠΌΠΎΠ³ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ псСвдонимы Π² net/http Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ( ΠΌΠ°ΡˆΠ΅Ρ‚ Ρ€ΡƒΠΊΠ°ΠΌΠΈ ).

Π― Ρ‚Π°ΠΊΠΆΠ΅ согласСн с ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ всСх ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Ρ‚.Π΅. я Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ.

@Merovius , Π° ΠΊΠ°ΠΊ насчСт измСняСмых _exported_ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΎΠ²? Π’Π΅Ρ€Π½ΠΎ, Ρ‡Ρ‚ΠΎ нСэкспортированный Π³Π»ΠΎΠ±Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСкрасСн, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ вСсь ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ с Π½ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. МСнСС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ экспортированныС измСняСмыС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ смысл. ΠœΡ‹ сами Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ допускали эту ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. НапримСр, Π½Π΅ сущСствуСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСзопасного способа обновлСния runtime.MemProfileRate. Π›ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π΅ запустил Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΏΡ€Π°Π²Ρ‹ насчСт var vs const, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ дСнь.

Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ x / image / draw. Π”ΠΎΠ±Π°Π²Π»ΡŽ Π² сводку ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ.

Π― ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ корпус ΠΊΠΎΠ΄Π° Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопросы, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅. Π― Π½Π°Ρ‡Π°Π» ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколько нСдСль Π½Π°Π·Π°Π΄ ΠΈ столкнулся с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Π΅ΠΌ каТСтся, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ этот Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ я надСюсь, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎ Π½Π΅Π³ΠΎ добСрСмся.

@rsc, ваша прСзСнтация GothamGo ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅ Π±Ρ‹Π»Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Π½Π° YouTube https://www.youtube.com/watch?v=h6Cw9iCDVcU ΠΈ станСт Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ посту.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ «КакиС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ псСвдонимам Ρ‚ΠΈΠΏΠΎΠ²?Β» Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос «МоТно Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ², Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… псСвдонимом?Β» Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΉ Π½Π΅Ρ‚. Π― понимаю, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ установлСнному Π΄ΡƒΡ…Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π°, Π½ΠΎ я Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°Ρ… ΠΎ псСвдонимах, здСсь ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… мСстах, Π΅ΡΡ‚ΡŒ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сразу ΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ€Π³Π°ΡŽΡ‚ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ псСвдонимы ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ позволят это ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠ°Π΅Ρ‚. Π­Ρ‚ΠΎ подразумСваСтся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ, Π½ΠΎ явноС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎΠ± этом ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌΡƒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΡŽ мноТСства Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π²Π·Π°Π΄ ΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄. Π₯отя, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это относится ΠΊ часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ вопросам ΠΎ псСвдонимах Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ псСвдонимам, Ссли это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этой Ρ‚Π΅ΠΌΡ‹.

@Merovius - Π»ΡŽΠ±ΡƒΡŽ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ получСния ΠΈ установки Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Для Π΄Π°Π½Π½ΠΎΠΉ вСрсии n ΠΏΠ°ΠΊΠ΅Ρ‚Π° p ,

package p
var Global = 0

Π² вСрсии n + 1 ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры, Π° пСрСмСнная устарСла

package p
//Deprecated: use GetGlobal and SetGlobal.
var Global = 0
func GetGlobal() int {
    return Global
}
func SetGlobal(n int) {
   Global = n
}

ΠΈ вСрсия n + 2 ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Global

package p
var global = 0
func GetGlobal() int {
    return global
}
func SetGlobal(n int) {
   global = n
}

(Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ оставлСно Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ: Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ global Π² ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Π² n + 2 ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ GetGlobal() Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ Global() .)

Π­Ρ‚ΠΎ Π½Π΅ быстроС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ псСвдонимы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΈΠ»ΠΈ ΠΈΡ… Π½Ρ‹Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ) строго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для постСпСнного восстановлСния ΠΊΠΎΠ΄Π°.

@rsc Одно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ использованиС псСвдонимов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π΅

@jimmyfrasche Π’Ρ‹ ΠΏΡ€Π°Π²Ρ‹. МнС Π½Π΅ нравится идСя использования Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² ΠΈ сСттСров (Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ я Π½Π΅ люблю ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для ΠΏΠΎΠ»Π΅ΠΉ структуры), Π½ΠΎ ваш Π°Π½Π°Π»ΠΈΠ·, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Π΅Ρ€Π΅Π½.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ использованиС псСвдонимов Π±Π΅Π· восстановлСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²), Π½ΠΎ я ΠΏΡ€ΠΈΠ·Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ослабляСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ var-aliases.

@Merovius согласился ΠΏΠΎ всСм ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌ. Π― Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π² восторгС ΠΎΡ‚ этого, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠ΅ v☹v

@niemeyer, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² пСрСносС Ρ‚ΠΈΠΏΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈ Ρƒ старого, ΠΈ Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сигнатурами. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° каТСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹.

@rogpeppe ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ это ΠΈ происходит сСгодня:

type two one

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ one ΠΈ two нСзависимыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΈ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ interface{} ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π½ΠΈΠΌ, Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ это. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ one ΠΈ two . ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° просто Π΄Π΅Π»Π°Π΅Ρ‚ этот послСдний шаг автоматичСским для Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ². Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Π½ΠΎ Π² этом Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‰Π΅Π³ΠΎ.

@iand Как ΠΈ Π² случаС с type two one , эти Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нСзависимыС Π½Π°Π±ΠΎΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², поэтому Π² сопоставлСнии ΠΈΠΌΠ΅Π½ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного. Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ пСрСнСсСны старыС Π±Π°Π·Ρ‹ ΠΊΠΎΠ΄Π°, ΠΎΠ½ΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ подпись ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° (Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€). Новый ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ подпись. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° значСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² старый ΠΊΠΎΠ΄ автоматичСски Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компилятор Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ послСдний являСтся Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΈ поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

@niemeyer ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π·Π° этими Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ скрываСтся ΠΌΠ½ΠΎΠ³ΠΎ слоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ простота псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·Ρƒ. Π― сСл, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для псСвдонимов Ρ‚ΠΈΠΏΠΎΠ², ΠΈ это ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ список. Бписок Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ², бСзусловно, Π±Ρ‹Π» Π±Ρ‹ Π΄Π»ΠΈΠ½Π½Π΅Π΅, ΠΈ я Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ совсСм понимаю всС Π΄Π΅Ρ‚Π°Π»ΠΈ. Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ тяТСлых Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°Ρ… Π½Π° ΠΏΠΎΡ‚ΠΎΠΌ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½ΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, я скСптичСски ΠΎΡ‚Π½ΠΎΡˆΡƒΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π΅ прячутся Π΄Ρ€Π°ΠΊΠΎΠ½Ρ‹) .

@jimmyfrasche Π§Ρ‚ΠΎ касаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° псСвдонимах, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, псСвдонимы Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ограничСния опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ опрСдСляСт Ρ‚ΠΈΠΏ T1 = otherpkg.T2, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° T1, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ нСпосрСдствСнно Π½Π° otherpkg.T2. Однако, Ссли ΠΏΠ°ΠΊΠ΅Ρ‚ опрСдСляСт Ρ‚ΠΈΠΏ T1 = T2 (ΠΎΠ±Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅), Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ ясСн. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ввСсти ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ (ΠΏΠΎΠΊΠ°) Π² этом Π½Π΅Ρ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ нСобходимости.

ОбновлСно Ρ€Π΅Π·ΡŽΠΌΠ΅ обсуТдСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня . ИзмСнСния:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​ссылка Π½Π° Π²ΠΈΠ΄Π΅ΠΎ GothamGo
  • Π’ качСствС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ использования Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ «сокращСниС Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Β» для @jba.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ x / image / draw Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ² ограничСния стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для @Merovius.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ тСкст ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… псСвдонимов для @jimmyfrasche.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚: golang.org/design/18130-type-alias.

Как ΠΈ нСдСлю Π½Π°Π·Π°Π΄, ΠΏΠΎΡ…ΠΎΠΆΠ΅, всС Π΅Ρ‰Π΅ сущСствуСт ΠΎΠ±Ρ‰ΠΈΠΉ консСнсус Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ². ΠœΡ‹ с Π ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΌ составили ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ зарСгистрировал (ссылка Π²Ρ‹ΡˆΠ΅).

ПослС процСсса прСдлоТСния , поТалуйста, ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ _здСсь_ ΠΏΠΎ этому вопросу. ΠŸΡ€Π°Π²ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ Ρ‚. Π”. МоТно ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° страницу ΠΎΠ±Π·ΠΎΡ€Π° ΠΊΠΎΠ΄Π° Gerrit https://go-review.googlesource.com/#/c/34592/. Бпасибо.

Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ «ВлияниС Π½Π° встраиваниС». Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² для постСпСнного исправлСния ΠΊΠΎΠ΄Π°. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Ссли p1 Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ type T1 = T2 ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ p2 встраиваСт p1.T2 Π² структуру, ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смогут ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎ p1.T1 , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅Ρ€ p3 ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ структуру ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. p2 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° p1.T1 Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠΈΠ² p3 ; p3 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ имя Π΄ΠΎ p1.T1 Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ p2 .

Π’Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· этого ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ: Π°) Π² Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ любоС ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° совмСстимости / устарСвания ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ссылаСтся Π½Π° встроСнныС поля ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈΠ»ΠΈ Π±) Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ этап устарСвания, поэтому p1 добавляСт type T1 = T2 ΠΈ отмСняСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ T2 , Π·Π°Ρ‚Π΅ΠΌ p2 отмСняСт ссылку Π½Π° (скаТСм) s2.T2 ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, всС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅Ρ€Ρ‹ p2 Π±ΡƒΠ΄ΡƒΡ‚ исправлСны Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ этого, p2 выполняСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ВСорСтичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ бСсконСчно; p4 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ p3 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам встраиваСт Ρ‚ΠΈΠΏ ΠΈΠ· p2 ; ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ p3 Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ устарСвания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π΄Π²Π°ΠΆΠ΄Ρ‹ встроСнноС ΠΏΠΎΠ»Π΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ? Π’ этом случаС самый Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ устарСвания становится бСсконСчно ΠΌΠ°Π»Ρ‹ΠΌ ΠΈΠ»ΠΈ самый внСшний становится бСсконСчным. Но Π΄Π°ΠΆΠ΅ Π½Π΅ рассматривая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠ°ΠΊ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ, ΠΌΠ½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ b) Π±Ρ‹Π»ΠΎ Π±Ρ‹ довольно слоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ устарСвания p2 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π΅ устарСвания p1 . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли T - это «стандартный ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ устарСвания», Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 2T ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ выпуски совпадали).

Π°) ΠΌΠ½Π΅ Ρ‚ΠΎΠΆΠ΅ каТСтся Π½Π΅ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Ρ‚ΠΈΠΏ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ *byte.Buffer ΠΈ я Ρ…ΠΎΡ‡Ρƒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ это ΠΏΠΎΠ»Π΅ (ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этот Π±ΡƒΡ„Π΅Ρ€ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), просто Π½Π΅Ρ‚ способа ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ (ΠΊΡ€ΠΎΠΌΠ΅ использования ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² структуры Π±Π΅Π· ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ тСряСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ совмСстимости :)).

Π― понимаю ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ совмСстимости с псСвдонимами byte ΠΈ rune . Но Π»ΠΈΡ‡Π½ΠΎ я Π±Ρ‹ поставил это второстСпСнным ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ полСзности псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² для постСпСнного восстановлСния. (ВСроятно, ΠΏΠ»ΠΎΡ…ΠΎΠΉ) ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅: для экспортируСмых ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой псСвдоним для ссылки Π½Π° встроСнноС ΠΏΠΎΠ»Π΅ ΠΈ для нСэкспортированных ΠΈΠΌΠ΅Π½ (ΠΏΠΎ сути ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ΄ большим ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ Π°Π²Ρ‚ΠΎΡ€Π°. ) ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сСмантику? Π”Π°, ΠΌΠ½Π΅ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ нравится это Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅. ΠœΠΎΠΆΠ΅Ρ‚ Ρƒ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ идСя ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅.

@rsc re ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° псСвдонимС

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ S, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся псСвдонимом для Ρ‚ΠΈΠΏΠ° T, ΠΎΠ±Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, ΠΈ Π²Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° S, Ρ‡Ρ‚ΠΎ, Ссли T являСтся псСвдонимом для pF, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅? Π₯отя это, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ, Π΅ΡΡ‚ΡŒ тонкости Π² обСспСчСнии соблюдСния, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ удобочитаСмости источника, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ (Ссли T находится Π² Ρ„Π°ΠΉΠ»Π΅, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΡ‚ S, Π½Π΅ сразу понятно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° T, посмотрСв Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ T).

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ - Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ type T = S , Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² T - являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ, ΠΈ ΠΈΠ· этой СдинствСнной строчки Π² источникС ясно, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ примСняСтся, Π±Π΅Π· нСобходимости исслСдования источника S, ΠΊΠ°ΠΊ ΠΈ Π² случаС псСвдонима псСвдонима.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° псСвдонимС локального Ρ‚ΠΈΠΏΠ° Ρ€Π°Π·ΠΌΡ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ псСвдонимом Ρ‚ΠΈΠΏΠ° ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² любом случаС Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ для S, Ρ‚Π°ΠΊ ΠΈ для T, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ, Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΎ. Он просто Π΄Π΅Π»Π°Π΅Ρ‚ Π²Π΅Ρ‰ΠΈ Π±ΠΎΠ»Π΅Π΅ простыми ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ.

@jimmyfrasche Если ΠΌΡ‹ пишСм type T1 = T2 ΠΈ T2 находится Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, Ρ‚ΠΎ ΠΌΡ‹, вСроятно, отказываСмся ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ T2. Π’ этом случаС Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ T2 Π² Π³ΠΎΠ΄ΠΎΠΊ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ func (T1) M() .

@jba ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ godoc для сообщСния ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… псСвдонима, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° этом псСвдонимС, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этому Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ Π±Π΅Π· измСнСния Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ источника. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ godoc ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π» ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΠ³Π΄Π° задСйствованы псСвдонимы ΠΈ / ΠΈΠ»ΠΈ встраиваниС, особСнно ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ поступаСт ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΌΠ½Ρ‹Ρ… инструмСнтов, Π° Π½Π΅ языковой сСмантики.

@jba Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π²Π°ΠΌ просто Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ псСвдонима? type T2 = T1 ΡƒΠΆΠ΅ позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для T1 с Ρ‚ΠΎΠΉ ΠΆΠ΅ структурой ΠΏΠ°ΠΊΠ΅Ρ‚Π°; СдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ - это имя Ρ‚ΠΈΠΏΠ°, сообщаСмоС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ reflect , ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ, исправив зависимыС ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ сайты Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ псСвдонима.

@jimmyfrasche Из Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с

"ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ T1 - это просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ T2, Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ своСго собствСнного Π½Π°Π±ΠΎΡ€Π° объявлСний ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВмСсто этого Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² T1 Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ T2. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ испытания Π½Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с использованиСм T1 Π² качСствС Ρ‚ΠΈΠΏ получатСля, прСдоставлСнный с использованиСм T2 Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ объявлСнии, Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ".

ИспользованиС pF Π² качСствС Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° нСдопустимо.

@mdempsky МнС Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ понятно, Π½ΠΎ я сказал, Ρ‡Ρ‚ΠΎ это Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ это, Ссли просто Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° эту ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ строку ΠΊΠΎΠ΄Π°.

Учитывая type S = T , Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° T Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это Π½Π΅ псСвдоним, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся псСвдонимом Ρ‚ΠΈΠΏΠ° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅. ЕдинствСнноС прСимущСство - ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

ВсСгда Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² псСвдонимС ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈ Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ потСряСтС. Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ с Ρ‚ΠΎΠ»ΠΊΡƒ случай, Π½ΠΎ Π½Π΅Ρ‚ нСобходимости Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ, с Ρ‡Π΅ΠΌ нСльзя Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π½ΠΎ эквивалСнтного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

@Merovius

Ссли p1 Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ‚ΠΈΠΏΠ° T1 = T2, Π° ΠΏΠ°ΠΊΠ΅Ρ‚ p2 встраиваСт p1.T2 Π² структуру, ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смогут ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎ p1.T1, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅Ρ€ p3 ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ структуру ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

БСгодня Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ ΠΈ явно ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Однако это Π½Π΅ сработаСт для нСэкспортированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для компСнсации. Если Π±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поля, Π½Π΅ дСлая Π΅Π³ΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ (ΠΈΠ»ΠΈ с явным ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ), это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ ΠΈΠΌΠ΅Π½ΠΈ поля ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Учитывая объявлСниС ΠΈΠ· вашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

package p2

type S struct {
  p1.T2
}

Одной ΠΈΠ· ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ «псСвдонимы ΠΏΠΎΠ»Π΅ΠΉΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ синтаксису, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌΡƒ синтаксису псСвдонимов Ρ‚ΠΈΠΏΠΎΠ²:

package p2

type S struct {
  p1.T1
  T2 = T1  // field T2 is an alias for field T1.
}

var s S  // &s.T2 == &s.T1

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Β«Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ явно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ поля:

package p2

type S struct {
  T2 p1.T1 delegated  // T2 is a field of type T1.
  // The method set of S includes the method set of T1 and forwards those calls to field T2.
}

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ сам ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ псСвдонимы ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΈΠ΄ постСпСнного исправлСния: ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ структуры Π±Π΅Π· внСсСния ошибок слияния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ согласованности.

@Merovius Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° - ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ пСрСимСновываСтся псСвдонимом.

Π― Π½Π΅ рассмотрСл это ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ - ΠΌΠΈΠΌΠΎΡ…ΠΎΠ΄ΠΎΠΌ, просто случайная ΠΌΡ‹ΡΠ»ΡŒ:

Π§Ρ‚ΠΎ, Ссли Π²Ρ‹ Π²Π²Π΅Π΄Π΅Ρ‚Π΅ Π² свой ΠΏΠ°ΠΊΠ΅Ρ‚ псСвдоним, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΠΈ встроитС Π΅Π³ΠΎ?

Π― Π½Π΅ знаю, исправит Π»ΠΈ это Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΡ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»?

@bcmills Π― Π½Π΅ Π΄ΡƒΠΌΠ°Π» ΠΎΠ± этом

@Merovius Π§Π΅ΠΌ большС я ΠΎΠ± этом Π΄ΡƒΠΌΠ°ΡŽ, Ρ‚Π΅ΠΌ большС ΠΌΠ½Π΅ нравится идСя псСвдонимов ΠΏΠΎΠ»Π΅ΠΉ.

Явная пСрСсылка ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ экспортированы, ΠΈ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊ встроСнному Ρ‚ΠΈΠΏΡƒ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ встраиваСт Π΅Π³ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ интСрфСйсу). И ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ структуры Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°.

@Merovius

Ссли p1 Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ‚ΠΈΠΏΠ° T1 = T2, Π° ΠΏΠ°ΠΊΠ΅Ρ‚ p2 встраиваСт p1.T2 Π² структуру, ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ смогут ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎ p1.T1, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅Ρ€ p3 ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ структуру ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. p2 Ρ‚ΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° p1.T1, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠΈΠ² p3; p3 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ имя Π΄ΠΎ p1.T1 Π±Π΅Π· Ρ€Π°Π·Ρ€Ρ‹Π²Π° с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ p2.

Если я понимаю ваш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ нас Π΅ΡΡ‚ΡŒ:

package p1

type T2 struct {}
type T1 = T2
package p2

import "p1"

type S struct {
  p1.T2
  F2 string // see below
}

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это всСго лишь частный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ‰Π΅Π³ΠΎ случая, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ структуры; Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ S.F2 Π² S.F1.

Π’ этом ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ p2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ API p1 с псСвдонимом локального Ρ‚ΠΈΠΏΠ°:

package p2

import "p1"

type T2 = p1.T1

type S struct {
  T2
}

Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² долгосрочной пСрспСктивС. Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ способ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ p2 Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свой экспортированный API, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ имя T2, ΠΎΠ΄Π½Π°ΠΊΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любоС ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ поля.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈΒ». Π Π°Π·Π²Π΅ эта Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

Насколько я понимаю, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ позволяСт Β«ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡΒ» Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, Ρ‡Π΅Ρ€Π΅Π· Π½ΠΎΠ²ΠΎΠ΅ имя.

Он Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ псСвдонимы, ΠΈ Π² этом случаС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мСсто, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ссылаСтся псСвдоним, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ draw pkg).

@atdiar Бсылка Π½Π° Ρ‚ΠΈΠΏ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ шаг ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ°. Π”Π°, псСвдоним Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ инструмСнт для этого.

@Merovius Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚

@atdiar МнС ΠΎΡ‡Π΅Π½ΡŒ Таль, Π½ΠΎ я Π½Π΅ понимаю, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ. Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π»ΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ этой Π²Π΅Ρ‚ΠΊΠΈ, ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎ постСпСнном Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π΅, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π½Π΅ΠΉ, ΠΈ обсуТдСниС Π΄ΠΎ сих ΠΏΠΎΡ€? Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ Π΅Ρ‰Π΅ Π½Π΅ рассмотрСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ внСсти ΡΡΠ½ΠΎΡΡ‚ΡŒ.

НаконСц, ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ написанноС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Нам Π½ΡƒΠΆΠ΅Π½ псСвдоним Ρ‚ΠΈΠΏΠ°, Ρƒ мСня большиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с созданиСм Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ API Π±Π΅Π· псСвдонима Ρ‚ΠΈΠΏΠ°, Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΌΠ½Π΅ приходится ΠΏΠΈΡΠ°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ нравится это Π΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² Π²Π΅Ρ€ΡΠΈΡŽ 1.8, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ·Π΄Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²ΠΏΠ΅Ρ€Π΅Π΄ 1.9.

@Merovius
Π― прямо Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΎ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²Β» ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. Π­Ρ‚ΠΎ мСняСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр, Π² pkg duplicate нСкоторая информация привязана ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
Если ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ.

@kataras это Π½Π΅ совсСм Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ докумСнтация ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, просто опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ слСдуСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ. Насколько я Ρ†Π΅Π½ΡŽ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ псСвдонима, я опасаюсь, Ρ‡Ρ‚ΠΎ люди Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ просто это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

@atdiar Π΅Ρ‰Π΅ Ρ€Π°Π·, поТалуйста, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΠ· исходного коммСнтария ΠΈ обсуТдСния. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ - основная Π·Π°Π΄Π°Ρ‡Π° этой Ρ‚Π΅ΠΌΡ‹. Если Π²Ρ‹ Π½Π΅ чувствуСтС, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ Расса Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ваши ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΡ€ΠΎΡΡŒΠ±Π° ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΅Π³ΠΎ объяснСниС вас Π½Π΅ устраиваСт. :)

@kataras Π₯отя я Π»ΠΈΡ‡Π½ΠΎ согласСн, я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, просто ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, насколько Π²Π°ΠΆΠ½ΠΎΠΉ ΠΌΡ‹ считаСм эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. НСобходим конструктивный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΡΡ‚ΡŒ ΠΎΠ·Π°Π±ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ людСй. :)

@Merovius Π― ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° ΠΌΠΎΠΉ вопрос. Π”ΡƒΠΌΠ°ΡŽ, я Π±Ρ‹Π» достаточно ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½Π΅Π½. Π­Ρ‚ΠΎ связано с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, которая помСшала Π½Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ псСвдонима.

@atdiar Π―, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π΅ понимаю. Π’Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π° сломаСт Π²Π΅Ρ‰ΠΈ; ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΎΠ»ΠΎΠΌΠΎΠΊ ΠΏΡƒΡ‚Π΅ΠΌ постСпСнного восстановлСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ псСвдоним, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старый Ρ‚ΠΈΠΏ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ старый Ρ‚ΠΈΠΏ. Π― Π½Π΅ понимаю, ΠΊΠ°ΠΊ вашС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ "ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹" Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΈ этих прСдполоТСниях. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ сомнСнию прСдполоТСния, это ΡƒΠΆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ.

Π― Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ понимаю, ΠΊΠ°ΠΊ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π²ΠΎΠ΄Ρƒ псСвдонимов Π² 1.8, связаны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сказали. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ выпуски, насколько ΠΌΠ½Π΅ извСстно, - это # ​​17746 ΠΈ # 17784. Если Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ встраивания (которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ истолкована ΠΊΠ°ΠΊ относящаяся ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°ΠΌ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, хотя я Π½Π΅ согласСн), Ρ‚ΠΎ ΠΎΠ½Π° рассматриваСтся Π² Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ (хотя, см. Π’Ρ‹ΡˆΠ΅, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ заслуТиваСт Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ обсуТдСния) ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π½Π΅ Π²Π΅Ρ€ΠΈΡ‚Π΅ Π² это.

Π˜Ρ‚Π°ΠΊ, ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅, Π½ΠΎ Π½Π΅Ρ‚, Π²Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ достаточно ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹. Π£ вас Π΅ΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ для Β«Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, которая помСшала Π½Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ псСвдониму», ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, которая относится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ упомянули Π΄ΠΎ сих ΠΏΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ? ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ привСсти ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сбоСв, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для этого восходящСго ΠΏΠΎΡ‚ΠΎΠΊΠ°; Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠ½ ломаСтся ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ прСдлагаСтся)? Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹, Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ сначала ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΡ….

@Merovius Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ происходит Π² случаС Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… зависимостСй, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈΠ· этих зависимостСй смотрит Π½Π° reflection.Type.PkgPath ()?
Π­Ρ‚ΠΎ Ρ‚Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ встраивании.

@atdiar МнС ΠΎΡ‡Π΅Π½ΡŒ Таль, Π½ΠΎ я Π½Π΅ понимаю, насколько это понятноС бСспокойство Π² свСтС обсуТдСния Π² этой Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ ΠΎ Ρ‡Π΅ΠΌ это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅. БСйчас я Π²Ρ‹ΠΉΠ΄Ρƒ ΠΈΠ· этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ подтяТки ΠΈ Π΄Π°ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ вашС Π²ΠΎΠ·Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ.

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΠ΅Ρ€Π΅Ρ„Ρ€Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΊΡ€Π°Ρ‚ΠΊΠΎ:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² равСнствС Ρ‚ΠΈΠΏΠΎΠ², учитывая Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ТСстко ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ своС собствСнноС мСстополоТСниС.
ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ равСнство Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ ΠΈ провСряСтся Π²ΠΎ врСмя выполнСния, я Π½Π΅ понимаю, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹.

Π― просто ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования «двиТущихся Ρ‚ΠΈΠΏΠΎΠ²Β» ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ мноТСства ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° расстоянии. Аналогичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ.

(Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° указатСля Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ сломало Π±Ρ‹ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ссли эта ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.)

@atdiar ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

@niemeyer

Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Π΄Π²Π° нСзависимых Ρ‚ΠΈΠΏΠ°, ΠΈ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ интСрфСйсом {}, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ
ΠŸΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎ Π΄Π²ΡƒΡ…. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ это послСдним.
ступСнчатый автоматичСский для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Π½ΠΎ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ
ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎ ΠΎΠ± этом.

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ

 func() one

Π° Ρ‚Π°ΠΊΠΆΠ΅

func() two

@Merovius Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ всСх ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅Ρ€ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚Π° с исправлСнным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π΄ΠΈΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅. И я Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ‡Ρƒ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ здСсь ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² вопросы управлСния вСрсиями ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ясным, я Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² прСдлоТСния псСвдонима, Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈΒ», которая ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠΊΠ°Π·Π°Π» свою Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

@jimmyfrasche ΠΎ прСдсказуСмости валидности ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎ псСвдониму:

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° func (t T) M() ΠΈΠ½ΠΎΠ³Π΄Π° дСйствитСлСн, ΠΈΠ½ΠΎΠ³Π΄Π° нСдСйствитСлСн. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ люди Π½Π΅ слишком часто выходят Π·Π° эти Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. https://play.golang.org/p/bci2qnldej. Π’ любом случаС это Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² список _ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ…_ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Как ΠΈ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ограничСния, это добавляСт слоТности, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ эту ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

@Merovius , ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ встраиваниС ΠΈΠΌΠ΅Π½:

Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ситуация Π½Π΅ идСальна. Однако, Ссли Ρƒ мСня Π΅ΡΡ‚ΡŒ кодовая Π±Π°Π·Π°, полная ссылок Π½Π° io.ByteBuffer, ΠΈ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π² bytes.Buffer, Ρ‚ΠΎΠ³Π΄Π° я Ρ…ΠΎΡ‡Ρƒ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ

package io
type ByteBuffer = bytes.Buffer

_Π±Π΅Π· обновлСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ссылок Π½Π° io.ByteBuffer. Если всС мСста, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ встроСн io.ByteBuffer, автоматичСски ΠΌΠ΅Π½ΡΡŽΡ‚ имя поля Π½Π° Buffer Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½Ρ‹ опрСдСлСния Ρ‚ΠΈΠΏΠ° псСвдонимом, Π·Π½Π°Ρ‡ΠΈΡ‚, я сломал ΠΌΠΈΡ€ ΠΈ постСпСнного восстановлСния Π½Π΅Ρ‚. Напротив, Ссли имя встроСнного io.ByteBuffer ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ являСтся ByteBuffer, Ρ‚ΠΎ использованиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π² Ρ…ΠΎΠ΄Π΅ ΠΈΡ… собствСнного постСпСнного восстановлСния (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько шагов; ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½Π΅ идСально).

ΠœΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ обсуТдали это Π² # 17746. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я Π±Ρ‹Π» сторонником Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ псСвдоним встроСнного io.ByteBuffer Π±Ρ‹Π» Buffer, Π½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΠ» мСня, Ρ‡Ρ‚ΠΎ я ошибался. @jimmyfrasche, Π² частности,

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² вашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ Π² p2. Если p2 Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ встроСнноС ΠΏΠΎΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ByteBuffer Π±Π΅Π· ссылки Π½Π° io.ByteBuffer, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ:

type ByteBuffer = bytes.Buffer

Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ByteBuffer (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ p2.ByteBuffer) вмСсто io.ByteBuffer. Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ идСально, Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ€Π΅ΠΌΠΎΠ½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ.

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ идСально, ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ†Π΅Π»ΠΎΠΌ Π² этом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ рассматриваСтся. ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ встраиваниС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ синтаксис для Β«Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ X ΠΊΠ°ΠΊ имя NΒ». Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ псСвдонимы ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠΎΠ·ΠΆΠ΅. ОбС ΠΈΠ΄Π΅ΠΈ Π°ΠΏΡ€ΠΈΠΎΡ€ΠΈ каТутся Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌΠΈ, ΠΈ ΠΎΠ±Π΅, вСроятно, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ прСдлоТСния ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° основС Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² нСобходимости. Если псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΌ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° отсутствиС псСвдонимов ΠΏΠΎΠ»Π΅ΠΉ станСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ большим прСпятствиСм для ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, это Π±ΡƒΠ΄Π΅Ρ‚ прогрСсс!

(/ cc @neild ΠΈ @bcmills)

@atdiar , Π΄Π°, это ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ рСфлСксия Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ насквозь ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ измСнСния, ΠΈ Ссли ΠΊΠΎΠ΄ зависит ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² рСфлСксии, ΠΎΠ½ сломаСтся. Как ΠΈ Π² случаС с встраиваниСм, ΠΎΠ½ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ситуации со встраиваниСм, Ρƒ мСня Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠΎΠ΄ Π½Π΅ слСдуСт ΠΏΠΈΡΠ°Ρ‚ΡŒ с использованиСм отраТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ чувствитСлСн ΠΊ этим дСталям.

@rsc Π― ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρƒ: Π°) Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ встраиваниС ΠΊΠ°ΠΊ псСвдонима, Ρ‚Π°ΠΊ ΠΈ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π² ΠΎΠ΄Π½Ρƒ структуру (для прСдотвращСния двусмыслСнности ΠΎΡ‚ b), b) Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ»Π΅ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Π² исходном ΠΊΠΎΠ΄Π΅, c) Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π² сгСнСрированной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ / ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ‚.ΠΏ. (Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ).

Π― Π±Ρ‹ сказал, ΠΌΠ°Ρ…Π½ΡƒΠ² Ρ€ΡƒΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΌΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я пытался ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для случая, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ; ΠΈ Π»ΠΈΡ‡Π½ΠΎ мСня мСньшС Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ полагаСтся Π½Π° ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Π΅ΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ этого Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚.

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½ прямо сСйчас, понимаю Π»ΠΈ я ваш Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ByteBuffer, Π½ΠΎ я Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠΆΡƒΡΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ дня, поэтому Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ дальшС, Ссли я Π½Π°Ρ…ΠΎΠΆΡƒ это Π½Π΅ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, я Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‡Ρƒ :)

@Merovius Π― Π΄ΡƒΠΌΠ°ΡŽ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ простыС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ ΠΌΡ‹

Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (Π±) являСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ…. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² для упомянутого Ρ€Π°Π½Π΅Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования Β«ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ API ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² нСсколько ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ», Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ псСвдоним, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС нСдоступСн для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ). НадСюсь, ΠΌΡ‹ Π½Π°ΠΊΠΎΠΏΠΈΠΌ большС ΠΎΠΏΡ‹Ρ‚Π°.

@rsc

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ псСвдонимах Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ.
(ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ go Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.)

@Merovius @rsc

Π°) Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ встраиваниС ΠΊΠ°ΠΊ псСвдонима, Ρ‚Π°ΠΊ ΠΈ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π² ΠΎΠ΄Π½Ρƒ структуру

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях это ΡƒΠΆΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΈΠ·-Π·Π° способа взаимодСйствия внСдрСния с Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². (Если для встроСнного Ρ‚ΠΈΠΏΠ° установлСн нСпустой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ вызываСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ смоТСт ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: https://play.golang.org/p/XkaB2a0_RK.)

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ явного ΠΏΡ€Π°Π²ΠΈΠ»Π°, Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ встраиваниС, каТСтся, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² нСбольшом подмноТСствС случаСв; ΠΌΠ½Π΅ каТСтся, Π½Π΅ стоит слоТностСй.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ вмСсто этого Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΊ псСвдонимам Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°ΠΊ ΠΊ алгСбраичСским Ρ‚ΠΈΠΏΠ°ΠΌ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ псСвдонимы для Π½Π°Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ эквивалСнт пустого интСрфСйса с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя компиляции Π² качСствС бонуса, Π°-ля

type Stringeroonie = {string,fmt.Stringer}

@ j7b

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ вмСсто этого Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°ΠΊ алгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ псСвдонимы для Π½Π°Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ сСмантичСски ΠΈ структурно эквивалСнтны исходному Ρ‚ΠΈΠΏΡƒ. АлгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ: Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС ΠΎΠ½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° для Ρ‚Π΅Π³ΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ². (Π’ΠΈΠΏΡ‹ интСрфСйсов Go ΡƒΠΆΠ΅ нСсут эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, Π½ΠΎ структуры ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ нСинтСрфСйсныС Ρ‚ΠΈΠΏΡ‹ - Π½Π΅Ρ‚.)

@bcmills

Π­Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ рассуТдСниСм, Π½ΠΎ я Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ псСвдоним A Ρ‚ΠΈΠΏΠ° T эквивалСнтСн объявлСнию A ΠΊΠ°ΠΊ interface {} ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ компилятору ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° A Π² T Π² областях, Π³Π΄Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° A. , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠ°ΠΊ я Π΄ΡƒΠΌΠ°Π», Π±ΡƒΠ΄Π΅Ρ‚ Π² основном Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ Π²ΠΎ врСмя компиляции ΠΈ создаст основу для управляСмых компилятором псСвдотипов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Π»Π³Π΅Π±Ρ€Π°ΠΈΠΊΡƒ, с использованиСм синтаксиса type T = , ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠ°ΠΊ нСизмСняСмыС ссылки, Π²ΠΎ врСмя компиляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ касаСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, это Π±Ρ‹Π» Π±Ρ‹ просто интСрфСйс {} "ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ".

НСдостатки Π² этом ΠΎΠ±Ρ€Π°Π·Π΅ мыслСй, вСроятно, Π±Ρ‹Π»ΠΈ Π±Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ нСвСТСства, ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я Π½Π΅ Π² состоянии ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ практичСскоС Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, я счастлив ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ это Π½Π΅ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ΅ ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ.

@ j7b Π”Π°ΠΆΠ΅ Ссли ADT являСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ постСпСнного Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π°, ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ свои собствСнныС; Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ‡Π»Π΅Π½Ρ‹ ADT Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ зависимостСй. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹, ΠΏΠΎ сути, создадитС большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚Π΅.

Π’Π°ΡˆΠ° идСя ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² интСрфСйс {} ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Ρ‚ΠΈΠΏΠΎΠ² Π±ΠΎΠ»Π΅Π΅ высокого порядка, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ []interface{} . И Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π²Ρ‹ потСряСтС ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон go, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ вмСсто этого Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ java-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽΡΡ Π² ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ всСго.

ADT здСсь Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

@Merovius Π― ΠΏΠΎΡ‡Ρ‚ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Ссли конструкция алгСбраичСского Ρ‚ΠΈΠΏΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Ρ‹Π²Π°Π»ΠΎΡΡŒ Π±Ρ‹ с Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого), это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, этот интСрфСйс {} ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ прокси для Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ‹Π±ΠΎΡ€Π°, управляСмой компилятором. описан, ΠΈ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, насколько Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π΅Π½ ΠΌΠ°ΠΊΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ опрСдСляСтС Ρ‚ΠΈΠΏΡ‹ Β«Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка», Ρ‚ΠΈΠΏ - это просто Ρ‚ΠΈΠΏ, Ссли ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн, Π° [] interface {} - это просто Ρ‚ΠΈΠΏ.

Помимо всСго этого, я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ type T = ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятными ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ способами, ΠΏΠΎΠΌΠΈΠΌΠΎ пСрСимСнования, алгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ ΠΈ общСдоступныС нСизмСняСмыС ссылки каТутся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ прилоТСниями, поэтому я надСюсь, Ρ‡Ρ‚ΠΎ Π² спСцификации Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ этот синтаксис. ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΌΠ΅Ρ‚Π° ΠΈΠ»ΠΈ псСвдотип, управляСмый компилятором, ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС способы использования управляСмого компилятором Ρ‚ΠΈΠΏΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ синтаксис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»ΡƒΡ‡ΡˆΠ΅ всСго Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ это использованиС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π½Π°Π±ΠΎΡ€Π΅ глобально Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… слов ΠΏΡ€ΠΈ использовании Π² качСствС ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ type A = alias Type Π±ΡƒΠ΄Π΅Ρ‚ ясным ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌ.

@ j7b

Помимо всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ T = ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятными ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ способами, ΠΏΠΎΠΌΠΈΠΌΠΎ пСрСимСнования,

Π― ΠΎΡ‡Π΅Π½ΡŒ надСюсь, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚. Go сСгодня (Π² основном) Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»Π΅Π½, ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ этой ΠΎΡ€Ρ‚ΠΎΠ³ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ - это Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

БСгодня Π² Go ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ T ΠΊΠ°ΠΊ type T def , Π³Π΄Π΅ def - это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Если Π±Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ алгСбраичСскиС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ объСдинСния), я Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π», Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ этому синтаксису, Π° Π½Π΅ синтаксису для псСвдонимов Ρ‚ΠΈΠΏΠΎΠ².

МнС нравится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ зрСния (Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ) псСвдонимов Ρ‚ΠΈΠΏΠΎΠ², которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставлСниС ΠΎΠ± Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… использования, ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°:

Π”Π°Π²Π°ΠΉΡ‚Π΅ вСрнСмся Π½Π° ΠΌΠ³Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π½Π°Π·Π°Π΄ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… объявлСний старых Ρ‚ΠΈΠΏΠΎΠ² Go Π² Ρ„ΠΎΡ€ΠΌΠ΅ type T <a type> , Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявлСния псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² type A = <a type> .

(Для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ - Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² качСствС получатСля, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС понятиС Ρ‚ΠΈΠΏΠ° класса с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ, ΠΈ поэтому Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π”Π²Π° Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ структурно ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π”Π΅Ρ‚Π°Π»ΠΈ здСсь Π½Π΅ Π²Π°ΠΆΠ½Ρ‹ для этого мыслСнного экспСримСнта.)

Π― ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΌΠΈΡ€Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ пишСм сСйчас: ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ² (псСвдонимов), поэтому Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ, Π° сами Ρ‚ΠΈΠΏΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΈΠΏΠ΅ -бСзопасный способ.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли Π±Ρ‹ Go Π±Ρ‹Π» спроСктирован Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹, вСроятно, Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π² порядкС Π² Ρ†Π΅Π»ΠΎΠΌ.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΌΠΈΡ€Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Ссли ΠΎΠ½ΠΈ структурно ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ (нСзависимо ΠΎΡ‚ названия), ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ нас сСйчас Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ с Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ, Π½Π΅ ΠΏΡ€ΠΎΡΠ²ΠΈΠ»ΠΈΡΡŒ Π±Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ нСобходимости Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ измСнСния языка.

Но Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Go: ΠΌΡ‹ Π½Π΅ смоТСм ввСсти имя для Ρ‚ΠΈΠΏΠ° ΠΈ Π·Π°ΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ. (Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это, ΠΏΠΎ сути, ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ.)

Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования идСя создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ, называСтся Β«Π±Ρ€Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠΌΒ»: ΠΊ Ρ‚ΠΈΠΏΡƒ присваиваСтся Π±Ρ€Π΅Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Π² Modula-3 Π±Ρ‹Π»ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово BRANDED Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TYPE T = BRANDED REF T0 создаст Π½ΠΎΠ²ΡƒΡŽ, Π΄Ρ€ΡƒΠ³ΡƒΡŽ ссылку Π½Π° T0). Π’ Haskell слово new ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ эффСкт.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ Go, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ сСбя Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ, Π½ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ нашСго ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ type MyBuffer = []byte ΠΈ type YourBuffer = []byte ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ случайно Π½Π΅ использовали Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ввСсти Ρ„ΠΎΡ€ΠΌΡƒ брСндирования ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΈΠΌΠ΅Π½Π½ΠΎ для этой Ρ†Π΅Π»ΠΈ. НапримСр, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ type MyBuffer = new []byte ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ type MyBuffer = new YourBuffer с эффСктом, Ρ‡Ρ‚ΠΎ MyBuffer Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ отличаСтся ΠΎΡ‚ YourBuffer.

По сути, это двойная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ сСйчас. Π’Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Go с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ дня ΠΌΡ‹ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Β«Ρ„ΠΈΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈΒ» Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, type T <a type> фактичСски ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ type T = new <a type> .

Подводя ΠΈΡ‚ΠΎΠ³: Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Go ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«Ρ„ΠΈΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈΒ» Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΈ Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ понятия просто ΠΈΠΌΠ΅Π½ΠΈ для Ρ‚ΠΈΠΏΠ° (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ псСвдонимами Ρ‚ΠΈΠΏΠΎΠ²). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΡ€ΠΌΠΎΠΉ, ΠΈ для создания явно Π½ΠΎΠ²ΠΎΠ³ΠΎ, Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Β«Π±Ρ€Π΅Π½Π΄ΠΈΠ½Π³Π°Β».

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΠΎ своСй сути, ΠΈ с псСвдонимами Ρ‚ΠΈΠΏΠΎΠ² ΠΌΡ‹ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ нашли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ±Π°.

@griesemer Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ этой возмоТности являСтся ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ псСвдонима, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΠΈΠ΄Π΅Π°Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³. Π‘ΠΎΡŽΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ слоТныС ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΈΠ·-Π·Π° ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ области дСйствия.

Π’ ΠΎΠ±ΠΎΠΈΡ… прСдлоТСниях мСня Π½Π΅ интСрСсуСт, Π½Π΅ трСбуСтся Π»ΠΈ сотрудничСство ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ имя являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ опрСдСлСния Ρ‚ΠΈΠΏΠ° Π² Go, ΠΊΠ°ΠΊ Π²Ρ‹ объяснили.

Π― совсСм Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это просто идСя, Π½ΠΎ каТСтся, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Если Π±Ρ‹ случайно ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ своСго Ρ€ΠΎΠ΄Π° Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ связанный список, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Π²ΠΎ врСмя связывания ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΈΡ… псСвдонимами, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ. Π‘Ρ€Π΅Π΄Π° выполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π±Π΅Π· ΡƒΡ‰Π΅Ρ€Π±Π° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции.

ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ срСда выполнСния Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСски Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ псСвдонимы для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Ρ‡Π΅Ρ‚ΠΊΠΈΠΌΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ псСвдонимы вводят нСсоотвСтствиС ΠΈΠΌΠ΅Π½ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΡΡ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ написанным ΠΊΠΎΠ΄ΠΎΠΌ).

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡŽ использования псСвдонимов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ конкрСтная история управлСния вСрсиями Π² Ρ†Π΅Π»ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΒ» опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано для ΠΏΠ°ΠΊΠ΅Ρ‚Π° контСкста. Но это совсСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ вопрос.

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², всС ΠΆΠ΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ интСрфСйсам ΠΈ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ°ΠΌ.
Учитывая Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ интСрфСйсом с большим количСством ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, каТСтся, Ρ‡Ρ‚ΠΎ объявлСниС псСвдонима Π΄ΠΎΠ»ΠΆΠ½ΠΎ / ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ сохранСния срСза строк для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° срСзов.

@atdiar Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я дСлаю, ΠΊΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Β«ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ компиляция». Если ΠΏΠ°ΠΊΠ΅Ρ‚ P ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ io ΠΈ Π±Π°ΠΉΡ‚Ρ‹, Ρ‚ΠΎΠ³Π΄Π° всС Ρ‚Ρ€ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпилированы ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ шаги. Однако, Ссли измСняСтся io ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚Ρ‹, Ρ‚ΠΎ P Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ _Π½Π΅_ Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ внСсти измСнСния Π² io ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ P. Π”Π°ΠΆΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° это ΠΏΡ€Π°Π²Π΄Π°. Из-Π·Π° Ρ‚Π°ΠΊΠΈΡ… эффСктов, ΠΊΠ°ΠΊ встраиваниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ API измСнСния Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ io ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ эффСктивный ABI, поэтому P Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ ΡƒΡΡƒΠ³ΡƒΠ±Π»ΡΡŽΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

@ j7d , Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΈΠΏΡ‹ суммы ΠΈΠ»ΠΈ любой Π²ΠΈΠ΄ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π½Π΅Π΅ Π² обсуТдСнии) ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… случаях использования. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ bytes.Buffer ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ io.Reader (Β«Π±ΡƒΡ„Π΅Ρ€ - это Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒΒ» ΠΈΠ»ΠΈ Π² вашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ «строка - это StringeroonieΒ»). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ построСнии Π±ΠΎΠ»Π΅Π΅ слоТных Ρ‚ΠΈΠΏΠΎΠ² с ΠΈΡ… использованиСм. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ этого коммСнтария Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Go, Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± ΠΈΡ… Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ², Π° Π½Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Go Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚. Однако Π² Go Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° (ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²Ρ‹ΠΉ способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ «способ использования Ρ‚ΠΈΠΏΠ°Β») ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅Π½, Ссли ΠΎΠ½ сохраняСт ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ², ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅Π½, Ссли ΠΎΠ½ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅.

ИспользованиС Ρ‚ΠΈΠΏΠ° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ. Func () Buffer "- это" Func () Reader ", ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Buffer ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Reader. ИспользованиС Ρ‚ΠΈΠΏΠ° Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ _Π½Π΅_ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ. Func (Buffer) Π½Π΅ являСтся func (Reader), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ func нуТдаСтся Π² Buffer, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Readers Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ.

ИспользованиС Ρ‚ΠΈΠΏΠ° Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ. Func (Reader) - это func (Buffer), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ func Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Reader, Π° Buffer - это Reader. ИспользованиС Ρ‚ΠΈΠΏΠ° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ _Π½Π΅_ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ. Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚Π΅Π»ΡŒ func () Π½Π΅ являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ func (), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Reader, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ считыватСли Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ ΠΈΡ…, func (Reader) Reader Π½Π΅ являСтся func (Buffer) Buffer, ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Π»ΠΈΠ±ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. (ЕдинствСнная комбинация Π² этих строках, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ func (Reader) Buffer являСтся func (Buffer) Reader.)

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ссли func (X1) X2 являСтся (ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ) func (X3) X4, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ X3 являСтся (ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ) X1, ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ X2 являСтся (ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ) X4. Π’ случаС использования псСвдонима, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ T1 ΠΈ T2 Π±Ρ‹Π»ΠΈ взаимозамСняСмыми, func (T1) T1 являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ func (T2) T2, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли T1 являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ T2 _ ΠΈ T2 являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ T1. Π­Ρ‚ΠΎ Π² основном ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ T1 - это Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ T2, Π° Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ.

Π― использовал Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это каноничСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ), Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС происходит ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами создания слоТных Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ для Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, func () T, ΠΈΠ»ΠΈ <-chan T, ΠΈΠ»ΠΈ map [...] T) ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ для Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, func (T), ΠΈΠ»ΠΈ chan <- T, ΠΈΠ»ΠΈ map [T ] ...) ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ равСнство Ρ‚ΠΈΠΏΠΎΠ² для Π²Π²ΠΎΠ΄Π° + Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, func (T) T, ΠΈΠ»ΠΈ chan T, ΠΈΠ»ΠΈ * T, ΠΈΠ»ΠΈ [10] T, ΠΈΠ»ΠΈ [] T, ΠΈΠ»ΠΈ struct {Field T}, ΠΈΠ»ΠΈ пСрСмСнная Ρ‚ΠΈΠΏΠ° Π’). ЀактичСски, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный случай Π² Go, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², - это Π²Π²ΠΎΠ΄ + Π²Ρ‹Π²ΠΎΠ΄.

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Π±ΡƒΡ„Π΅Ρ€ [] Π½Π΅ являСтся [] Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΌ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² [] Ρ€ΠΈΠ΄Π΅Ρ€Π΅, Π½ΠΎ Π½Π΅ Π² [] Π±ΡƒΡ„Π΅Ρ€Π΅), Π½ΠΈ [] Ρ€ΠΈΠ΄Π΅Ρ€ Π½Π΅ являСтся [] Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· [] Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ», Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° [] Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€).

Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠ· всСго этого состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ восстановлСния ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ T1, Π»ΠΈΠ±ΠΎ T2, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ схСмой, которая Π΄Π΅Π»Π°Π΅Ρ‚ T1 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ T2 (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, ΠΈΠ½Π°Ρ‡Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· пСрСчислСнных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Π±ΡƒΠ΄ΡƒΡ‚ нСдопустимыми.

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ° нСдостаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ постСпСнного восстановлСния ΠΊΠΎΠ΄Π°. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² вводят Π½ΠΎΠ²ΠΎΠ΅ имя для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ T1 = T2, вмСсто ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ относится ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ @iand Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ Π½Π°Π·Π°Π΄ Π½Π΅ΠΊΠΈΡ… «замСняСмых Ρ‚ΠΈΠΏΠΎΠ²Β» ΠΈ, ΠΏΠΎ сути, ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ ΠΎΡ‚Π²Π΅Ρ‚Π° @griesemer с Ρ‚Π΅Ρ… ΠΏΠΎΡ€.

ОбновлСно Ρ€Π΅Π·ΡŽΠΌΠ΅ обсуТдСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. ИзмСнСния:

  • Π£Π΄Π°Π»Π΅Π½ΠΎ TODO, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ сводку обсуТдСния Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΏΠΎΡ…ΠΎΠΆΠ΅, исчСзло.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​сводка обсуТдСния встраивания ΠΈ пСрСимСнования ΠΏΠΎΠ»Π΅ΠΉ.
  • ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β«ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° псСвдонимах» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΈΠ· списка вопросов ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ Π·Π° счСт Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ послСдних ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​сводка обсуТдСния влияния Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​аннотация обсуТдСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​сводка обсуТдСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ², основанных Π½Π° ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°Ρ….

@rsc ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции, ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ касаСтся Ρ‚ΠΎΠ³ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ опрСдСлСниям Ρ‚ΠΈΠΏΠΎΠ² Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ список своих псСвдонимов (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ поддаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°Ρ… ΠΈΠ·-Π·Π° Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ компиляции), ΠΈΠ»ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ псСвдоним Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ построСниС списка ΠΈΠΌΠ΅Π½ псСвдонимов, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Π³Ρ€Π°Ρ„ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, всС связано с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚ΠΈΠΏΠ°, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ°. (ΠΈ ΠΊΠ°ΠΊ ΠΈ Π³Π΄Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ срСда выполнСния ΠΈΠΌΠ΅Π»Π° ΠΊ Π½Π΅ΠΉ доступ).

@atdiar Π’ систСмС Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ списка псСвдонимов. Π‘Ρ€Π΅Π΄Π° выполнСния Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊ Π½Π΅ΠΌΡƒ доступа. ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎ врСмя выполнСния.

@rsc Ага , ΠΈΠ·Π²ΠΈΠ½ΠΈ. Π― застрял с ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ псСвдонима Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΡƒΠΌΠ°Π» ΠΎ псСвдонимС для func (ΠΏΡ€ΠΈ обсуТдСнии псСвдонима для Ρ‚ΠΈΠΏΠΎΠ²). Π’ этом случаС Π±ΡƒΠ΄Π΅Ρ‚ нСсоотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π²ΠΎ врСмя выполнСния.
Π’ этом случаС использованиС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² runtime.Frame для вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пСрСосмыслСния.
Π—Π°Π±ΡƒΠ΄ΡŒ ΠΎΠ±ΠΎ ΠΌΠ½Π΅.

@rsc спасибо Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Имя встроСнного поля всС Π΅Ρ‰Π΅ Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°Π΅Ρ‚ мСня; всС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° постоянныС ΠΊΠ»Π°Π΄ΠΆΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ старыС ΠΈΠΌΠ΅Π½Π°. Π₯отя основная ΠΌΡ‹ΡΠ»ΡŒ Π² этом ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ , Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это частный случай пСрСимСнования ΠΏΠΎΠ»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠ±Π΅ΠΆΠ΄Π°Π΅Ρ‚ мСня Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ (ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ) ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π˜ΠΌΠ΅Π΅Ρ‚ Π»ΠΈ смысл ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ вопрос для запроса / прСдлоТСния / обсуТдСния для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ пСрСимСнования ΠΏΠΎΠ»Π΅ΠΉ для постСпСнного восстановлСния (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, адрСсованного Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ выпускС go)?

@Merovius , я согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ постСпСнноС исправлСниС ΠΊΠΎΠ΄Π° для пСрСимСнования ΠΏΠΎΠ»Π΅ΠΉ выглядит ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ это обсуТдСниС, ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. На самом Π΄Π΅Π»Π΅, я Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ.

ВСрнулся Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ. Дискуссия Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ сошлась. Π”Π°ΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ обсуТдСния Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ Π½Π°Π·Π°Π΄ Π±Ρ‹Π»ΠΎ довольно Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ:

  • ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ псСвдонима Ρ‚ΠΈΠΏΠ° ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅,
    ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ рСализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Π° для тСстирования Π² Π½Π°Ρ‡Π°Π»Π΅ Go 1.9 (1 фСвраля).
  • создайтС Π²Π΅Ρ‚ΠΊΡƒ dev.typealias, Ρ‡Ρ‚ΠΎΠ±Ρ‹ CL ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сСйчас (ΡΠ½Π²Π°Ρ€ΡŒ) ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ с master Π² Π½Π°Ρ‡Π°Π»Π΅ Go 1.9.
  • ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ сохранСнии псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² Π² Π½Π°Ρ‡Π°Π»Π΅ Β«Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΊΠΈΒ» Go 1.9 (ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… псСвдонимов Π² Ρ†ΠΈΠΊΠ»Π΅ Go 1.8).

+1

Π― Ρ†Π΅Π½ΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ обсуТдСния этого измСнСния. Допустим, это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Π‘Π΅Π· сомнСния, это станСт скорСС второстСпСнной Π΄Π΅Ρ‚Π°Π»ΡŒΡŽ языка, Ρ‡Π΅ΠΌ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ добавляСт слоТности языку ΠΈ инструмСнтам, Π½Π΅ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΈΡ… фактичСской частотС использования. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ повСрхности, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ язык ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ излишняя ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ - это Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΈ я Ρ€Π°Π΄, Ρ‡Ρ‚ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ дискуссий.

@Merovius : Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΅Π³ΠΎ сообщСния! Π― Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² этом ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ я Π²Ρ‹Ρ€Π°Π·ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ скСптицизм ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ языка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ инструмСнты, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ инструмСнт gorename .

@ jcao219 Об этом ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, я Π½Π΅ ΠΌΠΎΠ³Ρƒ быстро Π½Π°ΠΉΡ‚ΠΈ это здСсь. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ обсуТдаСтся Π² исходной Π²Π΅Ρ‚ΠΊΠ΅ для ΠΎΠ±Ρ‰ΠΈΡ… псСвдонимов # 16339 ΠΈ связанных Π½ΠΈΡ‚Π΅ΠΉ golang-nut. Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅: этот Π²ΠΈΠ΄ инструмСнтов касаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π° Π½Π΅ ΠΊΠ°ΠΊ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ измСнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, вносятся Π»ΠΈ измСнСния инструмСнтом ΠΈΠ»ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² настоящСС врСмя Π½Π΅ сущСствуСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠΈΠ»ΠΈ Π±Ρ‹ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄ (исходный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ связанный с Π½ΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² -Π³Π»ΡƒΠ±ΠΈΠ½Π°).

Для Π±ΠΎΠ»Π΅Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… инструмСнтов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² инструмСнт go ΠΈ Ρ‚.ΠΏ.) исходный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ обращаСтся ΠΊ этому ΠΏΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Β«ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ это Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнтария ΠΈΠ»ΠΈ компилятора вмСсто измСнСния языка?Β».

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ скаТСм, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. Π‘Π΅Π· сомнСния, это станСт скорСС второстСпСнной Π΄Π΅Ρ‚Π°Π»ΡŒΡŽ языка, Ρ‡Π΅ΠΌ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Π’Ρ‹Ρ€Π°ΠΆΠ°ΡŽ сомнСниС. :) НС ΡΡ‡ΠΈΡ‚Π°ΡŽ это ΠΏΡ€Π΅Π΄Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΌ.

@Merovius

Π’Ρ‹Ρ€Π°ΠΆΠ°ΡŽ сомнСниС. :) НС ΡΡ‡ΠΈΡ‚Π°ΡŽ это ΠΏΡ€Π΅Π΄Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΌ.

Π”ΡƒΠΌΠ°ΡŽ, я ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² основном Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Go с большим количСством зависимых ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это приносит ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ являСтся экспСртом ΠΏΠΎ Go. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ½ прСдставляСт ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов Go. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт случай пСрСимСнования Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½, Π½ΠΎ СстСствСнныС ΠΈΠΌΠ΅Π½Π° Ρ‚ΠΈΠΏΠΎΠ² Go ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ слишком Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ слоТныС.

Как ΠΈ Π² случаС с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ‚ΠΎΡ‡Π΅ΠΊ, для ΡƒΡ‡Π΅Π±Π½Ρ‹Ρ… пособий ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒ свои упоминания ΠΎΠ± этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ заявлСниСм ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… использования.

НапримСр, скаТСм, я Ρ…ΠΎΡ‚Π΅Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ "github.com/gonum/graph/simple".DirectedGraph" , ΠΈ я Ρ…ΠΎΡ‚Π΅Π» ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΌΡƒ псСвдоним digraph Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ simple.DirectedGraph , это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования? Или слСдуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ нСобоснованно Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, созданными Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ, ΠΊΠ°ΠΊ protobuf?

@ jcao219 , Ρ€Π΅Π·ΡŽΠΌΠ΅ обсуТдСния Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части этой страницы Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° ваши вопросы. Π’ частности, см. Π­Ρ‚ΠΈ Ρ€Π°Π·Π΄Π΅Π»Ρ‹:

  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ это Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ инструмСнтария ΠΈΠ»ΠΈ компилятора вмСсто измСнСния языка?
  • КакиС Π΅Ρ‰Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ псСвдонимы?
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ (ΠΎΠ±Ρ‰ΠΈΠ΅ примСчания Π² Π½Π°Ρ‡Π°Π»Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π°)

Π§Ρ‚ΠΎ касаСтся вашСго Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅Π³ΠΎ мнСния ΠΎΠ± экспСртах Go ΠΈ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Go, Ρ‚ΠΎ явная Ρ†Π΅Π»ΡŒ Go - ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π·Π°Ρ… ΠΊΠΎΠ΄Π°. Π―Π²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ экспСртом, это Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ€Π΅ Π½Π΅ связано с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅. (Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π°Ρ‡Π°Ρ‚Ρ‹ΠΉ ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ придСтся ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ​​работу.)

Π₯ΠΎΡ€ΠΎΡˆΠΎ, исходя ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΎΠ΄ΡƒΡˆΠΈΡ / молчания здСсь, я (ΠΊΠ°ΠΊ я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π» Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ Π² https://github.com/golang/go/issues/18130#issuecomment-268614964) ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΈ создам Π²Π΅Ρ‚ΠΊΡƒ dev.typealias. .

Π’ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΌ Ρ€Π΅Π·ΡŽΠΌΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» «КакиС Π΅Ρ‰Π΅ вопросы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ псСвдонимам Ρ‚ΠΈΠΏΠΎΠ²?Β» ΠšΠ°ΠΊΠΎΠ²Ρ‹ ΠΏΠ»Π°Π½Ρ‹ ΠΏΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ объявлСно принятым?

CL https://golang.org/cl/34986 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/34987 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/34988 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

@ulikunitz ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (всС эти Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ T1 = T2):

  1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Π³ΠΎΠ΄ΠΎΠΊ. ДокумСнтация ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ описываСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² godoc. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΌΡ‹ смоТСм ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π½ΡƒΠΆΠ½Π° Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅Ρ‚.
  2. МоТно Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ², Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… псСвдонимом? Π΄Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚: Β«ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ T1 - это просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ T2, Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ собствСнного Π½Π°Π±ΠΎΡ€Π° объявлСний ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВмСсто этого Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² T1 Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ T2. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ испытания Π½Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². использованиС T1 Π² качСствС Ρ‚ΠΈΠΏΠ° получатСля, ΠΏΡ€ΠΈ условии использования T2 Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ объявлСнии, Π±Ρ‹Π»ΠΎ Π±Ρ‹ допустимым ".
  3. Если псСвдонимы для псСвдонимов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ псСвдонимов? Π‘Π΅Π· Ρ†ΠΈΠΊΠ»ΠΎΠ². ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ докумСнтация: Β«Π’ объявлСнии псСвдонима Ρ‚ΠΈΠΏΠ°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ объявлСния Ρ‚ΠΈΠΏΠ°, T2 Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ, прямо ΠΈΠ»ΠΈ косвСнно, Π½Π° T1Β».
  4. Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ псСвдонимы ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСэкспортированныС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹? Π΄Π°. ДокумСнтация ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ: «НСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ T2: это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ, Π½ΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡΡΡŒ, Ρ‚ΠΈΠΏΡ‹, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²Β».
  5. Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ встраиваСтС псСвдоним (ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ встроСнному полю)? Имя взято ΠΈΠ· псСвдонима (Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅). ДокумСнтация ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ: https://golang.org/design/18130-type-alias#effect -on-embedding.
  6. Доступны Π»ΠΈ псСвдонимы Π² Π²ΠΈΠ΄Π΅ символов Π²ΠΎ встроСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅? НСт. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π½Π°Ρ докумСнтация: Β«ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΠΎΠ² Π² основном Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ Π²ΠΎ врСмя выполнСния». (ΠžΡ‚Π²Π΅Ρ‚ слСдуСт ΠΈΠ· этого, Π½ΠΎ явно Π½Π΅ вызываСтся.)
  7. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ строки ldflags: Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ обратимся ΠΊ псСвдониму? ПсСвдонимов var Π½Π΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ этого Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚.

CL https://golang.org/cl/35091 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35092 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35093 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

@rsc Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ:

package a

import "b"

type T1 = b.T2

Насколько я понимаю, T1 ΠΏΠΎ сути ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ b.T2 ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, являСтся Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. Однако ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ T1 рСэкспортируСтся Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ a. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ интСрпрСтация?

@ulikunitz , это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

T1 ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ b.T2. Π­Ρ‚ΠΎ просто Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя. ЭкспортируСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ (Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚).

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ @griesemer явным: Π΄Π°, T1 экспортируСтся ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° a (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это T1, Π° Π½Π΅ t1).

CL https://golang.org/cl/35099 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35100 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35101 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35102 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35104 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35106 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35108 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35120 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35121 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35129 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35191 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35233 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35268 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35269 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35670 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35671 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35575 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35732 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35733 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/35831 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

CL https://golang.org/cl/36014 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

Π­Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² мастСрС, Π΄ΠΎ открытия Go 1.9. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с мастСром ΠΈ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ. Бпасибо.

ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ с Π½ΠΎΠΌΠ΅Ρ€Π° 18893

package main

import (
        "fmt"
        "q"
)

func main() {
        var a q.A
        var b q.B // i'm a named unnamed type !!!

        fmt.Printf("%T\t%T\n", a, b)
}

Π§Ρ‚ΠΎ Ρ‚Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π» ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ?

deadwood(~/src) % go run main.go
q.A     q.B

Π§Ρ‚ΠΎ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ вмСсто этого?

deadwood(~/src) % go run main.go
q.A     []int

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ бСзымянному Ρ‚ΠΈΠΏΡƒ. Π­Ρ‚ΠΎ Π½Π΅ история Β«Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π° ΠΊΠΎΠ΄Π°Β» ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ бСзымянного Ρ‚ΠΈΠΏΠ° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ псСвдонимов для бСзымянных Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ я большС Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ Go ΠΊΠ°ΠΊ просто ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ бСзымянным Ρ‚ΠΈΠΏΠ°ΠΌ. ВмСсто этого я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ

ΠΎ, Ссли это Π½Π΅ псСвдоним, ΠΈ Π² этом случаС Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это _ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ_ бСзымянный Ρ‚ΠΈΠΏ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

И Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ людям Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ

type Any = interface{}

НС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΠΉΡ‚Π΅ псСвдонимы бСзымянных Ρ‚ΠΈΠΏΠΎΠ².

@davecheney

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ бСзымянного Ρ‚ΠΈΠΏΠ° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π½Π΅Ρ‚ истории ΠΎ «исправлСнии ΠΊΠΎΠ΄Π°Β».

НС ΠΏΡ€Π°Π²Π΄Π°. Π§Ρ‚ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° бСзымянный ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚? Π¨Π°Π³ 1 - Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ псСвдоним; шаг 2 - ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, для использования Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°; Π¨Π°Π³ 3 - ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ псСвдоним.

(Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это сСгодня, Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄. Π”Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.)

И Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ людям Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
type Any = interface{}

Π›ΡŽΠ΄ΠΈ ΡƒΠΆΠ΅ сСгодня ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ type Any interface{} . Какой Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ€Π΅Π΄ приносят Π² этом случаС псСвдонимы?

Π›ΡŽΠ΄ΠΈ ΡƒΠΆΠ΅ сСгодня ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Any interface {}. Какой Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ€Π΅Π΄ приносят Π² этом случаС псСвдонимы?

Π― Π½Π°Π·Π²Π°Π» это Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ. type Any interface{} , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠΉ_ ΠΊΠΎΠ΄, Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅, это ΠΈΠΌΠ΅Π΅Ρ‚ для Π½Π΅Π³ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС смысла.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, _всС_ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ‹Ρ‚ чтСния ΠΊΠΎΠ΄Π° Go ΠΈ инстинктивно Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ interface{} ΠΊΠ°ΠΊ своС Π»ΠΈΡ†ΠΎ Π² Π·Π΅Ρ€ΠΊΠ°Π»Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Any , Object , T ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΈΡ… с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ, ΠΊΠ°ΠΊ type Any interface{} , type Any map[interface{}]interface{} , type Any struct{} для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ согласны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ спСцифичСскиС для ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠΌΠ΅Π½Π° для Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄ΠΈΠΎΠΌ Go ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° удобочитаСмости?

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ согласны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ спСцифичСскиС для ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠΌΠ΅Π½Π° для Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄ΠΈΠΎΠΌ Go ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° удобочитаСмости?

Π― согласСн, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ рассматриваСмый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (бСзусловно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частоС Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ этого antipatterrn, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я столкнулся) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π±Π΅Π· псСвдонимов, я Π½Π΅ понимаю, ΠΊΠ°ΠΊ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ относится ΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ для псСвдонимов Ρ‚ΠΈΠΏΠΎΠ².

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π°Π½Ρ‚ΠΈ-шаблон Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π±Π΅Π· псСвдонимов Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ программистов Go ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Π΅Π³ΠΎ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы для бСзымянных Ρ‚ΠΈΠΏΠΎΠ².

И, фактичСски, псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ постСпСнноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ этого Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° ΠΈΠ· ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π·, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ ΡƒΠΆΠ΅ сущСствуСт.

Π Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

package antipattern

type Any interface{}  // not an alias

type Widget interface{
  Frozzle(Any) error
}

func Bozzle(w Widget) error {
  …
}

БСгодня ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ antipattern.Bozzle застряли Π±Ρ‹ ΠΏΡ€ΠΈ использовании antipattern.Any Π² своих рСализациях Widget , ΠΈ Π½Π΅Ρ‚ способа ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ antipattern.Any с постСпСнным восстановлСниСм. Но с псСвдонимами Ρ‚ΠΈΠΏΠΎΠ² Π²Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΏΠ°ΠΊΠ΅Ρ‚Π° antipattern ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

// Any is deprecated; please use interface{} directly.
type Any = interface{}

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ постСпСнно ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ с Any Π½Π° interface{} , позволяя ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ antipattern Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π― Ρ…ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ оправдания псСвдониму бСзымянных Ρ‚ΠΈΠΏΠΎΠ², поэтому
Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π° этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ
ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

Напротив, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ псСвдонима бСзымянных Ρ‚ΠΈΠΏΠΎΠ² позволяСт Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° Π΄Π²Π°
Ρ„ΠΎΡ€ΠΌΡ‹ этого Π°Π½Ρ‚ΠΈ-ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°.

Π’ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Π³, 2 фСвраля 2017 Π³., 16:34 Π‘Ρ€Π°ΠΉΠ°Π½ Миллс [email protected] написал:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ согласны с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΈΠ΄ΠΈΠΎΠΌ Go ΡΠ²Π»ΡΡŽΡ‚ΡΡ
чистый минус для удобочитаСмости?

Π― согласСн, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ рассматриваСмый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (бСзусловно, самый распространСнный
появлСниС Ρ‚ΠΎΠ³ΠΎ Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я столкнулся) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π·
псСвдонимов, я Π½Π΅ понимаю, ΠΊΠ°ΠΊ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ соотносится с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ
псСвдонимы Ρ‚ΠΈΠΏΠΎΠ².

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π°Π½Ρ‚ΠΈ-шаблон Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π±Π΅Π· псСвдонимов Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ
ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ программистов Go ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ этого, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ,
ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы бСзымянных Ρ‚ΠΈΠΏΠΎΠ².

-
Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ это, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ вас упомянули.
ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° это письмо Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, просмотритС Π΅Π³ΠΎ Π½Π° GitHub
https://github.com/golang/go/issues/18130#issuecomment-276872714 ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ
Π½ΠΈΡ‚ΡŒ
https://github.com/notifications/unsubscribe-auth/AAAcA6BGrFjjTi7eW1BPp7o81XIekbGXks5rYWr-gaJpZM4LBBEL
.

@davecheney Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ имя Π²Ρ€Π΅Π΄Π½ΠΎ. Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ являСтся Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Β«ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠΌΒ» - ΠΎΠ± этом ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Π΄ΠΈΠ·Π°ΠΉΠ½-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ . На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊ Ρ‡Π΅ΠΌΡƒ это нас ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚.

Π’ качСствС ΠΊΠΎΠ½Ρ‚Ρ€ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ общСдоступныС API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ API Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ (см., НапримСр, https://golang.org/pkg/go/types/#Info ). НаличиС этого явного Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. Но Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ довольно нСприятно ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ; ΠΈ фактичСски Π±ΡƒΠ΄Π΅Ρ‚ прСпятствиСм для удобочитаСмости. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ IntSet Π° Π½Π΅ ΠΎ map[int]struct{} Π±Π΅Π· привязки ΠΊ этому ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ IntSet ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, Π½Π° ΠΌΠΎΠΉ взгляд, являСтся плюсом. Π’ΠΎΡ‚ Π³Π΄Π΅ type IntSet = map[int]struct{} ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

НаконСц, я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ https://github.com/golang/go/issues/18130#issuecomment -268411811, Ссли Π²Ρ‹ Π΅Π³ΠΎ пропустили. ОбъявлСния Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с использованиСм = Π½Π° самом Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ объявлСниСм "элСмСнтарного" Ρ‚ΠΈΠΏΠ°, ΠΈ я Ρ€Π°Π΄, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ появились Π² Go.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, type intSet = map[int]struct{} (Π½Π΅ экспортируСтся) Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠΈΠΌ способом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдонимы бСзымянного Ρ‚ΠΈΠΏΠ°, Π½ΠΎ это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ CodeReviewComments ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ программирования, Π° Π½Π΅ Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, %T - ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для просмотра Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΈΠ»ΠΈ исслСдовании систСмы Ρ‚ΠΈΠΏΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹ΠΉ Π³Π»Π°Π³ΠΎΠ», Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ псСвдоним? q.B = []int Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ @davecheney .

@nathany Как Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ этот Π³Π»Π°Π³ΠΎΠ»? Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ псСвдонимС отсутствуСт Π²ΠΎ врСмя выполнСния. (Π§Ρ‚ΠΎ касаСтся ΠΏΠ°ΠΊΠ΅Ρ‚Π° reflect , псСвдоним _ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°_, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ Π½Π°Π·Π½Π°Ρ‡Π΅Π½.)

@bcmills Π― ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ ... 😞

Π― полагаю, Ρ‡Ρ‚ΠΎ инструмСнты статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с псСвдонимами, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.

2 фСвраля 2017 Π³. Π² 17:01 «Натан Π―Π½Π³ΠΌΠ°Π½Β» [email protected] написал:

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅,% T - ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для просмотра Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ
систСма Ρ‚ΠΈΠΏΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»Π°Π³ΠΎΠ» ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°,
Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ псСвдоним? qB = [] int Π² @davecheney
https://github.com/davecheney , ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ запроса ΠΊ Π³ΡƒΡ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° этот вопрос.
вопрос:

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ псСвдонимами Π²ΠΎ всСм GOPATH (ΠΈΠ»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅) для
этот Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС?

МСня Π½Π΅ бСспокоит Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ псСвдонимами бСзымянных Ρ‚ΠΈΠΏΠΎΠ², Π½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅
Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ псСвдонимы ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ бСзымянного Ρ‚ΠΈΠΏΠ°.

@davecheney Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π» Β«ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡΒ» Ρ€Π΅Π·ΡŽΠΌΠ΅ обсуТдСния Π²Π²Π΅Ρ€Ρ…Ρƒ. Как ΠΈ всС ограничСния, наша общая позиция Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ограничСния Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ слоТности (см. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ Π²Ρ‹ΡˆΠ΅), ΠΈ Π½Π°ΠΌ, вСроятно, потрСбуСтся ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ фактичСскиС Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСнного Π²Ρ€Π΅Π΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ввСсти ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. НСдостаточно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ способ обучСния Π³ΠΎ: Π»ΡŽΠ±Ρ‹Π΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ вносим Π² язык, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ измСнСния способа обучСния Π³ΠΎ.

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π² спискС рассылки, ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ объяснСния.

@minux , ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π» @bcmills , информация ΠΎ псСвдонимах Π½Π΅ сущСствуСт Π²ΠΎ врСмя выполнСния (ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ для Π΄ΠΈΠ·Π°ΠΉΠ½Π°). НСвозмоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«% T, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ псСвдоним».

2 фСвраля 2017 Π³., 20:33, "Russ Cox" [email protected] написал:

@minux https://github.com/minux , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ @bcmills
https://github.com/bcmills ΡƒΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ информация ΠΎ псСвдонимС Π½Π΅ сущСствуСт
Π²ΠΎ врСмя выполнСния (ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ для Π΄ΠΈΠ·Π°ΠΉΠ½Π°). НСт возмоТности
Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«% T, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ псСвдоним».

Π― ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π΅ΠΆΠΈΠΌ запроса Go guru (https://golang.org/x/tools/cmd/guru)
для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ сопоставлСния псСвдонимов, основанного Π½Π° статичСском Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, доступна Π»ΠΈ информация псСвдонима Π²ΠΎ врСмя выполнСния ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

@minux , ΠΎ, я понимаю, Π²Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚Π΅ ΠΏΠΎ элСктронной ΠΏΠΎΡ‡Ρ‚Π΅, ΠΈ Github Π΄Π΅Π»Π°Π΅Ρ‚ Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ тСкст ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ написали сами. Π― ΠΎΡ‚Π²Π΅Ρ‡Π°Π» Π½Π° Ρ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°ΠΌΠΈ тСкст Натана Π―Π½Π³ΠΌΠ°Π½Π°, думая, Ρ‡Ρ‚ΠΎ это ваш. Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ.

Π§Ρ‚ΠΎ касаСтся Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ обучСния, я нашСл, Ρ‡Ρ‚ΠΎ информация ΠΎ Π±Ρ€Π΅Π½Π΄ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…, опубликованная @griesemer, довольно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Π°. Бпасибо Π·Π° это.

Объясняя Ρ‚ΠΈΠΏΡ‹ ΠΈ прСобразования Ρ‚ΠΈΠΏΠΎΠ², суслики сначала Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ я Π³ΠΎΠ²ΠΎΡ€ΡŽ ΠΎ псСвдонимС Ρ‚ΠΈΠΏΠ°, вСроятно, ΠΈΠ·-Π·Π° знакомства с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками.

Какой Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π»Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ тСрминология, я ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ (Π±Ρ€Π΅Π½Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ) Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ объявлСниС Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², вСроятно, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ послС ввСдСния byte ΠΈ rune Π² Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ ΠΈΠ»ΠΈ ΡƒΡ‡Π΅Π±Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Однако я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ стрСмлСнии @davecheney Π½Π΅ ΠΏΠΎΠΎΡ‰Ρ€ΡΡ‚ΡŒ

Для type intSet map[int]struct{} ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ map[int]struct{} - это _ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ_ Ρ‚ΠΈΠΏ. Как ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±Π΅ стороны ΠΎΡ‚ type intSet = map[int]struct{} ? ПсСвдоним ΠΈ Ρ‚ΠΈΠΏ с псСвдонимом?

Π§Ρ‚ΠΎ касаСтся %T , ΠΌΠ½Π΅ ΡƒΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ byte ΠΈ rune приводят ΠΊ uint8 ΠΈ int32 , Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Π’ΠΎ всяком случаС, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Π»Π΅Π³Ρ‡Π°Ρ‚ объяснСниС byte ΠΈ rune . ИМО, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с псСвдонимами Ρ‚ΠΈΠΏΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± этом.

@nathany Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ сначала ΠΈΠΌΠ΅Π΅Ρ‚ смысл ввСсти Β«Ρ‚ΠΈΠΏΡ‹ псСвдонимов», хотя я Π±Ρ‹ Π½Π΅ стал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. НСдавно прСдставлСнныС объявлСния "псСвдонимов" - это просто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ объявлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ слСва ΠΈ Ρ‚ΠΈΠΏ справа - это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅, ΠΎΠ½ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π― Π΄Π°ΠΆΠ΅ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ псСвдоним ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ с псСвдонимом (ΠΌΡ‹ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ имя константы псСвдонимом, Π° постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ - константой с псСвдонимом).

ОбъявлСниС Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ (Π½Π΅ псСвдонима) Ρ‚ΠΈΠΏΠ° выполняСт большС Ρ€Π°Π±ΠΎΡ‚Ρ‹: ΠΎΠ½ΠΎ сначала создаСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠ· Ρ‚ΠΈΠΏΠ° справа, Π° Π·Π°Ρ‚Π΅ΠΌ привязываСт ΠΊ Π½Π΅ΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ слСва. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ Ρ‚ΠΈΠΏ справа Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ (ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ). Π­Ρ‚ΠΎ явно Π±ΠΎΠ»Π΅Π΅ слоТная концСпция.

Нам Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этих вновь созданных Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ любого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ имя. И ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, относящиСся ΠΊ Π½ΠΈΠΌ (идСнтификация Ρ‚ΠΈΠΏΠ°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ назначСния, Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ получатСля).

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ это, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡƒΡ‡Π΅Π±Π½ΠΎΠΉ срСдС: ΡˆΡ€ΠΈΡ„Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΌ. ВсС ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ всС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Ρ‹. ЕдинствСнный способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ Ρ‚ΠΈΠΏ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ (Π½Π΅ псСвдоним) объявлСниС Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сначала Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ (копию) Ρ‚ΠΈΠΏΠ° справа ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π°Π½Π΅Π΅ Π½Π΅ использовавшимся Ρ†Π²Π΅Ρ‚ΠΎΠΌ (удаляя старый Ρ†Π²Π΅Ρ‚, Ссли Π΅ΡΡ‚ΡŒ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π² процСссС) ΠΏΠ΅Ρ€Π΅Π΄ привязкой ΠΊ Π½Π΅ΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° слСва. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ (нСявно ΠΈ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎ созданный) Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° (Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ), записанного справа.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту аналогию, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • Π¦Π²Π΅Ρ‚Π½ΠΎΠΉ Ρ‚ΠΈΠΏ всСгда отличаСтся ΠΎΡ‚ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ объявлСниС Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π°Π½Π΅Π΅ Π½Π΅ использовавшийся Ρ†Π²Π΅Ρ‚).
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ².
  • Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ‚ΠΈΠΏΠ° - это Ρ‚ΠΈΠΏ, Π»ΠΈΡˆΠ΅Π½Π½Ρ‹ΠΉ всСго своСго Ρ†Π²Π΅Ρ‚Π°.
    ΠΈ Ρ‚.ΠΏ.

ΠΌΡ‹ Π½Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ имя константы псСвдонимом, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы - константой с псСвдонимом

Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ πŸ‘

Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Π»Π΅Π³Ρ‡Π΅ Π»ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ аналогию Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈ Π½Π΅ΠΎΠΊΡ€Π°ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΎΠ½Π° дСмонстрируСт, Ρ‡Ρ‚ΠΎ сущСствуСт Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ способа ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ / Π±Ρ€Π΅Π½Π΄ΠΎΠ²Ρ‹Π΅ / Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, бСзусловно, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пояснСний. ОсобСнно, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн с использованиСм ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ довольно Ρ‚ΠΎΠ½ΠΊΠΈΡ… различиях.

type intSet map[int]struct{} // a new type with an underlying type map[int]struct{}

type myIntSet intSet // a new type with an underlying type map[int]struct{}

type otherIntSet = intSet // just another name (alias) for intSet, add methods to intSet (only in the same package)

type literalIntSet = map[int]struct{} // just another name for map[int]struct{}, no adding methods

Однако это Π½Π΅ Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΠΎ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, Ρ‡Ρ‚ΠΎ это появится Π² Go 1.9, я ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ 2-Π΅ издания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ½ΠΈΠ³ ΠΏΠΎ Go. πŸ˜‰

Π― рСгулярно ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΊ спСцификации Go Π·Π° принятой Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, поэтому ΠΌΠ½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ Π² ΠΈΡ‚ΠΎΠ³Π΅.

Нам Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ для этих вновь созданных Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ любого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ имя.

НСкоторыС ΠΈΠ΄Π΅ΠΈ:

  • "Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ" ΠΈΠ»ΠΈ "ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²)
  • "ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, это Ρ‚ΠΈΠΏ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²)
  • "Π±Π΅Ρ‚ΠΎΠ½" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π²ΠΎ врСмя выполнСния)
  • "ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€)

@bcmills ΠœΡ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ…, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ…, Ρ„ΠΈΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ…, Π½Π΅ псСвдонимах ΠΈ Ρ‚. Π΄. Ρ‚ΠΈΠΏΠ°Ρ…. Β«ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉΒ» Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ интСрфСйс Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΠΊΡ€Π°ΡˆΠ΅Π½, Π° интСрфСйс являСтся Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ абстрактного Ρ‚ΠΈΠΏΠ°. Β«Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉΒ» Ρ‚Π°ΠΊΠΆΠ΅ каТСтся вводящим Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Β«struct {int}Β» идСнтифицируСтся Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ любой явно (Π½Π΅ псСвдоним) ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

Π― Π±Ρ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»:

  • Β«Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅Β» (Π² контСкстС, Π½Π΅ связанном с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ„Ρ€Π°Π·Π° Β«Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹Β» нСсСт Π² сСбС ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ расовых ΠΏΡ€Π΅Π΄ΡƒΠ±Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ)
  • Β«Π±Π΅Π· псСвдонима» (это сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ†Π΅Π»ΡŒΡŽ псСвдонима ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ Β«ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏΒ»)
  • "ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅" (псСвдонимы Ρ‚ΠΎΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, ΠΎΠ½ΠΈ просто ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ псСвдонимы)

Β«Π€ΠΈΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΉΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: ΠΎΠ½ нСсСт Π² сСбС ΠΊΠΎΠ½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Β«Ρ‚ΠΈΠΏΡ‹ ΠΊΠ°ΠΊ скот», Π½ΠΎ это Π½Π΅ каТСтся ΠΌΠ½Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠ»ΠΎΡ…ΠΈΠΌ.

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΠΎΠΊΠ° каТутся Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ.

Они просты ΠΈ понятны Π±Π΅Π· особого Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ контСкста ΠΈΠ»ΠΈ Π·Π½Π°Π½ΠΈΠΉ. Если Π±Ρ‹ я Π½Π΅ Π·Π½Π°Π» Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ, я Π±Ρ‹, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΈΠΌΠ΅Π» ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚. Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ этого ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ….

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½, это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, Π½ΠΎ ΠΊΠΎΠ½Π½ΠΎΡ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ имя позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… прСпятствий для усвоСния различия.

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎ вСлосипСдС. Π£ Π ΠΎΠ±Π΅Ρ€Ρ‚Π° Π΅ΡΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ CL Π½Π° https://go-review.googlesource.com/#/c/36213/, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ каТСтся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

CL https://golang.org/cl/36213 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

Π― Ρ…ΠΎΡ‡Ρƒ снова ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ вопрос go fix .

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ясно, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Β«ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΒ» псСвдоним. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΠΈ подходящСС для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ история.

ИМО ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ посвящСн двиТущСмуся ΡˆΡ€ΠΈΡ„Ρ‚Ρƒ. НС Ρ…ΠΎΡ‡Ρƒ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ этот вопрос. Наша Ρ†Π΅Π»ΡŒ - ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с своСго Ρ€ΠΎΠ΄Π° измСнСниями интСрфСйса Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Когда ΠΌΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ измСнСнию интСрфСйса, Π½Π΅Π²Π΅Ρ€Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ надССмся, Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π²Π° интСрфСйса (старый ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ) ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ , ΠΈ поэтому ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ «постСпСнноС восстановлСниС ΠΊΠΎΠ΄Π°Β». ΠœΡ‹ надССмся, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ удалят / измСнят использованиС старого.

Π― Π΄ΠΎ сих ΠΏΠΎΡ€ ΡΡ‡ΠΈΡ‚Π°ΡŽ инструмСнт Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ для исправлСния ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΈΠ΄Π΅ΠΈ, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ @ tux21b . НапримСр:

$ cat "$GOROOT"/RENAME
# This file could be used for `go fix`
[package]
x/net/context=context
[type]
io.ByteBuffer=bytes.Buffer

$ go fix -rename "$GOROOT"/RENAME [packages]
# -- or --
# use a standard libraries rename table as default
$ go fix -rename [packages]
# -- or --
# include this fix as default
$ go fix [packages]

ЕдинствСнная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ @rsc отказываСтся ΠΎΡ‚ этого, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ измСнСния ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты. Но я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π½Π΅Π²Π΅Ρ€Π½ΠΎ Π² этом Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС : Ссли Π΅ΡΡ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π΅ имя / ΠΏΡƒΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ x/net/context , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ сначала ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ , Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ говорится, ΠΊΠ°ΠΊ пСрСнСсти ΠΊΠΎΠ΄ Π² Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π½ΠΎ Π½Π΅ ТСстко, Ρ‡Π΅Ρ€Π΅Π· Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ инструмСнты, ΠΊΠΎΠ³Π΄Π° Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Go Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии. Π•ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт: это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΊΠΎΠ΄.

@LionNatsu , я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€Π°Π²Ρ‹, Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ вопрос: Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ соглашСния для ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΊΠΎΠ΄ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° измСнСния API мСханичСским способом? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π° условности. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ выпуск ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅, ΡƒΠΊΠ°Π·Π°Π² Π½Π° этот Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€? Бпасибо.

CL https://golang.org/cl/36691 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

ИмСя это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‡ΠΈΠΊΠ΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΌΠΎΠ³Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ этот ΠΏΠ°ΠΊΠ΅Ρ‚:

package safe

import "unsafe"

type Pointer = unsafe.Pointer

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ значСния unsafe.Pointer Π±Π΅Π· прямого ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° unsafe :

package main

import "safe"

func main() {
    x := []int{4, 9}
    y := *(*int)(safe.Pointer(uintptr(safe.Pointer(&x[0])) + 8))
    println(y)
}

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ докумСнтация ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ объявлСний псСвдонимов Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ это явно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ. Π­Ρ‚ΠΎ Π½Π΅ явно ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ псСвдонима Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π§Ρ‚ΠΎ касаСтся объявлСния псСвдонима, Ρ‚ΠΎ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ для этого являСтся: _ "ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ использованиС псСвдонима для unsafe.Pointer, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ unsafe.Pointer ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ." _ Https://github.com/ golang / go / issues / 16339 # issuecomment -232435361

Π₯отя это ΠΏΡ€Π°Π²Π΄Π°, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ псСвдонима unsafe.Pointer Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ значСния unsafe.Pointer Π±Π΅Π· явного ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° нСбСзопасных.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΄ΠΎ этого прСдлоТСния, ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ safe.Pointer Π² ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ unsafe. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ нСбСзопасности.

@crawshaw , Ρ€Π°Π·Π²Π΅ Ρ‚Ρ‹ Π½Π΅ ΠΌΠΎΠ³ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Ρ€Π°Π½ΡŒΡˆΠ΅?

package safe

import (
  "reflect"
  "unsafe"
)

func Pointer(p interface {}) unsafe.Pointer {
  switch v := reflect.ValueOf(p); v.Kind() {
  case reflect.Uintptr:
    return unsafe.Pointer(uintptr(v.Uint()))
  default:
    return unsafe.Pointer(v.Pointer())
  }
}

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ​​ТС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ отсутствиСм ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ main .

(Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ uintptr -to- Pointer Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, поэтому ΠΎΠ½ΠΎ Π½Π΅ соотвСтствуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Π° unsafe , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ " ΠΎΠ±Π° прСобразования Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ промСТуточная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ° ". Однако я ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° unsafe ΠΈΠ· main , сдСлав использованиС Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ reflect.SliceHeader .)

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ экспорт скрытого нСбСзопасного Ρ‚ΠΈΠΏΠ° - это Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π°ΡƒΠ΄ΠΈΡ‚Ρƒ.

Π”Π°, я Ρ…ΠΎΡ‚Π΅Π» ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ использованиС прямого псСвдонима нСбСзопасно. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ услоТняСт Π°ΡƒΠ΄ΠΈΡ‚ ΠΊΠΎΠ΄Π°, ΠΈ этого достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹, надСюсь, этого Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π».

@crawshaw Богласно ΠΌΠΎΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡŽ, это Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π²Π΅Ρ€Π½ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρƒ нас появилось псСвдонимы Ρ‚ΠΈΠΏΠΎΠ². Допустимо ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

package a

import "unsafe"

type P unsafe.Pointer
package main

import "./a"
import "fmt"

var x uint64 = 0xfedcba9876543210
var h = *(*uint32)(a.P(uintptr(a.P(&x)) + 4))

func main() {
    fmt.Printf("%x\n", h)
}

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ я ΠΌΠΎΠ³Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСбСзопасныС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ a.P Π΄Π°ΠΆΠ΅ Ссли Π½Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° unsafe ΠΈ a.P Π½Π΅ являСтся псСвдонимом. Π­Ρ‚ΠΎ всСгда Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π’Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅?

Π’ΠΈΠ½ΠΎΠ²Π°Ρ‚. Π― Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ это Π½Π΅ сработало. (Π£ мСня создалось Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, примСняСмыС ΠΊ unsafe.Pointer, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° Π΅Π³ΠΎ основС.)

БпСцификация Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ совсСм ясна ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ. Глядя Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ go / types, оказываСтся, Ρ‡Ρ‚ΠΎ моя ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ рСализация Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ unsafe.Pointer , Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ unsafe.Pointer . Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ нашСл # 6326, ΠΊΠΎΠ³Π΄Π° я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» go / types Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с gc.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ слСдуСт Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ это для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ псСвдонимы unsafe.Pointer . Π― Π½Π΅ Π²ΠΈΠΆΡƒ вСской ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этого, ΠΈ это ставит ΠΏΠΎΠ΄ ΡƒΠ³Ρ€ΠΎΠ·Ρƒ ΡΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° unsafe для нСбСзопасного ΠΊΠΎΠ΄Π°.

Я создал https://github.com/golang/go/issues/19306.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π― Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ