Go es un lenguaje de programación concurrente y compilado inspirado en la sintaxis de C, que intenta ser dinámico como Python y con el rendimiento de C o C++. Ha sido desarrollado por Google, y sus diseñadores iniciales fueron Robert Griesemer, Rob Pike y Ken Thompson.
El package se debe llamar igual que el archivo, o el nombre del paquete en conjunto
Esta palabra reservada nos ayuda a importar los packetes necesarios
// Un solo paquetes
import "packagename"
// Dos o mas paquetes
import (
"packagename1"
"packagename2"
)
Como en la mayoria de lenguajes,necesitamos indicar al compilador donde esta el cuerpo del flujo del programa, para esto es necesario la funcion main en el cuerpo del programa, a menos que el archivo sea parte de un paquete sin ser este anteriormente mensionado el main.go
func main(){
}
// Declaracion formal de variable
//Sintaxis
var NombredeVarible <TipoDeDato>
//Ejemplo
var Soyentero int
// Declaracion por interpretacion del compilador
NombredeVarible := <Valor_a_asignar>
-
Enteros
- Entero
int
- Entero 16 bits
int16
- Entero 32 bits
int32
- Entero 64 bits
int64
-
Flotantes
- Flotante 64 bits
float64
- Flotante 32 bits
float32
-
Cadenas
- Cadena de texto
string
-
Booleans
- Verdadero
true
- Falso
false
-
Estructuras
Para más información aqui
type nameStructure struct{ variables int variabbles string others float64 }
-
Interfaces
Puede Cheacar un ejemplo aqui Y puede checar más informacion aqui
type nameInterface interface{ nameFunc(Arguments) ReturnValues }
-
Funciones
Puede Cheacar un ejemplo aqui Y puede checar más informacion aqui
func (r receptor) FunctionName(Argument) (Returns values{ }
-
Channels
//Declaracion canal read only readonly := make(<-chan <TipoDeDato>,<TamañoDelBuffer>) //Declaracion canal send only sendonly := make(chan<- <TipoDeDato>,<TamañoDelBuffer>) //Declaracion canal bidireccional channell := make(chan <TipoDeDato>,<TamañoDelBuffer>) //Ejemplo // Canal read only readonly := make(<-chan float64,6>) // Canal send only sendonly := make(chan<- string) // Canal bidireccional channell := make(chan int,2)
Esto es tan sencillo como lo siguiente
// Sintaxis
<TipoDeDato>()
// Ejemplo
int(5.22 )
// Sintaxis
if condicion {
}else{
}
// Ejemplo
var edad int = 18
if edad >= 18{
fmt.Print("Eres mayor de Edad")
}else{
fmt.Print("Aun eres joven")
}
// Sintaxis
switch variable_a_evaluar{
case valor1:
accion1
case valor2:
accion2
default:
acciondefault
}
// Ejemplo
var edad int = 18
switch edad{
case 16:
fmt.Print(edad)
case 17:
fmt.Print(edad)
case 18:
fmt.Print(edad, "Ya eres mayor de edad")
default:
fmt.print("No se que onda contigo")
}
En go unicamente existe la directiva for,pero a cambio nos ofrece una gran flexibilidad de esta directiva
for( i:= 0; i < 15 ; i++ ){
// Code Block
}
for{
}
Puede Cheacar un ejemplo aqui
for ind,val := range <list or iterable>{
}
for condition{
}
Para esto Compruebe la parte del Paquete fmt para comprobar las estructira de las funciones y para verlo en practica cheque el ejemplo
-
AND ->
&&
-
OR ->
||
-
NOT ->
!
-
Suma ->
+
-
Resta ->
-
-
Multiplicacion ->
*
-
Division ->
/
-
Modulo ->
%
-
Suma y Resta Unitaria ->
++ --
-
Channel in ->
varchan<-
-
Channel out ->
<-varchan
-
Tres puntos ->
...var o ...var //Depende
Nota : Puede Checar un ejemplo aqui
Una funcion es un segmento de codigo que tiene una tarea determinada a realizar, como podemos ver aqui, pero realmente en ciertos momentos del desarrollo donde esa dicha fucion solo sera realizada una unica vez o es necesario pasarla como argumento a alguna funcion, no existe razon para otorgarle un nombre, por esto se desarrollo las funciones anonimas
Nota importante: las funciones en golang son ciudadanos importantes, es decir son un tipo de dato, con todo lo que esto implica
Como ya lo mencione antes esto se refiere a que estas no tienen un identificador o nombre
Ya que esto es algo complicado de explicar con palabras, acuda al ejemplo para una mejor comprencion
//Sintaxis sin ejecucion
func()(Valores de retorno){
}
//Sintaxis con ejecucion
func()(Valores de retorno){
}()
Estos nacieron de la existencia de funciones anonimas, esto refiere a funciones que son devuletas por otras, pero las primeras mantienen todo el contexto de las segundas, y pueden realizar operaciones con esto, independientes de todas las que puedan ser resultado de las llamadas independientes a la misma fucion original
Ya que esto es algo complicado de explicar con palabras, acuda al ejemplo para una mejor comprencion
Vectores estaticos en tamaño que solo pueden almacenar un tipo de dato especifico
//Sintaxis
var Nombre [Tam]TipodeDatoUnitario
// Ejemplo
var arr [10]int
var calif [5]int{9,10,10,9,10}
longitud de un arreglo
var calif [5]int{9,10,10,9,10}
len(calif)
Su tamaño puede ser apliable si es necesario
//Sintaxis
var Nombre []TipodeDatoUnitario
// Ejemplo
var calif []int{9,10,10,9,10}
calif[1:]
//sintaxis (make)
//La capacidad es el tamaño con el que creara el slice para evitar el tiempo de apliarlo cada vez y len es el espacio que tenemo disponible para control mientras no solicitemos mas
sslice := make([]TipoDeDatoUnitario,Longitud,Capacidad)
//Ejemplo
elementos := make([]int,5,20)
var calif []int{9,10,10,9,10}
calif = append(calif,5)
Son objetos iterables muy parecidos a los slice solo que los indices no son numeriocos (0,1,2,3 ...), son de un tipo designado cualquiera inmutable,
Se dicen que un diccionario es un conjunto de elementos clave:valor
Aqui un ejemplo de Maps
// Creacion de un map
// Version 1
mappa := make(map[<TipoParaLaLlave>]<TipoParaValor>)
// Version 2
mapppa := map[<TipoParaLaLlave>]<TipoParaElValor>
// Cargar datos
//Directamente
mapppa := map[<TipoParaLaLlave>]<TipoParaElValor>{
Llave:Valor,
Llave:Valor,
}
//Eliminar Datos
delete(VariableMap,<Clave aa eliminar>)
Una estructura es una forma de ordenar valores que tendran una relacion estrecha entre si, como pueden ser las caracteristicas de un objeto como tal, por lo que en Go se dice que a pesar de no contar con un manejo de POO como tal, que este si cuenta con el, esto es gracias a el uso de Estructuras.
En el ejemplo podemos ver una muestra de esto los atributos metodos y herencia, como polimorfismo
Es un conjunto de funciones que actuan como propiedades de las estructuras como tal.
Esto no permite agrupar distintos tipos de estructuras en super grupos, Aqui un ejemplo
type nameStructure struct{
variables int
variabbles string
others float64
}
Los canales o Channels en ingles, son tipo de dato auxilira, que nos permite comunicar datos entre gorutinas o goroutines, sin necesidad de variables globales o memoria compartida, sin necesidad de sincronización por atomic o semaphores mutex
Estos sumamente utiles en Go, ya que nos permiten hacer maravillas sin codigo complicado
El paquete fmt o format, es el que nos permitira realizar operaciones con los busses de entrada y salida de la computadora
Las funciones para escribir en pantalla con las que cuenta fmt son:
-
Print:
func Print(a ...interface{}) (n int, err error)
-
Println:
func Println(a ...interface{}) (n int, err error)
-
Printf:
func Printf(format string, a ...interface{}) (n int, err error)
-
Sprint:
func Sprint(a ...interface{}) string
-
Sprintf:
func Sprintf(format string, a ...interface{}) string
Las funciones para leer por teclado son las siguientes:
-
Scan:
func Scan(a ...interface{}) (n int, err error)
-
Scanf:
func Scanf(format string, a ...interface{}) (n int, err error)
-
Scanln:
func Scanln(a ...interface{}) (n int, err error)
-
Sscan:
func Sscan(str string, a ...interface{}) (n int, err error)