La diferencia entre go y otros lenguajes, cual es la diferencia entre go y Java, Python

Zero, go y otros idiomas

0. ¿Qué es la orientación a objetos?

Antes de saber si el lenguaje Go es orientado a objetos (abreviatura: OOP), primero debemos saber qué es OOP, y primero debemos "definirlo"

De acuerdo con la definición de Wikipedia, clasificamos varias cogniciones básicas de OOP:

  • La programación orientada a objetos (POO) es un paradigma de programación basado en el concepto de un "objeto", que puede contener tanto datos como código: datos en forma de campos (a menudo llamados atributos o atributos) y código en forma de programas. (a menudo llamado método).
  • El propio programa de un objeto puede acceder y, a menudo, modificar sus propios campos de datos.
  • Un objeto a menudo se define como una instancia de una clase.
  • Los objetos aprovechan la visibilidad privada/protegida/pública de propiedades y métodos, y el estado interno del objeto está protegido de la influencia externa (encapsulado).

Sobre la base de estas cogniciones básicas, las tres características básicas de la orientación a objetos se amplían aún más:

  • encapsulación
  • heredar
  • polimorfismo

1. ¿Cuál es la diferencia entre el lenguaje Go y Java?

1. La sobrecarga de funciones no está permitida en Go y debe tener nombres únicos para métodos y funciones, mientras que Java permite la sobrecarga de funciones.

2. En términos de velocidad, Go es más rápido que Java.

3. Java permite el polimorfismo de forma predeterminada, pero Go no.

4. El lenguaje Go usa el protocolo HTTP para la configuración de enrutamiento, mientras que Java usa Akka.routing.ConsistentHashingRouter y Akka.routing.ScatterGatherFirstCompletedRouter para la configuración de enrutamiento.

5. El código Go puede escalar automáticamente a múltiples núcleos, mientras que Java no siempre es lo suficientemente escalable.

6. La herencia del lenguaje Go se completa a través de una combinación anónima. La clase base se define en forma de Struct. La subclase solo necesita poner la clase base como miembro en la definición de la subclase para admitir la herencia múltiple; mientras que la herencia de Java se completa a través de la palabra clave extends.La herencia múltiple no es compatible.

2. ¿Go es un lenguaje orientado a objetos?

Si y no. Porque:

  1. Go tiene tipos y métodos, y permite un estilo de programación orientado a objetos, pero sin jerarquía de tipos.
  2. El concepto de "interfaz" en Go ofrece un enfoque diferente que creemos que es fácil de usar y, en cierto modo, más general. También hay formas de incrustar tipos dentro de otros tipos para proporcionar algo similar, pero no equivalente a la creación de subclases.
  3. Los métodos en Go son más generales que los de C++ o Java: se pueden definir para cualquier tipo de datos, incluso tipos integrados, como enteros ordinarios "sin caja". No se limitan a estructuras (clases).
  4. Go Debido a la falta de una jerarquía de tipos, los "objetos" en Go son más ligeros que los lenguajes como C++ o Java.

3. Go implementa la programación orientada a objetos

encapsulación

La "encapsulación" en orientación a objetos se refiere a la capacidad de ocultar las propiedades internas y los detalles de implementación de un objeto, y solo proporcionar llamadas de interfaz pública al mundo exterior, de modo que los usuarios no necesiten prestar atención a cómo lo implementa internamente.

Los derechos de acceso a los atributos en el idioma Go se controlan mediante mayúsculas y minúsculas iniciales:

  • La primera letra está en mayúscula, lo que significa que es pública y se puede acceder a ella desde el exterior.
  • La primera letra está en minúsculas, lo que significa que es privada y no se puede acceder a ella desde el exterior.

Un ejemplo en el lenguaje Go es el siguiente:

type Animal struct { 
	name string 
} 

func NewAnimal() *Animal { 
 	return &Animal{} 
} 

func (p *Animal) SetName(name string) { 
 	p.name = name 
} 

func (p *Animal) GetName() string { 
 	return p .nombre 
}

En el ejemplo anterior, declaramos una estructura Animal cuyo nombre de atributo está en minúsculas. Hay métodos Setter y Getter en el paquete, que se utilizan para un acceso unificado y control de configuración.

De esta forma, se realiza la encapsulación básica en el lenguaje Go.

heredar

"Herencia" en orientación a objetos se refiere a que la subclase hereda las características y los comportamientos de la clase principal, de modo que el objeto de la subclase (instancia) tiene el campo de instancia y el método de la clase principal, o la subclase hereda el método de la clase principal , para que la subclase tenga la clase padre con el mismo comportamiento.

A partir de un ejemplo práctico, los animales son una categoría principal grande, que se puede subdividir en "herbívoros" y "carnívoros", los cuales contienen la definición básica de la categoría principal "animal".

A partir de un ejemplo práctico, los animales son una categoría principal grande, que se puede subdividir en "herbívoros" y "carnívoros", los cuales contienen la definición básica de la categoría principal "animal".

En el lenguaje Go, no existe un método de herencia similar a la palabra clave extends , y el diseño del lenguaje adopta un método de combinación :

type Animal struct { 
 	Name string 
} 

type Cat struct { 
 	Animal 
 	FeatureA string 
} 

type Dog struct { 
 	Animal 
 	FeatureB string 
}

En el ejemplo anterior, declaramos las estructuras Cat y Dog, que componen internamente la estructura Animal de forma anónima. Entonces, las instancias de Cat y Dog pueden llamar a métodos de la estructura Animal:

