Go

Become
Go Logo Blue.svg
Paradigma compiled, concurrent, imperative, structured
Dirancang oleh Robert Griesemer
Rob Pike
Ken Thompson
pengembang Google LLC.
Rilis perdana x November 2009; 12 tahun lalu  (2009-11-10)
Rilis stabil

i.17 / 16 Agustus 2021; 7 bulan lalu  (2021-08-16) [1]

Tipe Sistem potent, static, inferred, structural[ii] [3]
OS Linux, macOS, FreeBSD, NetBSD, OpenBSD,[iv] Windows, Plan nine,[v] DragonFly BSD, Solaris
Lisensi BSD-fashion[half dozen] + patent grant[7]
Website become.dev Sunting ini di Wikidata
Implementasi utama
gc, gccgo
Terpengaruh oleh
Alef, APL,[eight] BCPL,[8] C, CSP, Limbo, Modula, Newsqueak, Oberon, occam, Pascal,[9] Smalltalk[10]
Mempengaruhi:
Crystal
become.dev

Go (sering disebut sebagai Golang) adalah bahasa pemrograman yang dibuat di Google[11] pada tahun 2009 oleh Robert Griesemer, Rob Pike, dan Ken Thompson.[9] Go adalah bahasa pemrograman sumber terbuka yang mudah, sederhana, efisien. Selain itu, Go memiliki level yang sama dengan Java. Yaitu bahasa pemrograman yang dihimpun dan diketik dalam bahasa C, dengan fitur pengumpulan sampah, penulisan terstruktur, keamanan memori, dan pemrograman yang konkuren serta berurutan.[12] Kompiler dan IDE lainnya disediakan oleh Google dari awal secara bebas dan sumber terbuka.[13]

Sejarah [sunting | sunting sumber]

Golang dirilis perdana pada bulan November 2009. Golang telah digunakan di lingkungan produksi oleh Google dan perusahaan lain.[14]

Dua implementasi utama yang ada:

  • Google Become compiler, "gc", yang dikembangkan sebagai perangkat lunak sumber terbuka. Pihaknya menargetkan berbagai platform, termasuk Linux, Os X, Windows, berbagai BSD dan Unix versi, dan juga (sejak 2015) perangkat selular (termasuk ponsel pintar).[fifteen]
  • Kedua compiler, acpi, adalah GCC frontend.[xvi] [17]

"Gc" toolchain telah cocky-hosting sejak versi i.5.[eighteen]

Go awalnya sebuah percobaan oleh para insinyur Google Robert Griesemer, Rob Pike, dan Ken Thompson untuk merancang sebuah bahasa pemrograman baru yang akan menyelesaikan kritik umum dari bahasa lain selama masih mempertahankan karakteristik positif. Pengembang dipertimbangkan bahasa baru seperti:[19]

  • diketik statis, scalable untuk sistem yang besar (seperti Java dan C++)
  • produktif dan dapat dibaca, tanpa terlalu banyak kata kunci wajib dan pengulangan[twenty] ("light on the page" seperti bahasa dinamis)
  • tidak memerlukan lingkungan pengembangan terintegrasi, tetapi mendukung mereka dengan baik
  • mendukung jaringan dan multiprocessing

Dalam wawancara terakhir, semua dari tiga perancang bahasa tidak suka terhadap kompleksitas C++ sehingga menjadi motivasi utama untuk mendesain sebuah bahasa baru.[21] [22] [23]

Google merilis Become 1.0 pada bulan Maret 2012.[24] [25]

Desain Bahasa [sunting | sunting sumber]

Go lebih dikenali dalam tradisi C, tapi membuat banyak perubahan untuk meningkatkan singkatnya, kesederhanaan, dan keamanan. Get terdiri dari:

  • Sintaks dan lingkungan mengadopsi pola-pola yang lebih umum dalam bahasa dinamis:[26]
    • Opsional ringkas variabel deklarasi dan inisialisasi melalui jenis inferensi (x := 0 tidak int x = 0; atau var x = 0;).
    • Kompilasi cepat.[27]
    • Remote manajemen paket (become get)[28] dan paket dokumentasi daring.[29]
  • Khas pendekatan untuk masalah tertentu:
    • Congenital-in concurrency primitif: proses ringan (goroutines), saluran, dan yang memilih pernyataan.
    • Sebuah antarmuka sistem di tempat virtual warisan, dan jenis embedding bukan non-virtual warisan.
    • Sebuah toolchain yang, secara default, menghasilkan statis terkait binari asli tanpa dependensi eksternal.
  • Keinginan untuk menjaga bahasa spesifikasi yang cukup sederhana untuk memegang di sebuah programmer kepala,[xxx] di bagian dengan menghilangkan fitur-fitur umum untuk bahasa yang sama.

