halaman ini http://golang.org/doc/go_faq.html menulis:
meskipun Go memiliki tipe statis, bahasa ini mencoba membuat tipe terasa lebih ringan daripada bahasa OO pada umumnya
Jadi pertanyaan saya adalah apakah ini diketik dengan aman dengan generik (seperti C #) atau diketik secara longgar (seperti javascript) atau opsional (seperti opsi ketat di Vb.Net)
programming-languages
algorithms
google
go
type-safety
Pacerier
sumber
sumber
Jawaban:
Jenis keamanan bukan jenis hitam-putih-aman atau tidak. Ini lebih dari spektrum dan beberapa bahasa bisa lebih aman daripada yang lain (dan sebaliknya). Namun, saya pikir apa yang Anda pikirkan dengan C # vs. Javascript kemungkinan pengetikan statis (di mana pengecekan tipe terjadi pada waktu kompilasi) vs pengetikan dinamis (di mana pengecekan tipe terjadi pada saat run-time) - tentu saja, itu apa yang Go FAQ bicarakan.
Google Go diketik secara statis, tetapi sejumlah fitur membuatnya "tampak" sebagai (setidaknya agak) diketik secara dinamis. Misalnya, Anda tidak perlu secara eksplisit menandai kelas Anda sebagai mengimplementasikan antarmuka apa pun. Jika metode tanda tangan dari kelas Anda cocok dengan yang ada di antarmuka, maka kelas Anda secara otomatis mengimplementasikan antarmuka itu (semacam bebek-mengetik). Ini berguna untuk memperluas kelas built-in dan kelas di perpustakaan pihak ketiga, karena Anda bisa membuat antarmuka untuk mencocokkan metode pada kelas pihak ketiga dan itu akan secara otomatis mengimplementasikannya.
Keamanan jenis sebenarnya adalah "sumbu" yang berbeda dari sistem tipe. Sebagai contoh, C adalah bahasa yang diketik secara statis yang bukan tipe-aman - pointer memungkinkan Anda melakukan hampir semua hal yang Anda suka, bahkan hal-hal yang akan merusak program Anda. Javascript diketik secara dinamis, tetapi juga tipe-aman: Anda tidak dapat melakukan operasi yang akan merusak program Anda. C # kebanyakan bertipe safe, tetapi Anda dapat secara eksplisit menandai area kode yang ada
unsafe
dan melakukan hal-hal yang tidak lagi bertipe safe.Google Go juga tipe-aman dalam arti bahwa Anda tidak dapat dipusingkan dengan jenis dan crash program (tidak ada akses langsung ke petunjuk).
sumber
Itu diketik dengan aman bahwa suatu jenis tidak akan pernah salah ditafsirkan, tetapi jenis yang salah dapat menyebabkan program panik.
sumber
Jenis peta Go bukan thread-safe, ini diketik secara statis. Itu tidak memiliki jenis warisan, pemrograman generik, pernyataan, metode overloading, atau aritmatika pointer baik dan untuk alasan yang baik.
Keamanan tipe dan keamanan memori adalah tujuan jangka panjang, di sini pada masalah.
Jenis keamanan menghadirkan overhead, dalam kilobyte dan megabita yang dapat diterima. Go dirancang dengan MapReduce dan "Big data", mengeluarkan satu petabyte data, yang menghadirkan masalah kinerja dengan keamanan jenis, pengecekan tipe (tinju / unboxing) menciptakan overhead dan menghilangkan siklus pemrosesan.
Keamanan jenis dapat dibatasi dalam sub-pengetikan dan polimorfisme dan dalam pengetikan bebek (melemparkan benda ke benda), ini menciptakan bahaya dan juga ruang di mana bahasa seperti Go sangat bermanfaat. C ++ dan Java tidak digantikan oleh Go, itu adalah bahasa baru untuk membantu pemrograman terdistribusi dan sistem paralel masif.
Pernyataan besar oleh Bruce Eckel - "Go lebih masuk akal untuk kelas masalah yang awalnya ingin diselesaikan oleh C ++", masih bisa diperdebatkan. C ++ adalah bahasa yang sangat efisien dan implementasi Boost MapReduce sangat efisien.
Primitif konkurensi adalah masa depan. Keamanan jenis selalu menjadi topik yang sangat kontroversial dan Go mungkin bahasa pertama yang mengatasi masalah ini dalam 20 tahun, atau sejak Algol.
sumber