Go (bahasa pemrograman)
Go (sering disebut sebagai golang) adalah sebuah bahasa pemrograman yang dibuat di Google pada tahun 2009 oleh Robert Griesemer, Rob Pike, dan Ken Thompson. ini adalah bahasa pemrograman yang dihimpun,... diketik dalam bahasa tradisi Algol dan C, dengan pengumpulan sampah, terbatas struktural mengetik, memori keselamatan fitur dan CSP-gaya konkuren pemrograman fitur yang
ditambahkan. compiler dan lainnya alat-alat bahasa yang awalnya dikembangkan oleh Google adalah semua yang gratis dan open source.
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: Dalam wawancara terakhir, semua dari tiga desainer bahasa tidak suka terhadap kompleksitas C++'s sehingga menjadi motivasi utama untuk mendesain sebuah bahasa baru.
Go lebih dikenali dalam tradisi C, tapi membuat banyak perubahan untuk meningkatkan singkatnya, kesederhanaan, dan keamanan. Go terdiri dari:
Sintaks Go meliputi perubahan dari C bertujuan menjaga kode ringkas dan mudah dibaca. Gabungan deklarasi/inisialisasi operator diperkenalkan yang memungkinkan programmer untuk menulis codice_6 atau codice_7, tanpa menentukan jenis variabel. Ini kontras dengan C codice_8 dan codice_9. Titik koma masih menghentikan pernyataan, tetapi secara implisit ketika akhir baris yang terjadi. Fungsi dapat
mengembalikan beberapa nilai-nilai, dan mengembalikan codice_10 pasangan adalah cara konvensional yang berfungsi menunjukkan kesalahan untuk penelepon di Go. Go menambahkan sintaks literal untuk menginisialisasi struct parameter dengan nama, dan untuk inisialisasi peta dan irisan. Sebagai alternatif untuk C tiga pernyataan codice_11 loop, Ekspresi Go codice_12 memungkinkan ringkas iterasi lebih dari array, irisan, string, peta, dan saluran.
Go memiliki sejumlah built-in tipe data, termasuk numerik (byte, int64, float32, dll.), boolean, dan string karakter (string). String yang berubah; built-in operator dan kata kunci (bukan fungsi) memberikan rangkaian, perbandingan, dan UTF-8 encoding dan decoding. jenis Catatan dapat didefinisikan dengan kata kunci struct.
Untuk masing-masing tipe "T" dan setiap non-negatif konstanta integer "n", ada sebuah array 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.
Petunjuk tersedia untuk semua type, dan pointer-ke-"T" jenis dilambangkan *"T". Alamat-mengambil dan tipuan gunakan dan dan * operator di C, atau terjadi secara implisit melalui metode panggilan atau atribut akses sintaks. tidak Ada pointer aritmetika, kecuali melalui khusus jenis unsafe.Pointer di perpustakaan standar.
Untuk pasangan dari jenis "K", "V", jenis map["K"]"V" 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.
Selain dukungan untuk antarmuka, Go tipe sistem adalah nominal: type 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. sebagai contoh, type kata kunci yang dapat digunakan untuk mendefinisikan tipe untuk IPv4 alamat, yang adalah 32-bit unsigned integer.Dengan jenis definisi tersebut, ipv4addr (x) menafsirkan uint32 nilai x sebagai alamat IP. Dengan menginisiasi x untuk variabel jenis ipv4addr adalah kesalahan tipe.
Ekspresi konstan dapat berupa diketik atau "untyped"; mereka diberi jenis ketika ditugaskan untuk mengetik variabel jika nilai mereka mewakili melewati waktu kompilasi cek.
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 (string, 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.
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.
Yang pertama adalah "embedding", yang dapat dilihat sebagai bentuk otomatis dari komposisi atau delegasi.
Yang kedua adalah "antarmuka", yang menyediakan runtime polimorfisme. 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 Go yang dirancang setelah protokol dari bahasa pemrograman Smalltalk. Beberapa sumber yang menggunakan istilah bebek mengetik ketika menggambarkan Go
antarmuka. 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 Go compiler (kecuali ketika melakukan pernyataan jenis), penulis Go lebih suka menggunakan istilah "pengetikan" "struktural".
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, Square dan Circle didefinisikan sebagai:Kedua Square dan Circle yang secara implisit Shape dan dapat ditugaskan untuk Shape-diketik variabel. 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.
Go standar perpustakaan menggunakan antarmuka untuk memberikan genericity di beberapa tempat, termasuk sistem input/output yang didasarkan pada konsep-konsep dari Reader dan Writer.
Selain memanggil metode melalui antarmuka, Go memungkinkan mengubah antarmuka nilai-nilai untuk jenis lain dengan run-time type check. Bahasa konstruksi untuk melakukannya adalah "jenis pernyataan", yang memeriksa terhadap satu potensi jenis, dan "jenis switch", yang memeriksa terhadap beberapa jenis.
Yang "kosong antarmuka" codice_13 adalah sudut yang penting kasus ini karena hal ini dapat merujuk ke item dari "setiap" jenis beton. Hal ini mirip dengan Object class dalam Java atau C# dan puas dengan jenis apa pun, termasuk built-in jenis seperti int. Kode menggunakan kosong interface tidak hanya memanggil metode (atau built-in operator) yang disebut-objek, tetapi dapat menyimpan codice_13