Мой ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Python ΠΊ Go β€” дСлюсь совСтами ΠΈ рСсурсами

Мой ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Python ΠΊ Go — дСлюсь совСтами ΠΈ рСсурсами

ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: ΠΏΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ для вас ΡΡ‚Π°Ρ‚ΡŒΡŽ Илада Π›Π΅Π΅Π²Π° ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ с Python Π½Π° Go. Π‘Ρ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ программистам, Π½ΠΎ ΠΈ всСм, ΠΊΡ‚ΠΎ Ρ‚Π°ΠΊ Π»ΠΈΠ±ΠΎ ΠΈΠ½Π°Ρ‡Π΅ интСрСсуСтся Go.

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

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

Skillbox Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚: ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ курс Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ с нуля.

НапоминаСм: для всСх Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Β«Π₯Π°Π±Ρ€Π°Β» β€” скидка 10 000 Ρ€ΡƒΠ±Π»Π΅ΠΉ ΠΏΡ€ΠΈ записи Π½Π° любой курс Skillbox ΠΏΠΎ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄Ρƒ Β«Π₯Π°Π±Ρ€Β».

Мой ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Python ΠΊ Go — дСлюсь совСтами ΠΈ рСсурсами

НаблюдСния

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ я сдСлал Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ, β€” ΠΈΠ·ΡƒΡ‡ΠΈΠ» ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» β€œTour Of Go”. Он Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ синтаксиса языка.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ знания, я ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Π΅Ρ‰Π΅ ΠΈ ΠΊΠ½ΠΈΠ³Ρƒ β€œGo for Python Programmers”, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ этапу β€” ΠΏΡ€ΠΎΠ±Π°ΠΌ ΠΈ ошибкам.

Π― взял ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовал Π² Python (сСриализация JSON ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с HTTP-Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ), ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Π½Π° Go. Благодаря Ρ‚Π°ΠΊΠΎΠΌΡƒ наглядному ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ языками.

Компоновка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Python Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ спСцифичСской ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Go β€” Π΄Π°.

Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Β«ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽΒ» ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ, которая Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ основу ΠΊΠΎΠ΄Π°, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ структура, Π° ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ΄ остаСтся строго упорядочСнным.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» β€œHow to Write Go Code” ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

БтатичСская строгая типизация

Go статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, ΠΈ это заставит ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сСбя Π½Π΅ Π² своСй Ρ‚Π°Ρ€Π΅Π»ΠΊΠ΅ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ ΠΊ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языкам Π²Ρ€ΠΎΠ΄Π΅ Python ΠΈ Ruby.

НСт сомнСний, Ρ‡Ρ‚ΠΎ динамичСскиС языки сильнСС ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ошибкам, со стороны Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° трСбуСтся большС усилий ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” функция, которая вычисляСт сумму Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ… чисСл. Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ строку Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Ρ‡Ρ‚ΠΎ случаСтся Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ Ρ€Π΅Π΄ΠΊΠΎ), Ρ‚ΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС TypeError.

Π’ Go Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ функция Π²Π΅Ρ€Π½Π΅Ρ‚.

Π‘Π½Π°Ρ‡Π°Π»Π° это Ρ€Π°Π·Π΄Ρ€Π°ΠΆΠ°Π΅Ρ‚: ΠΌΠ½Π΅ казалось, Ρ‡Ρ‚ΠΎ эта ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Go замСдляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ, β€” Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ объявлСниС всСго экономит врСмя, Π° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки сниТаСтся.

Нативный ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ

Π£ Go Π΅ΡΡ‚ΡŒ нативная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° с использованиСм ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² β€” это ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

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

Π’ΠΎΡ‚ визуализация всСго сказанного ΠΎΡ‚ Ивана Π”Π°Π½ΠΈΠ»ΡŽΠΊΠ°.

package main
 
func main() {
    // create new channel of type int
    ch := make(chan int)
 
// start new anonymous goroutine
    go func() {
        // send 42 to channel
        ch <- 42
    }()
    // read from channel
    <-ch
}

Мой ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Python ΠΊ Go — дСлюсь совСтами ΠΈ рСсурсами

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² здСсь ΠΈ здСсь.

Π Π°Π±ΠΎΡ‚Π° с JSON

