The Google team built at least one compiler for an experimental Go dialect with generics, but did not release it.
tim Google yang dirancang bahasa dibangun setidaknya satu compiler untuk eksperimental dialek Go secara umum, tapi tidak merilisnya.
Go 1 guarantees compatibility for the language specification and major parts of the standard library.
Go 1 menjamin kompatibilitas untuk spesifikasi bahasa dan bagian utama dari pustaka standar.
A combined declaration/initialization operator was introduced that allows the programmer to write i :3 or s :"Hello, world!", without specifying the types of variables used.
Gabungan deklarasi/inisialisasi operator diperkenalkan yang memungkinkan programmer untuk menulis saya :3 atau s :"Hello, world!", tanpa menentukan jenis variabel.
As an alternative to C's three-statement for loop, Go's range expressions allow concise iteration over arrays, slices, strings, maps, and channels.
Sebagai alternatif untuk C tiga pernyataan for loop, Ekspresi Go range memungkinkan ringkas iterasi lebih dari array, irisan, string, peta, dan saluran.
For each type T and each non-negative integer constant n, there is an array type denoted [n]T; arrays of differing lengths are thus of different types.
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.
For a pair of types K, V, the type map[K]V is the type mapping type-K keys to type-V values, which can be thought of as equivalent to Map<K, V> in other languages.
Untuk pasangan dari jenis K, V, jenis map[K]V adalah jenis tabel hash memetakan tipe-K kunci untuk tipe-V nilai-nilai.
Hash tables are built into the language, with special syntax and built-in functions.
Tabel Hash yang dibangun ke dalam bahasa, dengan sintaks khusus dan built-in fungsi.
chan T is a channel that allows sending values of type T between concurrent Go processes.
chan T adalah saluran yang memungkinkan pengiriman nilai-nilai dari tipe T antara bersamaan Go proses.
Aside from its support for interfaces, Go's type system is nominal: the type keyword can be used to define a new named type, which is distinct from other named types that have the same layout (in the case of a struct, the same members in the same order).
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).
For example, the type keyword can be used to define a type for IPv4 addresses, based on 32-bit unsigned integers as follows: With this type definition, ipv4addr(x) interprets the uint32 value x as an IP address.
sebagai contoh, type kata kunci yang dapat digunakan untuk mendefinisikan tipe untuk IPv4 alamat, yang adalah 32-bit unsigned integer.
Simply assigning x to a variable of type ipv4addr is a type error.
Dengan menginisiasi x untuk variabel jenis ipv4addr adalah kesalahan tipe.
Constant expressions may be either typed or "untyped"; they are given a type when assigned to a typed variable if the value they represent passes a compile-time check.
Ekspresi konstan dapat berupa diketik atau "untyped"; mereka diberi jenis ketika ditugaskan untuk mengetik variabel jika nilai mereka mewakili melewati waktu kompilasi cek.
Function types are indicated by the func keyword; they take zero or more parameters and return zero or more values, all of which are typed.
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.
The parameter and return values determine a function type; thus, func(string, int32) (int, error) is the type of functions that take a string and a 32-bit signed integer, and return a signed integer (of default width) and a value of the built-in interface type error.
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.
The IP address example above can be extended with a method for checking whether its value is a known standard:
Alamat IP contoh di atas dapat diperpanjang dengan sebuah metode untuk memeriksa apakah nilai adalah standar yang dikenal.
Due to nominal typing, this method definition adds a method to ipv4addr, but not on uint32.
Karena mengetik nominal, definisi metode ini menambah sebuah method ke ipv4addr, tetapi tidak pada uint32.
While methods have special definition and call syntax, there is no distinct method type.
Sedangkan method memiliki definisi khusus dan memanggil sintaks, tidak ada method yang berbeda jenis.
Go provides two features that replace class inheritance.
Go menyediakan dua fitur yang menggantikan kelas warisan.
The design of Go interfaces was inspired by protocols from the Smalltalk programming language.
Antarmuka Go yang dirancang setelah protokol dari bahasa pemrograman Smalltalk.
Multiple sources use the term duck typing when describing Go interfaces.
Beberapa sumber yang menggunakan istilah bebek mengetik ketika menggambarkan Go antarmuka.
Although the term duck typing is not precisely defined and therefore not wrong, it usually implies that type conformance is not statically checked.
Meskipun istilah bebek mengetik tidak tepat didefinisikan dan oleh karena itu tidak salah, itu biasanya berarti bahwa kesesuaian jenis ini tidak statis diperiksa.
Because conformance to a Go interface is checked statically by the Go compiler (except when performing a type assertion), the Go authors prefer the term structural typing.
dengan Go compiler (kecuali ketika melakukan pernyataan jenis), penulis Go lebih suka menggunakan istilah pengetikan struktural.
For example, if Shape, Square and Circle are defined as then both a Square and a Circle are implicitly a Shape and can be assigned to a Shape-typed variable.
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.:263–268
In formal language, Go's interface system provides structural rather than nominal typing.
Dalam bahasa formal, antarmuka Go sistem menyediakan struktural daripada nominal mengetik.
Because interface{} can refer to any value, it is a limited way to escape the restrictions of static typing, like void* in C but with additional run-time type checks.
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.
The Go language has built-in facilities, as well as library support, for writing concurrent programs.
Go bahasa memiliki built-in fasilitas, serta dukungan perpustakaan, untuk menulis bersamaan program.
A function call prefixed with the go keyword starts a function in a new goroutine.
Fungsi panggilan diawali dengan go kata kunci dimulai fungsi baru goroutine.
Optional buffers store messages in FIFO order and allow sending goroutines to proceed before their messages are received.
Opsional buffer menyimpan pesan di FIFO order:43 dan memungkinkan mengirim goroutines untuk melanjutkan sebelum mereka menerima pesan.
Channels are typed, so that a channel of type chan T can only be used to transfer messages of type T. Special syntax is used to operate on them; <-ch is an expression that causes the executing goroutine to block until a value comes in over the channel ch, while ch <- x sends the value x (possibly blocking until another goroutine receives the value).
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 channel ch, sedangkan ch <- x mengirimkan nilai x (mungkin memblokir sampai lain goroutine menerima nilai).
The built-in switch-like select statement can be used to implement non-blocking communication on multiple channels; see below for an example.
Built-in switch-suka select pernyataan yang dapat digunakan untuk mengimplementasikan non-blocking komunikasi pada beberapa saluran; lihat di bawah untuk contoh.
Go has a memory model describing how goroutines must use channels or other operations to safely share data.
Go memiliki memori model yang menggambarkan bagaimana goroutines harus menggunakan saluran atau operasi lainnya untuk aman berbagi data.
The existence of channels does not by itself set Go apart from actor model-style concurrent languages like Erlang, where messages are addressed directly to actors (corresponding to goroutines).
Keberadaan saluran set berpisah dari aktor model-gaya konkuren bahasa seperti Erlang, di mana pesan yang ditujukan langsung kepada pelaku (sesuai dengan goroutines).
Channels have also found uses further from the usual notion of interprocess communication, like serving as a concurrency-safe list of recycled buffers, implementing coroutines (which helped inspire the name goroutine), and implementing iterators.
Saluran juga telah ditemukan menggunakan lebih dari biasanya gagasan interprocess communication, seperti melayani sebagai concurrency-daftar aman dari daur ulang buffer, pelaksana coroutines (yang membantu menginspirasi nama goroutine), dan menerapkan iterator.
Unlike previous concurrent programming languages such as Occam or Limbo (a language on which Go co-designer Rob Pike worked), Go does not provide any built-in notion of safe or verifiable concurrency.
Tidak seperti sebelumnya serentak bahasa pemrograman seperti Occam atau Limbo (pekerjaan bahasa co-desainer Go Rob Pike ), Go tidak menyediakan built-in gagasan aman atau diverifikasi concurrency.
While the communicating-processes model is favored in Go, it is not the only one: all goroutines in a program share a single address space.
Sedangkan komunikasi-proses model ini disukai di Go, itu bukan hanya satu: semua goroutines dalam program berbagi satu ruang alamat.
Although Go's concurrency features are not aimed primarily at parallel processing, they can be used to program shared-memory multi-processor machines.
Meskipun Go concurrency fitur yang tidak ditujukan terutama untuk pemrosesan paralel, mereka dapat digunakan untuk program memori bersama multi-prosesor mesin.
Various studies have been done into the effectiveness of this approach.
Berbagai studi telah dilakukan untuk keefektifan pendekatan ini.
One of these studies compared the size (in lines of code) and speed of programs written by a seasoned programmer not familiar with the language and corrections to these programs by a Go expert (from Google's development team), doing the same for Chapel, Cilk and Intel TBB.
salah Satu studi membandingkan ukuran (dalam baris kode) dan kecepatan program yang ditulis oleh programmer 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.
The study found that the non-expert tended to write divide-and-conquer algorithms with one go statement per recursion, while the expert wrote distribute-work-synchronize programs using one goroutine per processor core.
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 program dengan menggunakan salah satu goroutine per prosesor.
The expert's programs were usually faster, but also longer.
Ahli program-program yang biasanya lebih cepat, tapi juga lebih lama.
Specifically, unless a program explicitly synchronizes via channels or other means, writes from one goroutine might be partly, entirely, or not at all visible to another, often with no guarantees about ordering of writes.
Secara khusus, kecuali program 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.
Furthermore, Go's internal data structures like interface values, slice headers, hash tables, and string headers are not immune to data races, so type and memory safety can be violated in multithreaded programs that modify shared instances of those types without synchronization.
Selain itu, Go struktur data 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.
Instead of language support, safe concurrent programming thus relies on conventions; for example, Chisnall recommends an idiom called "aliases xor mutable", meaning that passing a mutable value (or pointer) over a channel signals a transfer of ownership over the value to its receiver.
Bukannya dukungan bahasa, aman concurrent programming dengan demikian bergantung pada konvensi; misalnya, Chisnall merekomendasikan sebuah ungkapan yang disebut "alias xor bisa berubah", yang berarti bahwa yang lewat bisa berubah nilai (atau pointer) melalui saluran sinyal yang mentransfer kepemilikan atas nilai kepada penerima.:155 Go sengaja menghilangkan fitur-fitur tertentu yang umum dalam bahasa lain, termasuk (implementasi) warisan, pemrograman generik, pernyataan, pointer aritmetika, dan konversi tipe implisit.
Tools and libraries distributed with Go suggest standard approaches to things like API documentation (godoc), testing (go test), building (go build), package management (go get), and so on.
Alat dan perpustakaan didistribusikan dengan pendekatan Go suggest standard untuk hal-hal seperti dokumentasi API (godoc), pengujian (go test), bangunan (go build), manajemen paket (go get), dan sebagainya.
The main Go distribution includes tools for building, testing, and analyzing code: go build, which builds Go binaries using only information in the source files themselves, no separate makefiles go test, for unit testing and microbenchmarks as well as fuzzing go fmt, for formatting code go install, for retrieving and installing remote packages go vet, a static analyzer looking for potential errors in code go run, a shortcut for building and executing code go doc, for displaying documentation go generate, a standard way to invoke code generators go mod, for creating a new module, adding dependencies, upgrading dependencies, etc. go tool, for invoking developer tools (added in Go version 1.24)
Distribusi Go bisanya memiliki alat-alat: go build, yang membangun binari Go biner hanya menggunakan informasi dalam sumber file sendiri, tidak terpisah makefiles go test, untuk unit 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 go 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.
An ecosystem of third-party tools adds to the standard distribution, such as gocode, which enables code autocompletion in many text editors, goimports, which automatically adds/removes package imports as needed, and errcheck, which detects code that might unintentionally ignore errors.
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.