Wed . 20 Feb 2020

Git (programlama dili)

Golang sık sık golang olarak adlandırılan, Robert Griesemer, Rob Pike ve Ken Thompson tarafından 2007 yılında Google'da [13] oluşturulan ücretsiz ve açık kaynak kodlu bir [12] programlama dilidir [10] Bu, geleneğinde derlenmiş, statik olarak yazılmış bir dildir Çöp toplama, sınırlı yapısal yazma, [3] bellek güvenliği özellikleri ve CSP tarzı eşzamanlı programlama özellikleri ile Algol ve C eklendi [14]
Dil Kasım 2009'da duyuruldu; Google'ın bazı üretim sistemlerinde, [15] ve diğer firmalar tarafından kullanılmaktadır. İki büyük uygulama vardır: Google'ın Go derleyicisi "gc", açık kaynaklı yazılım olarak geliştirilmiştir ve Linux, OS X, Windows, çeşitli BSD ve Unix sürümleri ve 2015'ten beri akıllı telefonlar da dahil olmak üzere mobil cihazlar [16] İkinci bir derleyici, gccgo, bir GCC ön ucudur [17] [18] "gc" araç zinciri, sürüm 15'ten beri kendi kendini barındırıyor [19]
İçindekiler 1 Tarihçe 2 Dil tasarımı
21 Eleştiri
22 Sözdizimi
23 Türler
231 Arayüz sistemi
24 Paket sistemi
25 Eşzamanlılık: goroutines ve kanallar
251 Paralel programlama için uygunluk
252 Yarış durumu güvenliği eksikliği
26 İhmaller
3 Kurallar ve kod stili
4 Dil araçları
5 Örnekler
51 Merhaba dünya
52 Eşzamanlılık örneği
Go kullanarak 6 proje
7 Alım
8 Anlaşmazlık adlandırma
9 Ayrıca bkz. 10 Notlar
11 Referanslar
12 Dış bağlantılar
121 Topluluk ve konferanslar
Tarihçe
Git orig Google mühendisleri Robert Griesemer, Rob Pike ve Ken Thompson tarafından, olumlu özelliklerini korurken diğer dillerin ortak eleştirilerini çözecek yeni bir programlama dili tasarlamak için bir deney olarak yayınlandı [20] Yeni dil: Java ve C ++ gibi büyük sistemlere ölçeklendirilebilir;
çok fazla zorunlu anahtar kelime ve tekrar olmadan üretken ve okunabilir olabilir [21] "dinamik sayfalar gibi" sayfada ışık "; takım gerektirmez, ancak iyi destekler,
ağ iletişimi ve çok işlemciliği destekleyin
Daha sonraki röportajlarda, dil tasarımcılarının üçü de C ++ 'nın karmaşıklığından duydukları hoşnutsuzluklarını yeni bir dil tasarlamak için birincil motivasyon olarak gösterdi [22] [23] [24]
Go 10 Mart 2012'de piyasaya sürüldü [25]
Go 17, "bir küçük dil değişikliği" [26] ve bir bağlantı noktasını macOS 1012 Sierra'ya ve bazı deneysel bağlantı noktalarına ekledi, örneğin Linux on z Systems linux / s390x için Bazı kitaplık değişiklikleri geçerlidir ve ör. Unicode 90 artık desteklenmektedir
Dil tasarımı
Go recog C geleneğinde nizably, ancak kısalık, basitlik ve güvenliği artırmak için birçok değişiklik yapar Aşağıda Go tanımlayan özelliklere kısa bir genel bakış verilmiştir:
Dinamik dillerde daha yaygın olan kalıpları benimseyen bir sözdizimi ve çevre: [27]
İsteğe bağlı özlü değişken bildirimi ve tür çıkarımı ile başlatma: x = 0 var var x int = 0;
Hızlı derleme süreleri [28]
Uzaktan paket yönetimi git [29] ve çevrimiçi paket belgeleri [30]
Belirli sorunlara farklı yaklaşımlar:
Yerleşik eşzamanlılık ilkelleri: hafif süreçler goroutinleri, kanalları ve select deyimi
Sanal kalıtım yerine bir arabirim sistemi ve sanal olmayan yerine tür gömme miras
Varsayılan olarak, harici bağımlılıkları olmayan statik olarak bağlı yerel ikili dosyalar üreten bir araç zinciri
Dil belirtimini, bir programcının kafasında tutulacak kadar basit tutma arzusu, kısmen benzer dillerdeki ortak özellikleri atlayarak
Eleştirmen ism
Go eleştirmenleri şunu derler:
derleme zamanı jeneriklerinin eksikliği kod çoğaltmasına yol açar, metaprogramlama statik olarak kontrol edilemez [32] [33] ve standart kütüphane jenerik algoritmalar sunamaz [34]
dil eksikliği örneğin operatör aşırı yüklemesi yoluyla genişletilebilirlik, belirli görevleri daha ayrıntılı hale getirir [32] [35]
Tip sisteminin Hindley-Milner yazım eksikliğinin güvenliği ve / veya ifadeyi engellediği [36] [37]
duraklamalar ve ek yük çöp toplama GC limiti Go'nun sistem programlamada manuel bellek yönetimine sahip dillerle karşılaştırıldığında kullanımı [32] [36]
Dil tasarımcıları bu değiş tokuşların Go'nun başarısı için önemli olduğunu ve [38] ileride bir tür genel programlama eklemeye ve kod üretme yöntemlerini standartlaştırma gibi alanlarda pragmatik iyileştirmelere açık olduklarını ifade etseler de [40] GC ile ilgili olarak, Go savunucuları daha sonra duraklama süresinin kısalmasına işaret ediyor sürümler [41] örn. Go 16, kabul ederken g GC algoritmaları gerçek zamanlı olarak zor değil
Sözdizimi
Go'nun sözdizimi, kodu kısa ve okunabilir tutmayı amaçlayan C'den gelen değişiklikleri içerir. Programcının i: = 3 veya s yazmasına olanak tanıyan birleşik bir bildirim / başlatma operatörü eklendi : = "bazı kelimeler", değişken türlerini belirtmeden Bu C'nin int i = 3'üyle tezat oluşturur; ve const char s = "bazı kelimeler"; Noktalı virgüller hala ifadeleri sonlandırır, ancak bir satırın sonunda meydana geldiklerinde örtük olur İşlevler birden fazla değer döndürebilir ve bir sonuç döndürürse, err çifti bir işlevin Go [a] Go eklentisindeki bir hatayı göstermesinin geleneksel yoludur. Yapı parametrelerini ada göre başlatmak ve haritaları ve dilimleri başlatmak için gerçek sözdizimleri C'nin döngü için üç ifadesine alternatif olarak, Go'nun aralık ifadeleri diziler, dilimler, dizeler, haritalar ve kanallar üzerinde kısa yinelemelere izin verir
Türler
Git sayısal yerleşik bayt, int64, float32, vb. dahil olmak üzere bir dizi yerleşik tür vardır, booleans ve karakter dizeleri string Dizeler değişmezdir; işlevler yerine yerleşik işleçler ve anahtar sözcükler birleştirme, karşılaştırma ve UTF-8 kodlama ve kod çözme sağlar [42] Kayıt türleri struct anahtar sözcüğüyle tanımlanabilir
Her T türü ve her negatif olmayan tamsayı sabiti n için, R, [n] T ile gösterilen bir dizi tipidir; bu nedenle farklı uzunluktaki diziler farklı tiptedir Dinamik diziler "dilim" olarak mevcuttur, bazı T tipi için [] T olarak belirtilir. Bunlar, diziyi genişletmek için yeni belleğin ne zaman tahsis edilmesi gerektiğini belirten bir uzunluk ve kapasiteye sahiptir. temel bellek [43] [44] [45]
İşaretçiler tüm türler için kullanılabilir ve işaretçi-T türü gösterilir T Adres alma ve dolaylı kullanım & amp; ve C'deki gibi işleçler veya yöntem çağrısı veya öznitelik erişim sözdizimi üzerinden dolaylı olarak gerçekleşir [46] Standart kitaplıktaki özel unsafePointer türü dışında işaretçi aritmetiği yoktur
Bir çift K, V türü için map [K] V, tip-K tuşlarını tip-V değerleriyle eşleyen karma tabloların türüdür Karma tablolar, özel sözdizimi ve yerleşik işlevlerle dile yerleştirilir chan T, T tipi arasındaki değerlerin gönderilmesine izin veren bir kanaldır eşzamanlı Go işlemleri
Arabirimler desteğinin yanı sıra, Go'nun tür sistemi nominaldir: type anahtar sözcüğü, bir yapı durumunda aynı düzene sahip diğer adlandırılmış türlerden farklı olan yeni bir adlandırılmış tür tanımlamak için kullanılabilir , aynı sırayla aynı üyeler Türler arasındaki bazı dönüşümler, örneğin çeşitli tamsayı türleri arasında önceden tanımlanmıştır ve yeni bir tür eklemek ek dönüşümler tanımlayabilir, ancak adlandırılan türler arasındaki dönüşümler her zaman açıkça çağrılmalıdır [47]. type anahtar kelime def için kullanılabilir ine, 32 bit işaretsiz tamsayı olan IPv4 adresleri için bir tür:
ipv4addr türünü uint32
Bu tür tanımıyla ipv4addrx, uint32 değerini x'i bir IP adresi olarak yorumlar ipv4addr türünün değişkenine x atamak, type error
Sabit ifadeler ya tiplenmiş ya da "tiplenmemiş" olabilir; yazılan bir değişkene atandıklarında bir tür verilir, temsil ettikleri değer bir derleme zamanı denetiminden geçerse [48]
İşlev türleri func anahtar sözcüğü ile gösterilir; sıfır veya daha fazla parametre alır ve tümü yazılan sıfır veya daha fazla değer döndürür Parametre ve dönüş değerleri bir işlev türünü belirler; bu nedenle, funcstring, int32 int, error, bir dize ve 32 bit işaretli tam sayı alan ve varsayılan genişlik işaretli bir tamsayısını ve yerleşik arabirim türü hatasının değerini döndüren işlevlerin türüdür
Tüm adlandırılmış türler onunla ilişkili bir yöntem kümesi var Yukarıdaki IP adresi örneği, bir adresi insan tarafından okunabilir bir temsile dönüştürmek için bir yöntemle genişletilebilir, viz,
// Bu sıfır yayın adresi 255255255255
func addr ipv4addr ZeroBroadcast bool
Nominal yazım nedeniyle, bu yöntem tanımı ipv4addr'ye bir yöntem ekler, ancak uint32 üzerinde değil Yöntemler özel tanım ve çağrı sözdizimine sahipken, farklı bir yöntem türü yoktur [49]
Arabirim sistemi
Go sağlar sınıf mirasının yerini alan iki özellik
Birincisi, otomatik bir bileşim biçimi [50] veya temsilci seçme [51] olarak görüntülenebilen gömme işlemidir: 51
İkincisi, çalışma zamanı polimorfizmi sağlayan arayüzleridir [52] : 266 Arayüzler, diğer ortamlarda sınırlı bir yapısal tipleme sağlar nominal tip Go sistemi Bir arabirimin tüm yöntemlerini uygulayan herhangi bir tür, o arabirime uygundur Go arabirimleri, Smalltalk programlama dilindeki protokollerden sonra tasarlanmıştır [53] Birden fazla kaynak, Go arabirimini açıklarken ördek yazma terimini kullanır [54] [55] Ördek yazma terimi tam olarak tanımlanmamış ve bu nedenle yanlış olmasa da, genellikle tür uyumluluğunun statik olarak denetlenmediğini ima eder Bir Go arabirimine uyumluluk, bir tür onaylaması gerçekleştirme durumu dışında Go derleyicisi tarafından statik olarak denetlendiğinden, Go yazarları kullanmayı tercih eder yapısal yazım terimi
Bir arabirim, gerekli yöntemleri ve türlerini listeleyerek bir dizi türü belirtir ve gerekli yöntemlere sahip herhangi bir türden memnun olur. Uygulama türlerinin, arabirimlerin uygulanmasını belirtmeleri gerekmez; ve Circle şöyle tanımlanır:
import "math"
type Şekil arayüzü
type Square struct
func sq Square Area float64
type Circle struct
func c Circl e Alan float64
o zaman hem Kare hem de Daire dolaylı olarak bir Şekildir ve Şekil tipi bir değişkene atanabilir [52]: 263-268 Resmi dilde, Go'nun arayüz sistemi nominal yazım yerine yapısal sağlar Arayüzler diğer arayüzleri gömebilir katıştırılmış arabirimi uygulayan türlerden tam olarak memnun olan birleşik bir arabirim oluşturma ve yeni tanımlanan arabirimin eklediği tüm yöntemler [52]: 270
Go standart kitaplığı, çeşitli yerlerde jeneriklik sağlamak için arabirimler kullanır, Reader ve Yazıcı kavramlarını temel alan giriş / çıkış sistemi dahil [52]: 282–283
Go, arabirimler aracılığıyla çağrı yöntemlerinin yanı sıra, çalışma zamanı türü denetimi ile arabirim değerlerinin diğer türlere dönüştürülmesine izin verir Dil yapıları bunun için tek bir potansiyel tipine karşı kontrol eden tip iddiası, [56] ve birden fazla türe karşı kontrol eden tip anahtarı, [57]
Boş arayüz arayüzü önemli bir köşe örneğidir çünkü herhangi bir somut türdeki bir öğeye Java veya C # içindeki Object sınıfına benzer, ancak boş arabirimin Java ve C # için int gibi yerleşik türler de dahil olmak üzere herhangi bir türden memnun olması farkıyla, bir Object değişkeni yalnızca referans türü [52] örneklerini tutun: Boş arabirimi kullanan kod, yalnızca başvurulan nesne üzerindeki yöntemleri veya yerleşik işleçleri çağıramaz, ancak arabirim değerini depolayabilir, daha yararlı bir türe dönüştürmeyi dener. bir tür iddiası veya tür anahtarı veya Go'nun yansıtma paketiyle inceleyin [58] Arayüz herhangi bir değere başvurabileceğinden, C'de geçersizlik gibi ek çalışma zamanı türü denetimleriyle statik yazım kısıtlamalarından kaçmanın sınırlı bir yoludur
Arabirim değerleri veriler için işaretçi ve çalışma zamanı türü bilgileri için ikinci bir işaretçi kullanılarak uygulanır [59] Go'daki işaretçiler kullanılarak uygulanan diğer bazı türlerde olduğu gibi, başlatılmamışsa arabirim değerleri sıfırdır [60]
Paket sistemi
Go'nun paket sisteminde her paketin bir yolu vardır, örneğin "c ompress / bzip2 "veya" golangorg / x / net / html "ve bir ad örneğin, bzip2 veya html Diğer paketlerin tanımlarına referanslar her zaman diğer paketin adıyla öneklenmelidir ve yalnızca diğer paketlerin büyük harfli isimlerine erişilebilir olmalıdır: ioReader herkese açık ancak bzip2reader değil [61] go get komutu GitHub, [62] gibi uzak bir depoda saklanan paketleri alabilir ve geliştiricilerin githubcom / user_name / gibi bir kaynak havuzuna karşılık gelen bir temel yol içinde paketler geliştirmeleri önerilir. package_name, standart kütüphaneye veya diğer harici kütüphanelere gelecekte eklenecek eklentilerle isim çarpışma olasılığını azaltmak için [63]
Rust için geçerli olan ve Cargo'nun nod sistemine benzer bir paket yönetimi çözümü sunmak için öneriler mevcuttur [64]
Go dili, eşzamanlı programlar yazmak için yerleşik olanaklara ve kütüphane desteğine sahiptir Eşzamanlılık yalnızca CPU paralelliğine değil, aynı zamanda eşzamansızlığa da neden olur: yavaş izin vermek olay tabanlı sunucularda olduğu gibi, program başka bir iş yaparken veritabanı veya ağ okuma gibi işlemler [65]
Birincil eşzamanlılık yapısı goroutine, bir tür hafif işlemdir. go anahtar sözcüğü yeni bir goroutinde bir işlev başlatır Dil belirtimi, goututinlerin nasıl uygulanması gerektiğini belirtmez, ancak geçerli uygulamalar bir Go işleminin goroutinlerini Erlang'da yapılan zamanlamaya benzer daha küçük bir işletim sistemi iş parçacığıyla çoğaltır [66]: 10
Klasik eşzamanlılık kontrol yapılarının çoğunu içeren mutlak kilitler, vb. Standart bir kütüphane paketi mevcut olsa da, [66]: 151–152 deyimsel eşzamanlı programlar, bunun yerine goroutinler arasında mesaj gönderen kanalları tercih ediyor [67] İsteğe bağlı tampon mağaza FIFO sırasındaki mesajlar [51]: 43 ve mesajları alınmadan önce goroutin gönderilmesine izin verin
Kanallar yazılır, böylece chan chant T tipi bir kanal yalnızca aktarım için kullanılabilir T tipi mesajlar Üzerinde çalışmak için özel sözdizimi kullanılır; Kanal kümelerinin varlığı Mesajların doğrudan aktörlere yönlendirildiği Erlang gibi aktör modeli tarzı eşzamanlı dillerden ayrı olun goroutinlere karşılık gelen; aktör stili Goroutinler ve kanallar arasında bire bir yazışma sağlayarak Go'da simüle edilebilir, ancak dil birden fazla goroutin'in bir kanalı paylaşmasına veya tek bir goroutin'in birden fazla kanalda gönderip almasına izin verir [66]: 147
Bu araçlardan, çalışan havuzlar, bir dosyanın indirilirken sıkıştırılmış ve ayrıştırıldığı, zaman aşımı ile arka plan çağrıları, bir dizi hizmete "fan-out" paralel çağrıları ve diğerleri gibi eşzamanlı yapılar inşa edilebilir. [68] Kanallar ayrıca, geri dönüştürülmüş tamponların eşzamanlı olarak güvenli bir listesi olarak hizmet etmek, [69] goroutin ismine ilham veren yardımcı programlar uygulamak ve [71] gibi süreçler arası iletişim kavramından daha fazla kullanım bulmuşlardır [71].
Go kanallarının eşzamanlılık ile ilgili yapısal kuralları ve alternatif kanal girişleri, Tony Hoare'in iletişim sıralı süreçler modelinden farklı olarak Occam veya Limbo gibi eşzamanlı programlama dillerinden farklı olarak, hich Go ortak tasarımcısı Rob Pike çalıştı, [72] Go herhangi bir yerleşik güvenli veya doğrulanabilir eşzamanlılık görüşü sağlamaz [73] İletişim süreçleri modeli Go'da tercih edilirken, tek kişi değildir: tüm goroutinler bir program tek bir adres alanını paylaşır Bu değişebilir nesnelerin ve işaretçilerin goroutines arasında paylaşılabileceği anlamına gelir; bkz. § Yarış durumu güvenliği eksikliği, aşağıda
Paralel programlama için uygunluk
Go'nun eşzamanlılık özellikleri öncelikle paralel işlemeye yönelik olmasa da, [65] paylaşılan bellek çok işlemcili makineleri programlamak için kullanılabilirler Bu çalışmalardan biri [74] Bu çalışmalardan biri, Google'ın geliştirme ekibinden bir Go uzmanı tarafından dile ve bu programlara yönelik düzeltmelere aşina olmayan deneyimli bir programcının yazdığı programların kod satırlarının boyutunu ve hızını karşılaştırdı. Chapel, Cilk ve Intel TBB için de aynı çalışma, uzman olmayan kişinin özyineleme başına bir go ifadesiyle bölme ve fethetme algoritmaları yazma eğiliminde olduğunu ve uzmanın işlemci başına bir gorout kullanarak dağıtma-çalışma-senkronizasyon programları yazdığını buldu. programlar genellikle daha hızlı, aynı zamanda daha uzundu [75]
Yarış koşullarının güvenliği eksikliği
Goroutinlerin paylaşılan verilere erişme ve yarış koşullarını mümkün kılma konusunda herhangi bir kısıtlama yoktur Specif ically, bir program açıkça kanallar veya başka yollarla senkronize olmadıkça, bir goroutinden gelen yazma işlemleri kısmen, tamamen veya tamamen görünmeyebilir, çoğu zaman yazma sırası konusunda garanti verilemez [73] Ayrıca, arayüz gibi Go'nun dahili veri yapıları değerler, dilim başlıkları, karma tablolar ve dize başlıkları yarış koşullarına karşı bağışık değildir, bu nedenle bu türlerin paylaşılan örneklerini eşitleme olmadan değiştiren çok iş parçacıklı programlarda tür ve bellek güvenliği ihlal edilebilir [76] [77]
Dil yerine destek, güvenli eşzamanlı programlama böylece sözleşmelere dayanır; örneğin, Chisnall "bir kanal veya değişebilir takma ad" adı verilen bir deyimi önerir, yani bir kanalın üzerinden değiştirilebilir bir değer veya işaretçi geçirilmesi, değerin alıcıya aktarılmasını işaret eder [66]: 155
İhmaller
Go bilerek git uygulama kalıtımı, jenerik programlama, iddialar, işaretçi aritmetiği ve örtük tür dönüşümleri dahil olmak üzere diğer dillerde yaygın olan bazı özellikleri atlar
Bu dil özelliklerinden, Go yazarları jenerik programlamaya açık olduğunu ifade eder, açıkça iddialara ve işaretçi aritmetiğine karşı tartışır, tip mirasını daha kullanışlı bir dil vermek olarak atlamayı seçerken, bunun yerine dinamik dağıtım [b] ve yeniden kod kullanımı için kompozisyon elde etmek için arayüzlerin kullanılmasını teşvik etmek Kompozisyon ve temsil yetkisi aslında yapısal gömme tarafından büyük ölçüde otomatikleştirilir; araştırmacılar Schmager ve arkadaşlarına göre, bu özellik "kalıtımın birçok dezavantajına sahiptir: nesnelerin genel arayüzünü etkiler, ince taneli değildir, yani gömme üzerinde yöntem düzeyinde kontrol yoktur, gömülü nesnelerin yöntemleri gizlenemez, ve statiktir, bu da programcıların diğer dillerdeki programcıların aşırı miras olarak tanındığı ölçüde fazla kullanıp kullanmayacaklarını "açık değildir" [50]
Genel programlama ile ilgili olarak, bazı yerleşik işlevler aslında -generik, ancak bunlar özel durumlar olarak ele alınır; Rob Pike bunu bir noktada değiştirilebilecek dilin zayıflığı olarak adlandırıyor [43] Generics ile deneysel bir Go lehçesi için en az bir derleyici inşa eden dili tasarlayan, ancak onu yayınlamayan Google ekibi [78]
İstisnaları ilk kez atladıktan sonra, istisna benzeri panik / kurtarma mekanizması, Go yazarlarının tüm bir programı veya sunucu isteğini durdurması gereken gibi kurtarılamayan hatalar için veya hataları yaymak için bir kısayol olarak kullanmasını önerdiği dile eklendi. bir paket içerisindeki ancak paket sınırları ötesinde olmayan yığın; orada, hata iadeleri standart API'dir [79] [80] [81] [82]
Kurallar ve kod stili
Go yazarları Go programlarının tarzını ve tasarımını biçimlendirmek için büyük çaba harcadı:
Girinti , boşluk ve kodun diğer yüzey seviyesi ayrıntıları gofmt aracı tarafından otomatik olarak standartlaştırılır golint otomatik olarak ek stil kontrolleri yapar
Go ile dağıtılan araçlar ve kütüphaneler, API dokümanları godoc [83], test go test, building go build, package management go vb.
Go, döngüsel bağımlılıkları, kullanılmayan değişkenleri veya içe aktarmaları ve örtük tür dönüşümleri yasaklamak gibi diğer dillerde önerilen kuralları uygular
Belirli özelliklerin ihmal edilmesi ve C ++ tarzı deneme / nihayet blokları gibi işlevsel programlama kısayolları, belirli bir açık, somut ve zorunlu programlama stilini teşvik etme eğilimindedir
İlk gün Go ekibi bir Go deyimleri koleksiyonu yayınladı ve daha sonra toplanan kod r Go stili ve kodlama felsefesini öğretmek için yorumları, görüşmeleri, resmi blog yayınlarını inceleyin
Dil araçları
Go, diğer araçların yanı sıra Go dağıtımında bulunan birçok hata dağıtımı, hata ayıklama, test etme ve kod çalıştırma araçlarını içerir ,
go build, sadece kaynak dosyalarındaki bilgileri kullanarak Go ikili dosyaları oluşturur, ayrı bir makefiles yok
teste, birim testi ve mikrobenç işaretler için
go fmt, kod biçimlendirme için
go get, for uzak paketleri alma ve yükleme
go vet, kodda olası hataları arayan statik bir analizör
git çalıştır, kod oluşturma ve çalıştırma kısayolu
godoc, belgeleri görüntüleme veya HTTP üzerinden sunma
gorename , değişkenleri, işlevleri, vb. tür güvenli bir şekilde yeniden adlandırmak için
go üret, kod üreteçleri çağırmak için standart bir yol
Ayrıca profil oluşturma ve hata ayıklama desteği, örneğin çöp toplama için çalışma zamanı enstrümantasyonu içerir duraklamalar ve bir yarış durumu test cihazı
Bir ekosistem var Birçok metin editöründe kodun otomatik tamamlanmasını sağlayan gocode gibi standart dağıtıma ek olarak üçüncü taraf araçların teması, bir Go ekibi üyesinin goimport'ları, gerektiğinde paket ithalatını otomatik olarak ekleyen / kaldıran errcheck, istemeden hataları göz ardı eder ve yaygın olarak kullanılan metin editörlerine dil desteği eklemek için daha fazla Eklenti mevcuttur ve en az bir IDE, LiteIDE "basit, açık kaynak, çapraz platform Go IDE" olarak markalıdır [84]
Örnekler
Merhaba dünya
İşte Go'da bir Merhaba dünya programı:
paketi ana
import "fmt"
func main
Eşzamanlılık örneği
Aşağıdaki basit program Go'nun eşzamanlılık özelliklerini gösterir eşzamansız bir program uygulamak İki "goroutine" hafif iş parçacığını başlatır: biri kullanıcının bir metin yazmasını beklerken, diğeri zaman aşımını uygular. select deyimi bu yordamlardan birinin ana rutine mesaj göndermesini bekler ve gelen ilk mesaj örneği Chisnall [66]: 152
paket ana