func main() { 
 	p := NewAnimal() 
 	p.SetName("Soy portero, ve a como pescado frito~") 

 	dog := Dog{Animal: *p} 
 	fmt.Println(dog.GetName()) 
}

También las instancias de Cat and Dog pueden tener sus propios métodos:

func (perro *Perro) HolaMundo() { 
 	fmt.Println("El cerebro es pescado frito") 
} 

func (gato *Gato) HolaMundo() { 
 	fmt.Println("El cerebro es pescado frito") 
}

El ejemplo anterior normalmente puede incluir las propiedades y los métodos relacionados para llamar a Animal, y también puede tener sus propias propiedades y métodos independientes, logrando un efecto similar a la herencia en el lenguaje Go.

polimorfismo

polimorfismo

"Polimorfismo" en orientación a objetos se refiere a la capacidad del mismo comportamiento para tener múltiples manifestaciones o formas diferentes. Específicamente, significa que el mismo método de una instancia de clase (objeto) tiene diferentes manifestaciones en diferentes situaciones.

El polimorfismo también permite que objetos con diferentes estructuras internas compartan la misma interfaz externa, es decir, un conjunto de plantillas externas y lo que realmente hay dentro, siempre que cumpla con las especificaciones.

En el lenguaje Go, el polimorfismo se implementa a través de interfaces:

type AnimalSound interface { 
 	MakeDNA() 
} 

func MakeSomeDNA(animalSound AnimalSound) { // El parámetro es la interfaz AnimalSound type 
 	animalSounder.MakeDNA() 
}

En el ejemplo anterior, declaramos un tipo de interfaz AnimalSounder, que se empareja con un método MakeSomeDNA, que acepta el tipo de interfaz AnimalSounder como parámetro de entrada.

Entonces en el lenguaje Go. Siempre que las instancias Cat and Dog compatibles también implementen el método MakeSomeDNA, entonces podemos considerarlo como el tipo de interfaz AnimalSounder:

type AnimalSounder interface { 
 	MakeDNA() 
} 

func MakeSomeDNA(animalSounder AnimalSounder) { 
 	animalSounder.MakeDNA() 
} 

func(c *Cat) MakeDNA() { 
 	fmt.Println("CatDNA") 
} 

func(c*Dog); MakeDNA() { 
 	fmt.Println(" 
MakeDNA (& 
Cat 
 	{}) 
 	MakeSomeDNA(&Dog{}) 
};

Cuando las instancias de Cat and Dog implementan las restricciones del tipo de interfaz AnimalSounder, significa que se cumplen las condiciones y son una cosa en el lenguaje Go. Se puede pasar al método MakeSomeDNA como un parámetro de entrada, y luego se puede realizar un comportamiento polimórfico de acuerdo con diferentes instancias.


En el trabajo diario, una comprensión básica de estos conceptos es suficiente. Si se trata de una entrevista, puede centrarse en tres características principales: "encapsulación, herencia, polimorfismo" y cinco principios "Principio de responsabilidad única (SRP), Principio abierto y cerrado (OCP), Principio de sustitución de Liskov (LSP), Principio de inversión de dependencia (DIP), Principio de segregación de interfaz (ISP)" para una comprensión y explicación detalladas.

4. La diferencia entre go language y python:

1. Ejemplos

Python es un lenguaje de programación multiparadigma, imperativo y funcional basado en la programación orientada a objetos. Insiste en la idea de que si un idioma se comporta de cierta manera en algunos contextos, idealmente debería comportarse de manera similar en todos los contextos. Sin embargo, no es un lenguaje de programación orientada a objetos puro, no admite una encapsulación fuerte, que es uno de los principios fundamentales de la programación orientada a objetos.

Go es un lenguaje de programación procedimental basado en el paradigma de programación concurrente, que comparte similitudes superficiales con C. De hecho, Go es más como una versión actualizada de C.

2. Mecanografía

Python es un lenguaje de tipado dinámico, mientras que Go es un lenguaje de tipado estático, lo que en realidad ayuda a detectar errores en el momento de la compilación, lo que puede reducir aún más los errores críticos más adelante en la producción.

3. Concurrencia

Python no proporciona un mecanismo de concurrencia integrado, mientras que Go tiene un mecanismo de concurrencia integrado.

4. Seguridad

Python es un lenguaje fuertemente tipado, está compilado, lo que agrega una capa de seguridad. Go tiene un tipo asignado a cada variable, por lo que brinda seguridad. Sin embargo, si se produce algún error, los usuarios deben ejecutar todo el código ellos mismos.

5. Administrar la memoria

Go permite a los programadores administrar la memoria en gran medida. Sin embargo, la administración de la memoria en Python está completamente automatizada y administrada por la VM de Python; no permite que el programador asuma la responsabilidad de la administración de la memoria.

6. Biblioteca

En comparación con Go, Python proporciona una cantidad mucho mayor de bibliotecas. Sin embargo, Go todavía es nuevo y aún no ha progresado mucho.

7. Gramática

La sintaxis de Python usa sangría para indicar bloques de código. La sintaxis de Go se basa en paréntesis de apertura y cierre.

8. Nivel de detalle

Para lograr la misma funcionalidad, el código Golang generalmente requiere escribir más caracteres que el código Python.

 

Supongo que te gusta

Origin blog.csdn.net/2301_76484015/article/details/130503291
Recomendado
Clasificación