Sintaks [sunting | sunting sumber]

Sintaks Go meliputi perubahan dari C bertujuan menjaga kode ringkas dan mudah dibaca. Gabungan deklarasi/inisialisasi operator diperkenalkan yang memungkinkan developer untuk menulis saya := 3 atau s := "Hi, earth!", tanpa menentukan jenis variabel. Ini kontras dengan C int i = 3; dan const char *s = "How-do-you-do, earth!";. Titik koma masih menghentikan pernyataan, tetapi secara implisit ketika akhir baris yang terjadi. Fungsi dapat mengembalikan beberapa nilai-nilai, dan mengembalikan consequence, err pasangan adalah cara konvensional yang berfungsi menunjukkan kesalahan untuk penelepon di Go.[a] Get menambahkan sintaks literal untuk menginisialisasi struct parameter dengan nama, dan untuk inisialisasi peta dan irisan. Sebagai alternatif untuk C tiga pernyataan for loop, Ekspresi Go range memungkinkan ringkas iterasi lebih dari array, irisan, string, peta, dan saluran. [butuh rujukan]

Jenis (Tipe Data) [sunting | sunting sumber]

Go memiliki sejumlah tipe data bawaan yang ditanamkan, termasuk numerik (byte, int64, float32, dll.), boolean, dan cord karakter (string). String yang berubah; built-in operator dan kata kunci (bukan fungsi) memberikan rangkaian, perbandingan, dan UTF-eight encoding dan decoding.[31] jenis Catatan dapat didefinisikan dengan kata kunci struct. [butuh rujukan]

Untuk masing-masing tipe T dan setiap non-negatif konstanta integer northward, ada sebuah assortment jenis dilambangkan [n]T; array yang berbeda-beda panjangnya sehingga dari jenis yang berbeda. Array dinamis yang tersedia sebagai "iris", dilambangkan []T untuk beberapa jenis T. Ini memiliki panjang dan kapasitas menentukan ketika baru memori yang harus dialokasikan untuk memperluas array. Beberapa irisan dapat berbagi mereka mendasari memori.[32] [33] [34]

Petunjuk tersedia untuk semua blazon, dan arrow-ke-T jenis dilambangkan *T. Alamat-mengambil dan tipuan gunakan & dan * operator di C, atau terjadi secara implisit melalui metode panggilan atau atribut akses sintaks.[35] tidak Ada arrow aritmetika, kecuali melalui khusus jenis unsafe.Pointer di perpustakaan standar. [butuh rujukan]

Untuk pasangan dari jenis 1000, V, jenis map[K]5 adalah jenis tabel hash memetakan tipe-K kunci untuk tipe-V nilai-nilai. Tabel Hash yang dibangun ke dalam bahasa, dengan sintaks khusus dan built-in fungsi. chan T adalah saluran yang memungkinkan pengiriman nilai-nilai dari tipe T antara bersamaan Go proses. [butuh rujukan]

Selain dukungan untuk antarmuka, Go tipe sistem adalah nominal: blazon kata kunci yang dapat digunakan untuk mendefinisikan baru bernama jenis, yang berbeda dari lainnya bernama jenis yang memiliki letak yang sama (dalam kasus sebuah struct, anggota yang sama dalam urutan yang sama). Beberapa konversi antara jenis (misalnya, antara berbagai tipe integer) pra-didefinisikan dan menambahkan jenis baru dapat menentukan konversi tambahan, tapi konversi antara nama jenis harus selalu dipanggil secara eksplisit.[36] sebagai contoh, type kata kunci yang dapat digunakan untuk mendefinisikan tipe untuk IPv4 alamat, yang adalah 32-flake unsigned integer. [butuh rujukan]

Dengan jenis definisi tersebut, ipv4addr(x) menafsirkan uint32 nilai x sebagai alamat IP. Dengan menginisiasi x untuk variabel jenis ipv4addr adalah kesalahan tipe. [butuh rujukan]

Ekspresi konstan dapat berupa diketik atau "untyped"; mereka diberi jenis ketika ditugaskan untuk mengetik variabel jika nilai mereka mewakili melewati waktu kompilasi cek.[37]

Fungsi jenis ini adalah yang ditunjukkan oleh func kata kunci; mereka mengambil nol atau lebih parameter dan kembali nol atau lebih nilai-nilai yang diketik. Parameter dan mengembalikan nilai-nilai menentukan tipe fungsi; dengan demikian, func (cord, int32) (int, error) adalah jenis fungsi yang mengambil string dan 32-bit signed integer, dan menandatangani sebuah integer (default lebar) dan nilai built-in antarmuka jenis error. [butuh rujukan]