"fmt"
"time"
func readwordch chan string
func timeoutt chan bool
func main
Projeler Go
kullanma Bu bölüm birincil kaynaklara yapılan referanslara çok fazla dayanmaktadır Lütfen ikincil veya üçüncül kaynaklar ekleyerek bu bölümü iyileştirin Kasım 2015 Bu şablon mesajının nasıl ve ne zaman kaldırılacağını öğrenin
Go'daki bazı önemli açık kaynaklı uygulamalar şunları içerir:
Docker, Linux kapsayıcılarını dağıtmak için bir araç seti
Doozer, yönetilen barındırma sağlayıcısı Heroku tarafından bir kilit hizmeti [14]
geth Ethereum, paylaşılan bir dünya bilgi işlem platformu
InfluxDB, özellikle açık kaynaklı bir veritabanı zaman serisi verilerini yüksek kullanılabilirlik ve yüksek performans gereksinimleri ile işleme

Canonical'in bir hizmet düzenleme aracı olan Juju, Ubuntu Linux paketleyicileri
Tek bir kaynak yapılandırmasından birden fazla platform için aynı makine görüntüleri oluşturmak için bir araç olan Packer
Snappy, Canonical
Syncthi tarafından geliştirilen Ubuntu telefon paket yöneticisi ng, açık kaynaklı bir dosya senkronizasyonu istemci / sunucu uygulaması
Go kullanan bazı önemli açık kaynaklı çerçeveler:
Beego, Go'daki yüksek performanslı web çerçevesi, web uygulamaları ve arka uç hizmetleri için kullanılır [alıntı gerekli]
Martini, web uygulamaları / hizmetleri paketi [alıntı gerekli]
Gorilla, Go için bir web araç takımı [alıntı gerekli]
Enduro / X ASG, bir küme ara katmanı, uygulama sunucusu, dağıtılmış işlem ve çoklu işleme çerçevesi Go [alıntı gerekli]
Go'yu genel olarak diğer dillerle birlikte kullanan diğer kayda değer şirketler ve siteler, yalnızca aşağıdakileri içermez: [85] [kendi kendine yayımlanan kaynak] [86]
AeroFS, bazılarını geçiren özel bulut dosya senkronize cihaz sağlayıcısı Java'dan Go'ya mikro belleklerde büyük bellek ayak izi iyileştirmeleri yapıldı [87]
Programlı bir reklam şirketi olan Chango, gerçek zamanlı teklif verme sistemlerinde Go'yu kullanıyor [88]
Cloud Foundry, bir hizmet platformu [alıntı gerekli]
CloudFlare, delta kodlama proxy'si Railgun, dağıtılmış DNS servisi için, s şifreleme, günlüğe kaydetme, akış işleme ve SPDY sitelerine erişme araçları [89] [90]
Docker kapsayıcılarını kullanan Linux tabanlı bir işletim sistemi olan CoreOS [91]
Couchbase, Query ve Indexing hizmetleri Couchbase Sunucusu [92]
Dropbox, kritik bileşenlerinden bazılarını Python'dan Go'ya geçirdi [93]
Google, özellikle indirme sunucusu dlgooglecom [94] [96]
dahil olmak üzere birçok proje için MercadoLibre, birkaç ortak API için [alıntı gerekli]
MongoDB, MongoDB örneklerini yönetmek için araçlar [97]
Netflix, sunucu mimarilerinin iki kısmı için [98]
Novartis, dahili bir envanter sistemi için [alıntı gerekli]
Etkileşimli bir çevrimiçi sosyal müzik akışı web sitesi olan Plugdj [99]
Kurumsal, yüklenebilir yazılım oluşturmak için çoğaltılmış, Docker tabanlı PaaS [100]
SendGrid, Boulder, Colorado merkezli bir işlemsel e-posta dağıtımı ve yönetimi service [101]
SoundCloud, "düzinelerce sistem" için [102]
Splice, tüm arka uç API'si ve th ayrıştırıcıları için eir çevrimiçi müzik işbirliği platformu [103]
ThoughtWorks, sürekli teslimat ve anlık mesajlar etrafında bazı araçlar ve uygulamalar CoyIM [104]
Twitchtv, Python'dan taşınan IRC tabanlı sohbet sistemleri için [105]
Uber, yüksek hacimli coğrafi çit tabanlı sorguları ele almak için [106]
Zerodha, piyasa verilerinin gerçek zamanlı olarak izlenmesi ve akışı için [alıntı gerekli]
Alım
Go'nun ilk sürümü çok tartışmaya yol açtı
Arayüz sistemi, ve kasıtlı miras ihmali, bu dil özelliklerini Standart ML'ye benzeyen Michele Simionato tarafından övgüyle karşılandı ve buna “popüler bir dilin tasarım alanında [bu] belirli bir rotayı izlemediği bir utanç" dendi [107]
Engine Yard'da Dave Astels şöyle yazdı: [108]
Go'nun içine dalması son derece kolaydır Temel dil kavramları çok azdır ve sözdizimi temiz ve net ve açık olacak şekilde tasarlanmıştır Go hala deneysel ve hala biraz kenarlarda pürüzlü
Ars Technica intervie Go'nun yazarlarından biri olan Rob Pike ve neden yeni bir dile ihtiyaç duyulduğunu sordu: [109]
Sadece mevcut programlama dillerine özellikler eklemek yeterli değildi, çünkü bazen daha fazlasını elde edebilirsiniz. şeyleri uzaklaştırarak uzun vadede Sıfırdan başlamak ve her şeyi yeniden düşünmek istediler [Ama istemediler] geliştiricilerin zaten bildiklerinden çok fazla sapmak istediler çünkü Go'nun hedef kitlesini yabancılaştırmak istemediler
Go, Programlama Dili olarak adlandırıldı. TIOBE Programlama Topluluğu Endeksi tarafından 2009 yılının ilk yılında, Kasım ayında tanıtıldıktan sonra sadece 2 ay içinde 12 aylık popülerlikte daha fazla artış gösterdiği ve Ocak 2010'a kadar 13. sıraya yükseldiği için, [110] Pascal gibi yerleşik dilleri geride bırakarak Haziran 2015 itibariyle sıralaması endekste 50'nin altına düşerek COBOL ve Fortran'dan daha düşüktü [111] Ancak Eylül 2016 itibariyle [güncelleme] sıralaması 19'a yükseldi. önemli büyüme popülerlik ve evlat edinme [112]
Go ile ilgili olarak, Bruce Eckel şunları söyledi: [113]
C ++ 'ın karmaşıklığı yeni C ++' da daha da karmaşık hale geldi ve üretkenlik üzerindeki etkisi artık haklı değil C uyumlu bir dil kullanmak için C ++ programcısının atlaması gereken tüm çemberler artık bir anlam ifade etmiyor - sadece zaman ve çaba kaybı. Go, C ++ 'nın başlangıçta olduğu problem sınıfı için çok daha mantıklı bir Google mühendisi tarafından C ++ GCC, Java ve Scala ile karşılaştırıldığında 2011 yılının dilin ve onun gc uygulamasının değerlendirilmesi şunları buldu:
Go, ayrıca özlü ve standart bir gösterime izin veren ilginç dil özellikleri sunuyor Bu dilin derleyicileri hala hem performansı hem de ikili boyutları yansıtan olgunlaşmamış

