En Google Go, leo que las cadenas son inmutables, ¿pero están int? ¿Qué pasa con otros tipos? Como programador un poco mayor, prefiero la mutabilidad, aunque conozco los beneficios de la inmutabilidad, prefiero vivir peligrosamente.¿Qué tipos son mutables e inmutables en Google Go Language?
Saber qué tipos son mutables o inmutables sería muy útil.
Actualización, lo que más me preocupa es que los problemas prácticos dependen de si el tipo es mutable o inmutable. Como en el ejemplo típico de Java, si crea un String en un bucle y un bucle por 10.000 veces, obtendrá 10,000 cadenas creadas que luego serán recolectadas. Esto realmente ha sido un problema serio en un proyecto en una compañía en la que trabajé.
La pregunta es, ¿la inmutabilidad de Go en algunos casos causa el mismo problema?
Afecta la forma de tratar la var. (o supongo que sí)
Actualizar de nuevo, también me preocupan otras cuestiones prácticas. Saber que algo es inmutable significa que puedo escribir código que es paralelo y las actualizaciones de una referencia del objeto no deberían actualizar las otras referencias. Sin embargo, a veces deseo hacer cosas peligrosas, quiero mutabilidad.
Estas son las consecuencias de la mutabilidad frente a la inmutabilidad y afectan la forma en que puedo escribir el código.
La razón por la que pregunto es que este es un problema de rendimiento, si estoy escribiendo un ciclo que va alrededor de un millón de veces, no quiero que se creen muchos objetos. Por ejemplo, en un bucle de Java, no queremos crear una cadena cada vez que recorremos el ciclo, entonces usamos StringBuffer. – Phil
Mi suposición es, por supuesto, que los tipos inmutables van a crear muchos objetos en general. (puede que no sea cierto, dependiendo del asignador) – Phil
correcto, de alguna manera, porque el recolector de basura extremadamente inteligente podría reutilizar * fragmentos * de cadena * que dejas atrás con alguna implementación inteligente (cualquier cosa aparte de una matriz contigua de palabras). use '[] byte' luego, teniendo en cuenta que en su totalidad utf-8 * character * (aka runa) tiene longitud variable. – ypb