Setiap nama memiliki metode yang ditetapkan terkait dengan itu. Alamat IP contoh di atas dapat diperpanjang dengan sebuah metode untuk memeriksa apakah nilai adalah standar yang dikenal. Karena mengetik nominal, definisi metode ini menambah sebuah method ke ipv4addr, tetapi tidak pada uint32. Sedangkan method memiliki definisi khusus dan memanggil sintaks, tidak ada method yang berbeda jenis.[38]

Sistem antarmuka [sunting | sunting sumber]

Become menyediakan dua fitur yang menggantikan kelas warisan. [butuh rujukan]

Yang pertama adalah embedding, yang dapat dilihat sebagai bentuk otomatis dari komposisi[39] atau delegasi.[twoscore] :255

Yang kedua adalah antarmuka, yang menyediakan runtime polimorfisme.[41] :266 menyediakan Antarmuka yang terbatas bentuk struktural mengetik di sebaliknya nominal jenis sistem Go. Setiap jenis yang mengimplementasikan semua metode dari interface sesuai dengan antarmuka yang. Antarmuka Get yang dirancang setelah protokol dari bahasa pemrograman Smalltalk.[42] Beberapa sumber yang menggunakan istilah bebek mengetik ketika menggambarkan Go antarmuka.[43] [44] Meskipun istilah bebek mengetik tidak tepat didefinisikan dan oleh karena itu tidak salah, itu biasanya berarti bahwa kesesuaian jenis ini tidak statis diperiksa. Sejak kesesuaian untuk Go dengan antarmuka yang diperiksa..... dengan Become compiler (kecuali ketika melakukan pernyataan jenis), penulis Go lebih suka menggunakan istilah pengetikan struktural. [butuh rujukan]

Sebuah antarmuka menentukan satu set jenis dengan daftar yang diperlukan metode dan jenis mereka dan puas dengan setiap jenis yang memiliki metode yang diperlukan. Pelaksana jenis yang tidak perlu menentukan mereka mengimplementasikan interface, jadi jika Shape, Foursquare dan Circle didefinisikan sebagai: Kedua Square dan Circle yang secara implisit Shape dan dapat ditugaskan untuk Shape-diketik variabel.[41] :263–268 Dalam bahasa formal, antarmuka Go sistem menyediakan struktural daripada nominal mengetik. Interface dapat menanamkan antarmuka lain dengan efek menciptakan gabungan antarmuka yang puas dengan tepat jenis yang menerapkan tertanam antarmuka dan metode-metode yang baru yang didefinisikan antarmuka menambahkan.[41] :270

Go standar perpustakaan menggunakan antarmuka untuk memberikan genericity di beberapa tempat, termasuk sistem input/output yang didasarkan pada konsep-konsep dari Reader dan Author.[41] :282–283

Selain memanggil metode melalui antarmuka, Go memungkinkan mengubah antarmuka nilai-nilai untuk jenis lain dengan run-time blazon check. Bahasa konstruksi untuk melakukannya adalah jenis pernyataan,[45] yang memeriksa terhadap satu potensi jenis, dan jenis switch,[46] yang memeriksa terhadap beberapa jenis. [butuh rujukan]

Yang kosong antarmuka interface{} adalah sudut yang penting kasus ini karena hal ini dapat merujuk ke item dari setiap jenis beton. Hal ini mirip dengan Object class dalam Coffee atau C# dan puas dengan jenis apa pun, termasuk built-in jenis seperti int.[41] :284 Kode menggunakan kosong interface tidak hanya memanggil metode (atau built-in operator) yang disebut-objek, tetapi dapat menyimpan interface{} nilai, cobalah untuk mengubahnya menjadi lebih berguna melalui jenis jenis pernyataan atau jenis switch, atau periksa dengan Go mencerminkan paket.[47] Karena interface{} dapat merujuk ke nilai apapun, itu adalah cara yang terbatas untuk melarikan diri dari batasan-batasan statis mengetik, seperti void* di C tapi dengan tambahan run-time type pemeriksaan. [butuh rujukan]

Antarmuka nilai-nilai yang diimplementasikan dengan menggunakan arrow ke data dan pointer ke run-time jenis informasi.[48] Seperti beberapa jenis lain diimplementasikan dengan menggunakan pointer pada Become, antarmuka nilai-nilai nihil jika tidak terinisialisasi.[49]

Sistem paket [sunting | sunting sumber]

Dalam Kunjungan itu sistem paket, setiap paket memiliki jalan (misalnya, "kompres/bzip2" atau "golang.org/x/net/html") dan nama (misalnya, bzip2 atau html). Referensi lain paket' definisi harus selalu menjadi diawali dengan paket lain nama, dan hanya bermodal nama dari paket-paket yang lain dapat diakses: io. Pembaca umum tapi bzip2.pembaca tidak.[50] Perintah go become dapat mengambil paket yang disimpan dalam repositori jauh seperti GitHub,[51] dan pengembang didorong untuk mengembangkan paket-paket di dalam basis path yang sesuai dengan sumber repositori (seperti github.com/user_name/package_name) untuk mengurangi kemungkinan tabrakan nama dengan penambahan masa depan untuk standar library atau perpustakaan eksternal.[52]