Ну, json.loads() большС Π½Π΅Ρ‚. Π’ Python всС просто: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ json.loads, ΠΈ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Но Π² Go, статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС, эта опСрация становится слоТнСС.

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

{
  β€œfirst”: β€œElad”,
  β€œlast”: β€œLeev”,
  β€œlocation”:”IL”,
  β€œid”: β€œ93”
}

type AccountData struct {
 First    string `json:"first"`
 Last     string `json:"last"`
 Location string `json:"location"`
 ID       string `json:"id"`
}

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ JSON Π±Π΅Π· структур, Π½ΠΎ ΠΏΠΎ возмоТности этого слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ языка.

Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ JSON Π½Π° GO Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² этом постС ΠΈΠ»ΠΈ здСсь.

Π›Π΅Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш JSON Π² Go-структуру? НСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, этот инструмСнт всС сдСлаСт Π·Π° вас.

Чистый ΠΊΠΎΠ΄

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Go Π±ΡƒΠ΄Π΅Ρ‚ всСгда ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄ Β«Π² чистотС». Он считаСт Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ошибкой компиляции. Π’ Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ систСмС Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ форматирования. Π’Π°ΠΊ, Go запустит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ gofmt ΠΏΡ€ΠΈ сохранСнии ΠΈΠ»ΠΈ компиляции ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π’Π°ΠΌ Π½Π΅Ρ‚ Π΄Π΅Π»Π° Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…? ОкСй! ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ _ (ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅) ΠΈ Π½Π°Π·Π½Π°Ρ‡ΡŒΡ‚Π΅ Π΅Π³ΠΎ пустому ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ.

ΠœΠ°ΡΡ‚Ρ€ΠΈΠ΄-Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠΌ для этой части Ρ€Π°Π±ΠΎΡ‚Ρ‹ с языком являСтся информация ΠΈΠ· β€œEffective Go”.

Поиск подходящСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²

Π― использовал с Python Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ€ΠΎΠ΄Π΅ Flask, Jinja2, Requests ΠΈ Π΄Π°ΠΆΠ΅ Kazoo, поэтому боялся, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Ρƒ Π½ΠΈΡ‡Π΅Π³ΠΎ подходящСго для Go.

Но ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ»ΠΎ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Ρƒ языка Π΅ΡΡ‚ΡŒ собствСнныС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ использовали Ρ€Π°Π½Π΅Π΅.

Π’ΠΎΡ‚ ΠΌΠΎΠΈ Ρ„Π°Π²ΠΎΡ€ΠΈΡ‚Ρ‹.

Python Requests => net/http

net/http прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΈ Π»Π΅Π³ΠΊΡƒΡŽ Π² использовании Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра.

Flask + Jinja2 => Gin

Gin β€” Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ HTTP с ΠΎΡ‡Π΅Π½ΡŒ простым API: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² ΠΏΡƒΡ‚ΠΈ, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π³Ρ€ΡƒΠΏΠΏ (/ api / v1, / api / v2), ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ², ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ статичСскиС Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠΌ HTML ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ кастомным middleware.
ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ этот Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ.

CLI Creation => Cobra

Cobra β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для создания ΠΌΠΎΡ‰Π½Ρ‹Ρ… CLI-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².
Cobra примСняСтся Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Go-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Kubernetes, etcd ΠΈ OpenShift.

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ нСсколько Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ: Viper, Gonfig ΠΈ этот ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΠΉ список β€” Awesome-Go.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ рСсурсы

[1] Francesc Campoy β€Šβ€” β€ŠΠ²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ эти YouTube-ΠΊΠ°Π½Π°Π» ΠΈ GitHub-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ.

[2] GopherCon β€” Π²ΠΈΠ΄Π΅ΠΎ.

[3] Go Web Examples.

[4] Golang Weekly, Gopher Academy, Golang News β€” Twitter-Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹.

Подводим ΠΈΡ‚ΠΎΠ³ΠΈ

Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ постоянным ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Python Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ пяти Π»Π΅Ρ‚, я боялся, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Go Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹ΠΌ.

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

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

ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ!

Мой ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Python ΠΊ Go — дСлюсь совСтами ΠΈ рСсурсами

Skillbox Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com