эта страница http://golang.org/doc/go_faq.html пишет:
хотя в Go есть статические типы, язык пытается заставить типы чувствовать себя легче, чем в типичных ОО-языках.
Так что мой вопрос в том, является ли он безопасно набранными с помощью обобщений (например, C #) или свободно набранными (например, javascript) или необязательными (например, строгий параметр в Vb.Net)
Ответы:
Тип безопасности не является черным или белым типом безопасности или нет. Это больше спектра, и некоторые языки могут быть более безопасными, чем другие (и наоборот). Тем не менее, я думаю, что вы думаете о C # против Javascript, скорее всего, статическая типизация (где проверка типов происходит во время компиляции) или динамическая типизация (где проверка типов происходит во время выполнения) - конечно, это о чем идет речь в FAQ.
Google Go имеет статическую типизацию, но из-за ряда функций он «кажется» динамически типизированным. Например, вам не нужно явно отмечать ваш класс как реализующий какие-либо интерфейсы. Если сигнатуры методов вашего класса совпадают с сигнатурами интерфейса, тогда ваш класс автоматически реализует этот интерфейс (разновидность утиной типизации). Это полезно для расширения встроенных классов и классов в сторонних библиотеках, потому что вы можете просто настроить интерфейс так, чтобы он соответствовал методам стороннего класса, и он автоматически его реализует.
Безопасность типов - это фактически другая «ось» системы типов. Например, C - это статически типизированный язык, который не является безопасным для типов - указатели позволяют вам делать практически все, что вам нравится, даже вещи, которые могут привести к сбою вашей программы. Javascript типизирован динамически, но также безопасен для типов: вы не можете выполнять операции, которые могут привести к сбою вашей программы. C # в основном безопасен для типов, но вы можете явно пометить области кода, которые
unsafe
делают и делают вещи, которые больше не являются безопасными для типов.Google Go также безопасен для типов в том смысле, что вы не можете возиться с типами и приводить к сбою программы (нет прямого доступа к указателям).
источник
Это безопасно напечатано в том, что тип никогда не будет неправильно истолкован, но неправильный тип может вызвать панику в программе.
источник
Гоу типа карты не потокобезопасный, она статический типизированные. Он также не имеет наследования типов, общего программирования, утверждений, перегрузки методов или арифметики указателей, и по уважительной причине.
Безопасность типов и безопасность памяти являются долгосрочными целями, здесь во лжи проблема.
Тип безопасности представляет накладные расходы, в килобайтах и мегабайтах, что является приемлемым. Go разработан с MapReduce и «Большими данными», exobytes петабайт данных, что представляет проблемы производительности с безопасностью типов, проверка типов (бокс / распаковка) создает накладные расходы и отнимает циклы от обработки.
Безопасность типов может быть ограничивающей в подтипировании и полиморфизме, а также при типизации утки (приведение объекта к объекту), это создает опасности, а также пространство, в котором такие языки, как Go, приносят большую пользу. C ++ и Java не заменяются Go, это новый язык, помогающий распределенному программированию и массивно параллельной системе.
Большое утверждение Брюса Экеля - «Go имеет гораздо больше смысла для класса задач, которые C ++ изначально предназначался для решения», является дискуссионным. C ++ - очень эффективный язык, и реализация MapReduce в Boost очень эффективна.
Примитивы параллелизма - это будущее. Безопасность Тип всегда был очень спорный вопрос и Go, может быть, первый язык для решения этой проблемы в 20 лет, или с тех пор Алголь.
источник