Proposal yang ada untuk memperkenalkan tepat paket solusi manajemen untuk Get mirip dengan Karat'southward sistem cargo atau Node's npm sistem.[53]

Concurrency: goroutines dan saluran [sunting | sunting sumber]

Go bahasa memiliki congenital-in fasilitas, serta dukungan perpustakaan, untuk menulis bersamaan plan. Concurrency mengacu tidak hanya untuk CPU paralelisme, tetapi juga untuk asynchrony: membiarkan lambat operasi seperti database atau jaringan-baca dijalankan saat programme melakukan pekerjaan lain, seperti yang umum dalam acara berbasis server.[54]

Primer concurrency membangun adalah goroutine, jenis cahaya-berat badan proses. Fungsi panggilan diawali dengan go kata kunci dimulai fungsi baru goroutine. Bahasa spesifikasi tidak menentukan bagaimana goroutines harus dilaksanakan, tetapi saat ini implementasi multipleks Get proses ini goroutines ke satu prepare yang lebih kecil dari sistem operasi benang, mirip dengan penjadwalan yang dilakukan dalam Erlang.[55] :10

Sementara standar perpustakaan menampilkan paket yang paling klasik concurrency control struktur (mutex kunci, dll.) tersedia,[55] :151–152 idiomatik bersamaan program bukan sukai saluran, yang memberikan mengirim pesan antara goroutines.[56] Opsional buffer menyimpan pesan di FIFO gild[40] :43 dan memungkinkan mengirim goroutines untuk melanjutkan sebelum mereka menerima pesan. [butuh rujukan]

Saluran yang diketik, sehingga saluran dari jenis chan T hanya dapat digunakan untuk mentransfer pesan dari tipe T. Sintaks khusus yang digunakan untuk beroperasi pada mereka; <-ch adalah ekspresi yang menyebabkan melaksanakan goroutine untuk memblokir sampai nilai datang di aqueduct ch, sedangkan ch <- ten mengirimkan nilai x (mungkin memblokir sampai lain goroutine menerima nilai). Built-in switch-suka select pernyataan yang dapat digunakan untuk mengimplementasikan non-blocking komunikasi pada beberapa saluran; lihat di bawah untuk contoh. Get memiliki memori model yang menggambarkan bagaimana goroutines harus menggunakan saluran atau operasi lainnya untuk aman berbagi data.[57]

Keberadaan saluran fix berpisah dari aktor model-gaya konkuren bahasa seperti Erlang, di mana pesan yang ditujukan langsung kepada pelaku (sesuai dengan goroutines). Aktor gaya dapat disimulasikan dalam Go dengan mempertahankan satu-ke-satu korespondensi antara goroutines dan saluran, tetapi bahasa yang memungkinkan beberapa goroutines untuk berbagi saluran atau satu goroutine untuk mengirim dan menerima pada beberapa saluran.[55] :147

Dari alat-alat ini seseorang dapat membangun bersamaan konstruksi seperti pekerja outdoor, pipa (yang, katakanlah, sebuah file yang dikompres dan diurai karena popularitas), latar belakang panggilan dengan batas waktu, "fan-out" panggilan paralel untuk satu ready layanan, dan lain-lain.[58] Saluran juga telah ditemukan menggunakan lebih dari biasanya gagasan interprocess communication, seperti melayani sebagai concurrency-daftar aman dari daur ulang buffer,[59] pelaksana coroutines (yang membantu menginspirasi nama goroutine),[60] dan menerapkan iterator.[61]

Konvensi struktural terkait konkurensi dari Go (saluran dan alternatif channel input) yang berasal dari Tony Hoare yang berkomunikasi berurutan proses model. Tidak seperti sebelumnya serentak bahasa pemrograman seperti Occam atau Limbo (pekerjaan bahasa co-desainer Go Rob Pike ),[62] Go tidak menyediakan born gagasan aman atau diverifikasi concurrency.[63] Sedangkan komunikasi-proses model ini disukai di Go, itu bukan hanya satu: semua goroutines dalam program berbagi satu ruang alamat. Ini berarti bahwa mutable benda-benda dan petunjuk yang dapat dibagi antara goroutines; lihat Go (bahasa pemrograman) § Lack of race status condom, di bawah ini. [butuh rujukan]

Kesesuaian untuk pemrograman paralel [sunting | sunting sumber]

