Jumat ini
, Go 1.11
dirilis . Hal-hal utama tentang rilis ini adalah dukungan eksperimental untuk WebAssembly, serta konsep baru untuk Modul, yang dirancang untuk menjadi standar untuk distribusi kode.
Sebelum beralih ke hal-hal utama dari rilis, ada baiknya mengatakan beberapa kata tentang perubahan yang tidak begitu terlihat bagi pengguna. Seperti pada rilis sebelumnya, di Go 1.11, pekerjaan dilakukan untuk meningkatkan bahasa, toolchain, dan pustaka runtime (misalnya, sekarang tidak ada batasan pada ukuran Hip maksimum). Tentu saja, pekerjaan dilakukan untuk meningkatkan produktivitas bahasa (sebagian besar - dalam
matematika / aritmatika
besar - panjang).
Sekarang tentang WebAssembly. Bahkan, di Habré sudah ada beberapa artikel tentang cara menulis kode untuk Wasm on Go. Jadi, fitur eksperimental dalam rilis ini bukan berita sama sekali. Namun, saya pikir semua orang mengerti bahwa ini sangat penting. Lagi pula, jika komputer berhasil menyelesaikan toolchain, serta Wasm, ke status siap-produksi, maka kita dapat menulis kode front-end dalam bahasa yang bagus dengan pengetikan kuat statis (halo, javascript!). Berikut ini adalah contoh kecil menggunakan teknologi -
Omong-omong, berbagai solusi sudah mulai muncul untuk meningkatkan kehidupan programmer untuk pengembangan front-end. Misalnya,
https://github.com/dave/wasmgo - kompilasi Go to WASM, dan gunakan ke CDN dalam satu perintah.
Sekarang mari kita beralih ke hal yang paling penting, menurut pendapat saya, dalam rilis ini - sistem Modul. Bicara tentang modul-modul ini sudah dimulai sejak lama. Mereka dikenal dunia sebagai
Vgo . Modul bahkan telah dibahas di RuNet -
https://habr.com/sandbox/115542/ , serta dalam kerangka podcast Devzen oleh Gopher terkenal -
Alexey -
https://devzen.ru/episode-0180/ . Pengantar modul yang bagus adalah
https://roberto.selbach.ca/intro-to-go-modules/ .
Hal terpenting dalam modul ini:
- Bekerja pada Semver . Selain itu, perintah go mod memungkinkan Anda untuk memperbarui hanya versi Patch maksimum (nomor versi ketiga) dan setiap versi Minor maksimum (nomor versi kedua atau ketiga). Pada versi utama, yang merusak kompatibilitas, Anda tidak akan secara otomatis memperbarui dengan cara apa pun - dan ini sangat luar biasa.
- Proses meninggalkan konsep GOPATH telah dimulai . Pengembang Go ingin keluar dari abstraksi ini pada 2019, jadi sekarang modul baru hanya berfungsi di luar GOPATH. Namun, Anda dapat mengatur variabel lingkungan GO111MODULE = on untuk menghapus batasan ini.
- Proses meninggalkan Vendoring telah dimulai. Sejauh ini, ada peluang di modul baru untuk meletakkan dependensi di folder terpisah, dan menggunakannya dari sana. Namun, di masa depan, pengembang Go ingin lolos dari ini. Menurut pendapat mereka, dependensi harus selalu diperoleh dari repositori (misalnya, Github), atau perusahaan harus proksi repositori dengan menyimpan kode sumber di sisinya (misalnya, menggunakan Artifactory).
Penting untuk dipahami bahwa Modul Baru juga masih merupakan eksperimen. Alat pengembangan modern tidak cukup siap untuk ini. Karena itu, Anda mungkin harus terus hidup dengan
Dep . Namun, sudah ada upaya untuk mendapatkan Vgo di CI publik -
https://arslan.io/2018/08/26/using-go-modules-with-vendor-support-on-travis-ci/ .
Di GoLand, modul baru sudah ada sebagai abstraksi. Namun, semuanya berjalan relatif kasar (misalnya, jika Anda mengunduh modul menggunakan Vgo, tetapi tanpa melakukan
get get , maka kode Anda tidak akan mulai dianalisis):

Untuk meringkas. Go 1.11 adalah rilis yang bagus. Tidak ada yang rusak (seperti biasa) - dan ini sangat keren. Fitur menarik telah muncul. Kami secara otomatis mendapat peningkatan kinerja. Secara umum, semuanya sebagaimana mestinya dalam bahasa modern untuk pengembangan industri. Dan perubahannya akan di Go 2 mendatang, yang sekarang sedang dibahas secara aktif.