- R Hundt [114]
Değerlendirme, Go kodunu geliştiren Go geliştirme ekibi Ian Lance Taylor'dan bir çürütme aldı Hundt'un makalesi, niyetinin farkında değildi ion'un kodunu yayınladığını ve sürümünün "asla deyimsel ya da verimli bir Go örneği olmayı amaçlamadığını" söylüyor; Russ Cox daha sonra Go kodunu ve C ++ kodunu optimize etti ve Go kodunu C ++ 'dan biraz daha hızlı ve kağıttaki "optimize edilmiş" koddan daha hızlı bir büyüklük sırasından daha fazla çalıştırdı [115]
Adlandırma anlaşmazlığı
10 Kasım 2009 tarihinde, dilin genel çıkış günü olan Go! programlama dili ünlem işaretine dikkat edin, 10 yıl boyunca geliştirdiği diliyle karışıklığı önlemek için Google'ın dilinde bir isim değişikliği istedi [116] McCabe “büyük adam” ın buharla patlamasıyla ilgili endişelerini dile getirdi. ve bu endişe, Google'ın resmi meselelerini yorumlayan 120'den fazla geliştirici ile adını değiştirdiğini söylerken, bazıları [117] sorunun Google'ın sloganı ile çeliştiğini bile söyleyerek yorumladı: Sorun olma [118] bir Google geliştiricisi tarafından 12 Ekim 2010 tarihinde "Talihsiz" özel durumuyla ve aşağıdaki yorumla kapatıldı: "Go adında birçok bilgi işlem ürünü ve hizmeti yayınlandığından bu yana 11 ay içinde iki dil arasında çok az karışıklık oldu"
Ayrıca bkz. Ücretsiz yazılım portalı
Programlama dillerinin karşılaştırması
Başka bir Google programlama dili Dart, UFCS, 'açık yöntemler' kullanmanın bir yolu Diğer dillerde
Notlar
^ Genellikle, sonuçlardan biri ve hata değerleri, türün sıfır değerinden farklı bir değere sahiptir; bazen her ikisi de, bir okuma veya yazma yalnızca kısmen tamamlanabildiği ve bazen de bir okuma 0 bayt döndürdüğü gibi yapar. Bkz. Yarı Değerli sorun: Çok değerli dönüş
^ Sorular "Yöntemlerin dinamik gönderilmesini nasıl elde ederim" ve " SSS'de neden tür kalıtım yok? [10]
Referanslar
Bu makale, Creative Commons Atıf 30 lisansı altında lisanslanan resmi Go öğreticisinden materyal içermektedir. ^ "SSS - Go Programlama Dili "Golangorg Alındı 2013-06-25
^" Yayın Geçmişi - Git Programlama Dili "golangorg Alındı 19 Ekim 2016
^ ab" Go "Go" neden "bildirimler" almıyor golangorg 1 Ekim 2015
^ Pike, Rob 2014-12-22 "Twitter'da Rob Pike" Alındı 2016-03-13 Go, ördek yazarak değil, yapısal yazarak var Tam arayüz memnuniyeti kontrol edilir ve gereklidir
^ "lang / go: go- 14 – Go programming language" OpenBSD ports 2014-12-23 Retrieved 2015-01-19 
^ "Go Porting Efforts" G o Language Resources cat-v 12 January 2010 Retrieved 18 January 2010 
^ "Text file LICENSE" The Go Programming Language Google Retrieved 5 October 2012 
^ "Additional IP Rights Grant" The Go Programming Language Google Retrieved 5 October 2012 
^ a b Pike, Rob 2014-04-24 "Hello Gophers" Retrieved 2016-03-11 
^ a b c "Language Design FAQ" golangorg 16 January 2010 Retrieved 27 February 2010 
^ "The Evolution of Go" Retrieved 2015-09-26 
^ https://golangorg/LICENSE
^ Kincaid, Jason 10 November 2009 "Google's Go: A New Programming Language That's Python Meets C++" TechCrunch Retrieved 18 January 2010 
^ a b Metz, Cade 5 May 2011 "Google Go boldly goes where no code has gone before" The Register 
^ "Go FAQ: Is Google using Go internally" Retrieved 9 March 2013 
^ "Google's In-House Programming Language Now Runs on Phones" wiredcom 19 August 2015 
^ "FAQ: Implementation" golangorg 16 January 2010 Retrieved 18 January 2010 
^ "Installing GCC: Co nfiguration" Retrieved 3 December 2011 Ada, Go and Objective-C++ are not default languages 
^ "Go 15 Release Notes" Retrieved 28 January 2016 The compiler and runtime are now implemented in Go and assembler, without C 
^ Pike, Rob 28 April 2010 "Another Go at Language Design" Stanford EE Computer Systems Colloquium Stanford University  Video available
^ "Frequently Asked Questions FAQ - The Go Programming Language" golangorg Retrieved 2016-02-26 
^ Andrew Binstock 18 May 2011 "Dr Dobb's: Interview with Ken Thompson" Retrieved 7 February 2014 
^ Pike, Rob 2012 "Less is exponentially more" 
^ Robert Griesemer 2015 "The Evolution of Go" 
^ "Release History" 
^ https://golangorg/doc/go17
^ Pike, Rob "The Go Programming Language" YouTube Retrieved 1 Jul 2011 
^ Rob Pike 10 November 2009 The Go Programming Language flv Tech talk Google Event occurs at 8:53 
^ Download and install packages and dependencies - go - The Go Programming Language; see godocorg for addresses and documentation of some packages
^ "GoDoc" godocorg 
^ Rob Pike, on The Changelog podcast
^ a b c Will Yager, Why Go is not Good
^ Egon Elbre, Summary of Go Generics discussions
^ Fitzpatrick, Brad "Go: 90% Perfect, 100% of the time" Retrieved 28 January 2016 
^ Danny Gratzer, Leaving Go
^ a b Jared Forsyth, Rust vs Go
^ Janos Dobronszki, Everyday Hassles in Go
^ Rob Pike, Less is exponentially more
^ The Go Authors, Frequently Asked Questions FAQ
^ Rob Pike, Generating code
^ Richard Hudson, Go 14+ Garbage Collection GC Plan and Roadmap
^ Rob Pike, Strings, bytes, runes and characters in Go, 23 October 2013
^ a b Pike, Rob 26 September 2013 "Arrays, slices and strings: The mechanics of 'append'" The Go Blog Retrieved 7 March 2015 
^ Andrew Gerrand, Go Slices: usage and internals
^ The Go Authors, Effective Go: Slices
^ The Go authors Selectors - The Go Programming Language Specification and Calls - The Go Programming Language Specification
^ "The Go Programming Language Specification" golangorg 
^ "The Go Programming Language Specification" golangorg 
^ "The Go Programming Language Specification" golangorg 
^ a b Schmager, Frank; Cameron, Nicholas; Noble, James 2010 GoHotDraw: evaluating the Go programming language with design patterns Evaluation and Usability of Programming Languages and Tools ACM 
^ a b Summerfield, Mark 2012 Programming in Go: Creating Applications for the 21st Century Addison-Wesley 
^ a b c d e Balbaert, Ivo 2012 The Way to Go: A Thorough Introduction to the Go Programming Language iUniverse 
^ "The Evolution of Go" talksgolangorg Retrieved 2016-03-13 
^ Diggins, Christopher 2009-11-24 "Duck Typing and the Go Programming Language" Dr Dobb's Retrieved 2016-03-10 
^ Ryer, Mat 2015-12-01 "Duck typing in Go" Retrieved 2016-03-10 
^ "The Go Programming Language Specification" golangorg 
^ "The Go Programming Language Specification" golangorg 
^ reflectValueOfi interface converts an interface to a reflectValue that can be further inspected
^ "Go Data Structures: Interfaces" Retrieved 15 November 2012 
^ "The Go Programming Language Specification" golangorg 
^ "A Tutorial for the Go Programming Language" The Go Programming Language Google Retrieved 10 March 2013 In Go the rule about visibility of information is simple: if a name of a top-level type, function, method, constant or variable, or of a structure field or method is capitalized, users of the package may see it Otherwise, the name and hence the thing being named is visible only inside the package in which it is declared 
^ "go - The Go Programming Language" golangorg 
^ "How to Write Go Code" golangorg The packages from the standard library are given short import paths such as "fmt" and "net/http" For your own packages, you must choose a base path that is unlikely to collide with future additions to the standard library or other external libraries If you keep your code in a source repository somewhere, then you should use the root of that source repository as your base path For instance, if you have a GitHub account at githubcom/user, that should be your base path 
^ "Go Packaging Pr oposal Process" 
^ a b Rob Pike, Concurrency is not Parallelism
^ a b c d e Chisnall, David 2012 The Go Programming Language Phrasebook Addison-Wesley 
^ "Effective Go" golangorg 
^ "Go Concurrency Patterns" golangorg 
^ John Graham-Cumming, Recycling Memory Buffers in Go
^ treego
^ Ewen Cheslack-Postava, Iterators in Go
^ Brian W Kernighan, A Descent Into Limbo
^ a b "The Go Memory Model" Google Retrieved 5 January 2011 
^ Tang, Peiyi 2010 Multi-core parallel programming in Go PDF Proc First International Conference on Advanced Computing and Communications 
^ Nanz, Sebastian; West, Scott; Soares Da Silveira, Kaue Examining the expert gap in parallel programming PDF Euro-Par 2013 CiteSeerX 10113686137 
^ Russ Cox, Off to the Races
^ Rob Pike October 25, 2012 "Go at Google: Language Design in the Service of Software Engineering" Google, Inc  "There is one important caveat: Go is not purely memory safe in the presence of concurrency"
^ "E2E: Erik Meijer and Robert Griesemer – Going Go" Channel 9 Microsoft 7 May 2012 
^ Panic And Recover, Go wiki
^ "Weekly Snapshot History" golangorg 
^ "Proposal for an exception-like mechanism" golang-nuts 25 March 2010 Retrieved 25 March 2010 
^ "Effective Go" golangorg 
^ "Effective Go" golangorg 
^ LiteIDE,
^ Erik Unger, The Case For Go
^ Andrew Gerrand, Four years of Go, The Go Blog
^ Hugues Bruant "AeroFS - A little golang way" AeroFS 
^ "Chango" GitHub 
^ John Graham-Cumming, Go at CloudFlare
^ John Graham-Cumming, What we've been doing with Go
^ "Go at CoreOS" 
^ "Couch base" GitHub 
^ Patrick Lee, Open Sourcing Our Go Libraries, 7 July 2014
^ "dlgooglecom: Powered by Go" golangorg 
^ Matt Welsh, Rewriting a Large Production System in Go
^ David Symonds, High Performance Apps on Google App Engine
^ "Mongo DB" GitHub 
^ "The Netflix Tech Blog: Application data caching using SSDs" 
^ Steven Sacks "Search & Advances" plugdj tech blog 
^ "ReplicatedHQ" GitHub 
^ Tim Jenkins "How to Convince Your Company to Go With Golang" SendGrid's Email Deliverability Blog 
^ Peter Bourgon, Go at SoundCloud
^ "Go at Google I/O and Gopher SummerFest - The Go Blog" golangorg 
^ TWSTRIKE "CoyIM" ThoughtWorks STRIKE team 
^ Rhys Hiltner, Go’s march to low-latency GC, 5 July 2016
^ "How We Built Uber Engineering's Highest Query per Second Service Using Go" Uber Engineering Blog Retrieved 2016-03-02 
^ Simionato, Michele 15 November 2009 "Interfaces vs Inheritance or, watch out for Go!" artima Retrieved 15 November 2009 
^ Astels, Dave 9 November 2009 "Ready, Set, Go!" engineyard Retrieved 9 November 2009 
^ Paul, Ryan 10 November 2009 "Go: new open source programming language from Google" Ars Technica Retrieved 13 November 2009 
^ jt "Google's Go Wins Programming Language Of The Year Award" jaxenter Retrieved 5 December 2012 
^ "TIOBE Programming Community Index for June 2015" TIOBE Software June 2015 Retrieved 5 July 2015 
^ "TIOBE Programming Community Index for September 2016" TIOBE Software September 2016 Retrieved 17 September 2016 
^ Bruce Eckel 27 August 2011 "Calling Go from Python via JSON-RPC" Retrieved 29 August 2011 
^ Hundt, Robert 2011 Loop recognition in C++/Java/Go/Scala PDF Scala Days 
^ Metz, Cade 1 July 2011 "Google Go strikes back with C++ bake-off" The Register 
^ Brownlee, John 13 November 2009 "Google didn't google "Go" before naming their programming language'" 
^ Claburn, Thomas 11 November 2009 "Google 'Go' Name Brings Accusations Of Evil'" InformationWeek Retrieved 18 January 2010 
^ "Issue 9 - go — I have already used the name for MY programming language" Google Code Google Inc Retrieved 12 October 2010 
External links
Wikimedia Commons has media related to Go programming language
Official website
A Tour of Go official
Go Programming Language Resources unofficial
Co mmunity and conferences
Gopher Academy, Gopher Academy is a group of developers working to educate and promote the Go community
Golangprojectscom, lists programming jobs and projects where companies are looking for people that know Go
GopherCon The first Go conference Denver, Colorado, USA April
Gopher Gala The first Go hackathon
GopherConIndia The first Go conference in India Bangalore Feb
GolangUK The first Go conference in UK London
dotGo European conference Paris, France
GolangShow Go audio podcast GolangShow
Golang Argentina Gophers community blog in Argentina
v
e
Programming languages
Comparison
Timeline
History
Assembly
BASIC
C
C++
C#
COBOL
Fortran
Go
Haskell
Java
JavaScript JS
Lisp
Lua
Objective-C
Pascal
Perl
PHP
Python
Ruby
Shell
Smalltalk
Swift
Visual Basic NET VBNET
more
Category
Comparison
Lists
Alphabetical
Categorical
Generational
No n-English-based
v
e
Google
Overview
Alphabet Inc
History
List of mergers and acquisitions
Products
Criticism
Privacy concerns
Censorship
Domains
Easter eggs
Don't be evil
Advertising
AdMob
Adscape
AdSense
AdWords
Analytics
Contributor
Partners
DoubleClick
DoubleClick for Publishers
Wallet
Communication
Allo
Alerts
Apps Script
Duo
Calendar
Contacts
Gmail
history
interface
Google+
Groups
Hangouts
Inbox
Sync
Text-to-Speech
Translate
Transliteration
Voice
Software
Assistant
Chrome
for Android
for iOS
Chrome Web Store
Apps
Extensions
Cloud Print
Earth
Sky
Moon
Mars
Gadgets
Gboard
Goggles
IME
Pinyin
Japanese
Photos
Keep
News & Hava Durumu
Şimdi
OpenRefine
Arama
Araç Çubuğu
Platformlar
Hesap Android Android sürümü sürüm geçmişi
yazılım geliştirme
Android Oto
Android Ödeme
Android TV
Android Wear
Kimlik Doğrulayıcı
Gövde
Kitaplar
Kütüphane Projesi
Caja
Karton
Cast
Chromecast
Chrome OS
Chromebit
Chromebook
Chromebox
Chrome Zone
Cloud Platform
App Engine
BigQuery
BigTable
Hesaplama Motoru
Depolama
Kontakt Lens
Özel Arama
Dart
Daydream
Earth Motor
Fit
GFS
Cam
Go
G Suite
Sınıf
Ev
Jamboard
Marketplace
Yerel İstemci
Nexus
OnHub
OpenSocial
Pixel
Play
Kitaplar
Oyunlar
Filmler & amp; TV
Müzik
Gazetelik
Kamu DNS
Cüzdan
Wifi
Geliştirme
araçlar
AJAX API'leri
App Inventor
Kapatma Araçları
Geliştiriciler
GData
Googlebot
Guava
Guice
GWS
KML
Kythe
MapReduce
Mediabot
Site Haritaları
Kod Yaz Saati
Web Toolkit
Arama Konsolu
Web Sitesi Optimize Edici
Swiffy
Yayıncılık
Blogger
Bookmarks
Drive
Belgeler, E-Tablolar, Slaytlar, Formlar
Çizimler
Haritalarım
Füzyon Tabloları
Etki Alanları
FeedBurner
Harita Oluşturucusu
Panoramio
Siteler
YouTube
YouTube Instant
YouTube Red
Vevo
Zagat
Arama
zaman çizelgesi
Cihaz
Blog Arama
Kitaplar
Ngram Viewer
Özel Arama
Finans
Uçuşlar
Görüntüler
Haritalar
Mars
Moon
Sky
Sokak Görünümü
Kapsam
Yarışma
Gizlilik endişeleri
Haberler
Arşiv
Patentler
Genel Veriler
Akademik
Alışveriş
Usenet
Videolar
Algoritmalar
PageRank
Panda
Penguen
Hummingbird
Özellikler
Web Geçmişi
Kişiselleştirilmiş
Gerçek Zamanlı
Anında sararmış ch
Güvenli Arama
Sesli Arama
Analiz
Arama Trendleri
Trendler Bilgi Grafiği
Bilgi Kasası
Durdurulan
Aardvark
Yanıtlar
Tarayıcı Sync
Base
Buzz
Ödeme
Chrome Frame
Tıkla ve Ara
Cloud Connect
Kod Arama
Akımlar
Masaüstü
Sözlük
Dizin
Dodgeball
Hızlı Flip
Friend Connect
Dişliler GOOG-411
Google TV
Jaiku
Knol
Sağlık
iGoogle
Görüntü Labeler
Labs
Latitude
Canlı
Mashup Editör
Notebook
Orkut
Pack
Sayfa Oluşturucu
Picasa
Picasa Web Albümleri
Picnik
PowerMeter
Soru & Cevap; A
Reader
Script Converter
SearchWiki
Sidewiki
Slayt
Squared
Talk
Güncelleyici
Urchin
Videolar
Dalga
Web Hızlandırıcı
İnsanlar
Al Gore
Alan Eustace
Alan Mulally
Amit Singhal
Ann Mather
David Drummond
Eric Schmidt | Jeff Dean
John Doerr
John L Hennessy
Krishna Bharat
Matt Cutts | Patrick Pichette
Paul Otellini
Omid Kordestani
Rachel Whetstone
Rajen Sheth
Ram Shriram
Ray Kurzweil
Ruth Porat
Salar Kamangar
Shirley M Tilghman
Sundar Pichai
Susan Wojcicki
Urs Hölzle
Vint Cerf
Kurucular
Larry Page
Sergey Page Brin
Diğer
Sanat Projesi
Calico
Güncel
Chrome Deneyleri
Kod giriş
Kod Sıkıştırma
Geliştirici Günü
Google İş Grupları
Made in Kod
Veri Özgürlüğü
Paket Servisi
Google Geliştirici Uzmanı
Google for Work
Sürücüsüz araba
Earth Outreach
Fiber
GV
Google Çin
Google Express
Googlization
Hibeler
Googleorg
Lunar X Ödülü
Project Fi
Material Design
Motorola Mobility
WiFi
X
Events
Science Fair
Searchology
I/O
Developer Day
AtGoogleTalks
Code Jam
Highly Open Participation Contest
Code-in
Projects
Ara
Loon
Tango
Sunroof
Real estate
111 Eighth Avenue
Googleplex
Logo
Doodle4Google
Google Doodles
Related
AI Challenge
Bomb
Goojje
Monopoly City Streets
Unity
Category
Portal
v
e
Rob Pike
Operating systems
Plan 9 from Bell Labs
Inferno
Programming languages
Newsqueak
Limbo
Go
Sawzall
Software
acme
Blit
sam
rio

Publications
The Practice of Programming
The Unix Programming Environment
Other
Renée French
Mark V Shaney
UTF-8
v
e
Ken Thompson
Operating systems
Unix
Plan 9 from Bell Labs
Programming languages
B
Bon
Go
Software
Belle
ed
grep
sam
Space Travel
Thompson shell
Other
UTF-8


Go (programming language)

Random Posts

Timeline beyond October following the September 11 attacks

Timeline beyond October following the September 11 attacks

The following list contains certain dates beyond October 2001 involving the September 11 attacks ...
Smash Hits

Smash Hits

Smash Hits was a pop music magazine, aimed at teenagers and young adults and originally published in...
2014–15 USC Trojans women's basketball team

2014–15 USC Trojans women's basketball team

The 2014–15 USC Trojans women's basketball team will represent University of Southern California dur...
Trademark classification

Trademark classification

A trademark classification is a way the trademark examiners and applicants' trademark attorneys arra...