Meskipun Go concurrency fitur yang tidak ditujukan terutama untuk pemrosesan paralel,[54] mereka dapat digunakan untuk program memori bersama multi-prosesor mesin. Berbagai studi telah dilakukan untuk keefektifan pendekatan ini.[64] salah Satu studi membandingkan ukuran (dalam baris kode) dan kecepatan program yang ditulis oleh developer berpengalaman yang tidak akrab dengan bahasa dan koreksi terhadap program-program tersebut oleh seorang ahli (dari Google pengembangan tim), lakukan hal yang sama untuk Chapel, Cilk dan Intel TBB. Studi ini menemukan bahwa non-ahli cenderung untuk menulis membagi-dan-menaklukkan algoritme dengan satu go pernyataan per rekursi, sementara ahli menulis mendistribusikan-kerja-sinkronisasi programme dengan menggunakan salah satu goroutine per prosesor. Ahli program-program yang biasanya lebih cepat, tapi juga lebih lama.[64]

Kurangnya kondisi balapan keselamatan [sunting | sunting sumber]

Ada tidak ada pembatasan pada bagaimana goroutines mengakses information bersama, membuat perlombaan kondisi yang mungkin. Secara khusus, kecuali plan yang secara eksplisit sinkronisasi melalui saluran atau sarana lainnya, menulis dari satu goroutine mungkin sebagian, seluruhnya, atau tidak sama sekali terlihat oleh yang lain, sering dengan tidak ada jaminan tentang pemesanan menulis. Selain itu, Go struktur information internal seperti antarmuka nilai-nilai, iris tajuk, tabel hash, dan string header tidak kebal terhadap kondisi ras, sehingga jenis dan memori keselamatan dapat dilanggar dalam program multithreaded yang memodifikasi berbagi contoh jenis-jenis tanpa sinkronisasi.[65] [66]

Bukannya dukungan bahasa, aman concurrent programming dengan demikian bergantung pada konvensi; misalnya, Chisnall merekomendasikan sebuah ungkapan yang disebut "allonym xor bisa berubah", yang berarti bahwa yang lewat bisa berubah nilai (atau arrow) melalui saluran sinyal yang mentransfer kepemilikan atas nilai kepada penerima.[55] :155

Kelalaian [sunting | sunting sumber]

Go sengaja menghilangkan fitur-fitur tertentu yang umum dalam bahasa lain, termasuk (implementasi) warisan, pemrograman generik, pernyataan, pointer aritmetika, dan konversi tipe implisit. [butuh rujukan]

Dari fitur bahasa ini, penulis menyampaikan keterbukaan untuk pemrograman generik, secara tegas membantah pernyataan dan pointer aritmetika, saat membela pilihan untuk menghilangkan jenis warisan sebagai pemberian yang lebih berguna bahasa, mendorong alih-alih menggunakan antarmuka untuk mencapai dinamis pengiriman{{Efn|Questions "How do I go dynamic dispatch of methods?" and "Why is there no blazon inheritance?" in the language FAQ.Kesalahan pengutipan: Tag <ref> harus ditutup oleh </ref>

Merujuk pada pemrograman generik, beberapa fungsi congenital-in yang pada kenyataannya jenis-generic, tapi ini diperlakukan sebagai kasus-kasus khusus; Rob Throughway panggilan ini kelemahan bahasa yang mungkin di beberapa titik akan berubah.[32] tim Google yang dirancang bahasa dibangun setidaknya satu compiler untuk eksperimental dialek Get secara umum, tapi tidak merilisnya.[67]

Setelah awalnya menghilangkan pengecualian, pengecualian-seperti panic/recover mekanisme akhirnya ditambahkan untuk bahasa, yang mana penulis menyarankan menggunakan untuk memecahkan kesalahan seperti orang-orang yang harus menghentikan seluruh program atau permintaan server, atau sebagai jalan pintas untuk menyebarkan kesalahan tumpukan dalam paket (tetapi tidak seluruh paket-batas; tidak, kesalahan kembali adalah standar API).[68] [69] [70] [71]

Kritik [sunting | sunting sumber]

kritikus Get menyatakan bahwa:

  • kurangnya waktu kompilasi generik mengarah ke kode duplikasi, metaprogramming tidak dapat diperiksa secara statis[72] [73] dan standar perpustakaan tidak menawarkan algoritme generik[74]
  • kurangnya ekstensi bahasa (melalui, misalnya, operator overloading) membuat tugas-tugas tertentu lebih verbose[75]
  • jenis sistem kurang pengetikan Hindley–Milner, menghambat keamanan dan/atau ekspresi[72] [76] [77]
  • Batas jeda dan overhead garbage drove (GC) Get yang digunakan sistem pemrograman dibandingkan dengan bahasa-bahasa dengan manual manajemen memori.

Bahasa desainer berpendapat bahwa ini trade-off yang penting untuk menuju kesuksesan,[78] dan menjelaskan beberapa keputusan tertentu pada suhu udara,[79] meskipun mereka mengekspresikan keterbukaan untuk menambahkan beberapa bentuk dari pemrograman generik di masa depan, dan pragmatis perbaikan di daerah-daerah seperti standardisasi cara-cara untuk menerapkan kode generasi.[80]

GC telah ditingkatkan untuk sub-milidetik waktu jeda dalam versi kemudian.[81] [82] [83] Namun, para pengembang mengakui bahwa GC ini algoritme ini tidak hard existent-time. [butuh rujukan]

Konvensi dan kode style [sunting | sunting sumber]

Go penulis menempatkan upaya substansial ke dalam molding gaya dan desain dari plan:

  • Lekukan, jarak, dan permukaan lainnya-tingkat rincian kode secara otomatis distandardisasi oleh gofmt alat.golint apakah gaya tambahan pemeriksaan secara otomatis.
  • Alat dan perpustakaan didistribusikan dengan pendekatan Go suggest standard untuk hal-hal seperti dokumentasi API (godoc),[84] pengujian (go exam), bangunan (become build), manajemen paket (go go), dan sebagainya.
  • Go memberlakukan aturan yang rekomendasi dalam bahasa lain, misalnya melarang siklik dependensi, variabel yang tidak terpakai atau impor, dan konversi tipe implisit.
  • Satu kelalaian dari fitur-fitur tertentu (misalnya, fungsional pemrograman pintas seperti peta dan Jawa-gaya mencoba/akhirnya blok) cenderung mendorong tertentu eksplisit, beton, dan pemrograman imperatif gaya.
  • Pada hari pertama Kunjungan tim menerbitkan sebuah koleksi Go idiom, dan kemudian juga dikumpulkan kode meninjau komentar, pembicaraan, resmi posting weblog untuk mengajarkan gaya dan coding filsafat Become.

Alat-alat [sunting | sunting sumber]

Get memiliki beberapa perkakas pengawakutuan, pengujian, dan lawmaking-vetting seperti banyak distribusi bahasa lain. Distribusi Go bisanya memiliki alat-alat:

  • get build, yang membangun binari Go biner hanya menggunakan informasi dalam sumber file sendiri, tidak terpisah makefiles
  • go test, untuk unit of measurement pengujian dan microbenchmarks
  • go fmt, untuk format kode
  • go get, untuk mengambil dan menginstal paket jarak jauh
  • go vet, analisis statis mencari potensi kesalahan dalam kode
  • go run, sebuah jalan pintas untuk membangun dan mengeksekusi kode
  • godoc, untuk menampilkan dokumentasi atau melayani via HTTP
  • gorename, untuk mengganti nama variabel, fungsi, dan jenis-cara aman
  • become generate, cara standar untuk memanggil kode generator

Hal ini juga termasuk profiling dan dukungan debugging, runtime instrumentasi (untuk, misalnya, melacak pengumpulan sampah jeda), dan kondisi balapan tester.

Ada sebuah ekosistem alat pihak ketiga yang menambahkan untuk distribusi standar, seperti gocode, yang memungkinkan kode autocompletion dalam banyak teks editor, goimports (oleh seorang anggota tim), yang secara otomatis menambahkan/menghapus paket impor yang diperlukan, errcheck, yang mendeteksi kode yang mungkin tidak sengaja mengabaikan kesalahan, dan banyak lagi. Plugin yang ada untuk menambahkan dukungan bahasa untuk beberapa banyak digunakan editor teks. Selain itu, beberapa Ide yang tersedia. Misalnya, LiteIDE, yang dicap sebagai "simpel, sumber terbuka, IDE lintas platform untuk Go",[85] dan GoLand, yang mengklaim untuk menjadi "mampu dan ergonomis."[86]

Catatan [sunting | sunting sumber]

  1. ^ Usually, exactly one of the result and error values has a value other than the type'due south nada value; sometimes both do, every bit when a read or write tin can only be partially completed, and sometimes neither, as when a read returns 0 bytes. See Semipredicate problem: Multivalued render.

Referensi [sunting | sunting sumber]

  1. ^ "Go ane.17 is released". The Get Blog. 16 Agustus 2021. Diakses tanggal 10 Oktober 2021.
  2. ^ "Why doesn't Go have "implements" declarations?". golang.org . Diakses tanggal i Oct 2015.
  3. ^ Pike, Rob (2014-12-22). "Rob Pike on Twitter". Diakses tanggal 2016-03-13 . Go has structural typing, not duck typing. Full interface satisfaction is checked and required.
  4. ^ "lang/go: go-1.iv – Become programming language". OpenBSD ports. 2014-12-23. Diakses tanggal 2015-01-nineteen .
  5. ^ "Become Porting Efforts". Go Language Resources. cat-v. 12 Jan 2010. Diakses tanggal 18 January 2010.
  6. ^ "Text file LICENSE". The Go Programming Linguistic communication. Google. Diakses tanggal 5 October 2012.
  7. ^ "Additional IP Rights Grant". The Go Programming Linguistic communication. Google. Diakses tanggal 5 October 2012.
  8. ^ a b Pike, Rob (2014-04-24). "Hello Gophers". Diakses tanggal 2016-03-11 .
  9. ^ a b "Linguistic communication Design FAQ". golang.org. 16 January 2010. Diakses tanggal 27 Feb 2010.
  10. ^ "The Evolution of Become". Diakses tanggal 2015-09-26 .
  11. ^ Kincaid, Jason (x November 2009). "Google'due south Become: A New Programming Linguistic communication That's Python Meets C++". TechCrunch . Diakses tanggal 18 January 2010. More than than one of |work= dan |paper= specified (bantuan)
  12. ^ Metz, Cade (five May 2011). "Google Go boldly goes where no code has gone before". The Annals.
  13. ^ https://golang.org/LICENSE
  14. ^ "Go FAQ: Is Google using Get internally?". Diakses tanggal 2013-03-09 .
  15. ^ "Google'southward In-Business firm Programming Linguistic communication Now Runs on Phones". wired.com. xix August 2015.
  16. ^ "FAQ: Implementation". golang.org. xvi January 2010. Diakses tanggal 2010-01-18 .
  17. ^ "Installing GCC: Configuration". Diakses tanggal 2011-12-03 . Ada, Become and Objective-C++ are not default languages
  18. ^ "Get i.five Release Notes". Diakses tanggal 28 Jan 2016. The compiler and runtime are now implemented in Go and assembler, without C.
  19. ^ Pike, Rob (28 Apr 2010). "Another Get at Language Design". Stanford EE Figurer Systems Colloquium. Stanford University. Video bachelor.
  20. ^ "Frequently Asked Questions (FAQ) - The Go Programming Language". golang.org . Diakses tanggal 2016-02-26 .
  21. ^ Andrew Binstock (18 May 2011). "Dr. Dobb'south: Interview with Ken Thompson". Diakses tanggal 2014-02-07 .
  22. ^ Thruway, Rob (2012). "Less is exponentially more than".
  23. ^ Robert Griesemer (2015). "The Development of Go".
  24. ^ Shankland, Stephen (2012-03-thirty). "Google's Go language turns ane, wins a spot at YouTube: The lower-level programming language has matured enough to sport the one.0 version number. And it's beingness used for real piece of work at Google". News. CBS Interactive Inc. Diakses tanggal 2017-08-06 . Google has released version 1 of its Go programming language, an ambitious effort to improve upon giants of the lower-level programming world such every bit C and C++.
  25. ^ "Release History".
  26. ^ Pike, Rob. "The Go Programming Language". YouTube. Diakses tanggal 2011-07-01 .
  27. ^
  28. ^ Download and install packages and dependencies - become - The Go Programming Language; run into godoc.org for addresses and documentation of some packages
  29. ^ "GoDoc". godoc.org.
  30. ^ Rob Pike, on The Changelog podcast
  31. ^ Rob Motorway, Strings, bytes, runes and characters in Go, 23 Oct 2013
  32. ^ a b Thruway, Rob (26 September 2013). "Arrays, slices (and strings): The mechanics of 'append'". The Go Blog . Diakses tanggal 7 March 2015.
  33. ^ Andrew Gerrand, Go Slices: usage and internals
  34. ^ The Go Authors, Effective Go: Slices
  35. ^ The Go authors Selectors - The Go Programming Linguistic communication Specification and Calls - The Go Programming Language Specification
  36. ^ "The Get Programming Language Specification". golang.org.
  37. ^ "The Go Programming Linguistic communication Specification". golang.org.
  38. ^ "The Get Programming Language Specification". golang.org.
  39. ^ Kesalahan pengutipan: Tag <ref> tidak sah; tidak ditemukan teks untuk ref bernama gohotdraw
  40. ^ a b Summerfield, Marking (2012). Programming in Go: Creating Applications for the 21st Century. Addison-Wesley.
  41. ^ a b c d e Balbaert, Ivo (2012). The Style to Go: A Thorough Introduction to the Go Programming Linguistic communication. iUniverse.
  42. ^ "The Evolution of Go". talks.golang.org . Diakses tanggal 2016-03-13 .
  43. ^ Diggins, Christopher (2009-eleven-24). "Duck Typing and the Go Programming Language". Dr. Dobb's. Diakses tanggal 2016-03-10 .
  44. ^ Ryer, Mat (2015-12-01). "Duck typing in Go". Diakses tanggal 2016-03-10 .
  45. ^ "The Go Programming Linguistic communication Specification". golang.org.
  46. ^ "The Get Programming Language Specification". golang.org.
  47. ^ reflect.ValueOf(i interface{}) converts an interface{} to a reflect.Value that can be further inspected
  48. ^ "Go Data Structures: Interfaces". Diakses tanggal 15 November 2012.
  49. ^ "The Go Programming Language Specification". golang.org.
  50. ^ "A Tutorial for the Go Programming Language". The Become Programming Language. Google. Diakses tanggal 10 March 2013. In Go the dominion most visibility of data is elementary: if a name (of a height-level type, part, method, abiding or variable, or of a construction field or method) is capitalized, users of the bundle may see it. Otherwise, the proper name and hence the affair being named is visible only inside the package in which it is alleged.
  51. ^ "go - The Go Programming Language". golang.org.
  52. ^ "How to Write Go Code". golang.org. The packages from the standard library are given brusk import paths such as "fmt" and "net/http". For your ain packages, you must choose a base of operations path that is unlikely to collide with future additions to the standard library or other external libraries. If you proceed your code in a source repository somewhere, then yous should use the root of that source repository every bit your base of operations path. For instance, if you have a GitHub business relationship at github.com/user, that should be your base path
  53. ^ "Become Packaging Proposal Process".
  54. ^ a b Rob Pike, Concurrency is not Parallelism
  55. ^ a b c d Kesalahan pengutipan: Tag <ref> tidak sah; tidak ditemukan teks untuk ref bernama phrasebook
  56. ^ "Effective Go". golang.org.
  57. ^ "The Get Memory Model". Diakses tanggal 10 April 2017.
  58. ^ "Become Concurrency Patterns". golang.org.
  59. ^ John Graham-Cumming, Recycling Retentiveness Buffers in Go
  60. ^ tree.go
  61. ^ Ewen Cheslack-Postava, Iterators in Go
  62. ^ Brian Due west. Kernighan, A Descent Into Limbo
  63. ^ "The Become Memory Model". Google. Diakses tanggal five January 2011.
  64. ^ a b
  65. ^ Russ Cox, Off to the Races
  66. ^ Pike, Rob (Oct 25, 2012). "Go at Google: Language Design in the Service of Software Technology". Google, Inc. "At that place is one of import caveat: Go is not purely memory safe in the presence of concurrency."
  67. ^ "E2E: Erik Meijer and Robert Griesemer – Going Go". Channel ix. Microsoft. 7 May 2012.
  68. ^ Panic And Recover, Go wiki
  69. ^ "Weekly Snapshot History". golang.org.
  70. ^ "Proposal for an exception-like mechanism". golang-nuts. 25 March 2010. Diakses tanggal 25 March 2010.
  71. ^ "Effective Go". golang.org.
  72. ^ a b Will Yager, Why Go is not Practiced
  73. ^ Egon Elbre, Summary of Go Generics discussions
  74. ^ Fitzpatrick, Brad. "Go: ninety% Perfect, 100% of the time". Diakses tanggal 28 January 2016.
  75. ^ Danny Gratzer, Leaving Become Diarsipkan 2016-xi-03 di Wayback Auto.
  76. ^ Jared Forsyth, Rust vs. Go
  77. ^ Janos Dobronszki, Everyday Hassles in Go Diarsipkan 2014-12-30 di Wayback Auto.
  78. ^ Rob Pike, Less is exponentially more
  79. ^ The Go Authors, Frequently Asked Questions (FAQ)
  80. ^ Rob Superhighway, Generating code
  81. ^ Rhys Hiltner (2016-07-05). "Become's march to depression-latency GC". Twitch.tv. It's the story of how improvements to the Go runtime between Go ane.4 and Become 1.6 gave us a 20x improvement in garbage collection (GC) pause time, of how nosotros've gotten another 10x improvement in Get 1.vi's pauses, and of how sharing our experience with the Go runtime team helped them give us an additional 10x speedup in Go 1.7 while obsoleting our manual tuning.
  82. ^ Richard Hudson, Go 1.4+ Garbage Drove (GC) Program and Roadmap
  83. ^ Hatfield, Brian (2016-12-01). "SUB. MILLISECOND. Break. TIME. ON. AN. eighteen. GIG. HEAP" (dalam bahasa Inggris). Diakses tanggal 2017-10-07 .
  84. ^ "Constructive Go". golang.org.
  85. ^ LiteIDE
  86. ^ GoLand

Pranala luar [sunting | sunting sumber]

  • Situs web resmi
  • Dokumentasi Go
  • Blog Get
  • Paket Get
  • Repositori Go di GitHub

wyckoffconers41.blogspot.com

Source: https://id.wikipedia.org/wiki/Go_%28bahasa_pemrograman%29

0 Response to "Go"

ارسال یک نظر

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel