Hasta ahora hemos visto los operadores:
relacionales (>, <, >=, <= , ==, !=) matemáticos (+, -, *, /, %)
pero nos están faltando otros operadores imprescindibles:
lógicos &&, ||
Estos operadores se emplean fundamentalmente en las estructuras condicionales para agrupar varias condiciones simples.

Traducido se lo lee como “Y”. Si la Condición 1 es verdadera Y la condición 2 es verdadera luego ejecutar la rama del verdadero.
Cuando vinculamos dos condiciones con el operador “&&”, las dos condiciones deben ser verdaderas para que el resultado de la condición compuesta de Verdadero y continúe por la rama del verdadero de la estructura condicional.
La utilización de operadores lógicos permiten en muchos casos plantear algoritmos más cortos y comprensibles.
Confeccionar un programa que lea por teclado tres números distintos y nos muestre el mayor.

Este ejercicio está resuelto sin emplear operadores lógicos en un concepto anterior del tutorial.
La primera estructura condicional  es una ESTRUCTURA CONDICIONAL COMPUESTA con una CONDICION COMPUESTA.
Podemos leerla de la siguiente forma:
Si el contenido de la variable num1 es mayor al contenido de la variable num2  Y  si el contenido de la variable num1 es mayor al contenido de la variable num3 entonces la CONDICION COMPUESTA resulta Verdadera.
Si una de las condiciones simples da falso la CONDICION COMPUESTA da Falso y continua por la rama del falso.
Es decir que se mostrará el contenido de num1 si y sólo si num1 > num2 y num1 > num3.
En caso de ser Falsa la condición, analizamos el contenido de num2 y num3 para ver cual tiene un valor mayor.
En esta segunda estructura condicional no se requieren operadores lógicos al haber una condición simple.
package main
import "fmt"
func main() {
    var num1, num2, num3 int
    fmt.Print("Ingrese primer valor:")
    fmt.Scan(&num1)
    fmt.Print("Ingrese segundo valor:")
    fmt.Scan(&num2)
    fmt.Print("Ingrese tercer valor:")
    fmt.Scan(&num3)
    fmt.Print("El mayor de los tres es:")
    if num1 > num2 && num1 > num2 {
        fmt.Print(num1)
    } else {
        if num2 > num3 {
            fmt.Print(num2)
        } else {
            fmt.Print(num3)
        }
    }
}
Como vemos disponemos un if con una condición compuesta y agrupadas por el operador && (y):
    if num1 > num2 && num1 > num2 {

Traducido se lo lee como “O”. Si la condición 1 es Verdadera o la condición 2 es Verdadera, luego ejecutar la rama del Verdadero.
Cuando vinculamos dos o más condiciones con el operador “O" que en el lenguaje Go se escribe con los caracteres ||, con que una de las dos condiciones sea Verdadera alcanza para que el resultado de la condición compuesta sea Verdadero.
Se carga una fecha (día, mes y año) por teclado. Mostrar un mensaje si corresponde al primer trimestre del año (enero, febrero o marzo) Cargar por teclado el valor numérico del día, mes y año. 
Ejemplo: dia:10  mes:5  año:2017.

La carga de una fecha se hace por partes, ingresamos las variables dia, mes y año. 
Mostramos el mensaje "Corresponde al primer trimestre" en caso que el mes ingresado por teclado sea igual a 1,  2 ó  3.
 
En la condición no participan las variables dia y año.
package main
import "fmt"
func main() {
    var dia, mes, año int
    fmt.Print("Ingrese número de día:")
    fmt.Scan(&dia)
    fmt.Print("Ingrese número de mes:")
    fmt.Scan(&mes)
    fmt.Print("Ingrese número de año:")
    fmt.Scan(&año)
    if mes == 1 || mes == 2 || mes == 3 {
        fmt.Print("Corresponde al primer trimestre")
    }
}
No hay problemas de definir condiciones compuestas con más de dos condiciones simples, en este ejemplo tenemos tres condiciones simples vinculadas con el operador ||
ejercicio021.go
package main
import "fmt"
func main() {
    var dia, mes, año int
    fmt.Print("Ingrese número de día:")
    fmt.Scan(&dia)
    fmt.Print("Ingrese número de mes:")
    fmt.Scan(&mes)
    fmt.Print("Ingrese número de año:")
    fmt.Scan(&año)    
    if dia == 25 && mes == 12 {
        fmt.Print("La fecha ingresada corresponde a navidad.")
    }
}
ejercicio022.go
package main
import "fmt"
func main() {
    var num1, num2, num3 int
    fmt.Print("Ingrese primer valor:")
    fmt.Scan(&num1)
    fmt.Print("Ingrese segundo valor:")
    fmt.Scan(&num2)
    fmt.Print("Ingrese tercer valor:")
    fmt.Scan(&num3)
    if num1 == num2 && num1 == num3 {
        var suma int
        suma = num1 + num2
        fmt.Println("La suma del primero y el segundo:",suma)
        var producto int
        producto = suma * num3
        fmt.Println("La suma del primero y el segundo multiplicado por el tercero:",producto)
    }
}
ejercicio023.go
package main
import "fmt"
func main() {
    var num1, num2, num3 int
    fmt.Print("Ingrese primer valor:")
    fmt.Scan(&num1)
    fmt.Print("Ingrese segundo valor:")
    fmt.Scan(&num2)
    fmt.Print("Ingrese tercer valor:")
    fmt.Scan(&num3)
    if num1 < 10 && num2 < 10 && num3 < 10 {
        fmt.Print("Todos los números son menores a diez")
    }    
}
ejercicio024.go
package main
import "fmt"
func main() {
    var num1, num2, num3 int
    fmt.Print("Ingrese primer valor:")
    fmt.Scan(&num1)
    fmt.Print("Ingrese segundo valor:")
    fmt.Scan(&num2)
    fmt.Print("Ingrese tercer valor:")
    fmt.Scan(&num3)
    if num1 < 10 || num2 < 10 || num3 < 10 {
        fmt.Print("Alguno de los números es menor a diez")
    }    
}
ejercicio025.go
package main
import "fmt"
func main() {
    var x, y int
    fmt.Print("Ingrese coordenada x:")
    fmt.Scan(&x)
    fmt.Print("Ingrese coordenada y:")
    fmt.Scan(&y)
    if x > 0 && y > 0 {
        fmt.Print("Se encuentra en el primer cuadrante")
    } else {
        if x < 0 && y > 0 {
            fmt.Print("Se encuentra en el segundo cuadrante")
        } else {
            if x < 0 && y < 0 {
                fmt.Print("Se encuentra en el tercer cuadrante")
            } else {
                fmt.Print("Se encuentra en el cuarto cuadrante")
            }
        }
    }
}
ejercicio026.go
package main
import "fmt"
func main() {
    var sueldo float32
    var antiguedad int
    fmt.Print("Ingrese sueldo del empleado:")
    fmt.Scan(&sueldo);
    fmt.Print("Ingrese su antiguedad en años:")
    fmt.Scan(&antiguedad);
    if sueldo < 500 && antiguedad > 10 {
        var aumento float32
        aumento = sueldo * 0.20
        var sueldoTotal float32
        sueldoTotal = sueldo + aumento
        fmt.Print("Sueldo a pagar:",sueldoTotal)
    } else {
        if sueldo < 500 {
            var aumento float32
            aumento = sueldo * 0.05
            var sueldoTotal float32
            sueldoTotal = sueldo + aumento
            fmt.Print("Sueldo a pagar:",sueldoTotal)
        } else {
            fmt.Print("Sueldo a pagar:",sueldo)
        }
    }    
}
ejercicio027.go
package main
import "fmt"
func main() {
    var num1, num2, num3 int
    fmt.Print("Ingrese primer valor:")
    fmt.Scan(&num1)
    fmt.Print("Ingrese segundo valor:")
    fmt.Scan(&num2)
    fmt.Print("Ingrese tercer valor:")
    fmt.Scan(&num3)
    if num1 < num2 && num1 < num3 {
        fmt.Print(num1)
    } else {
        if num2 < num3 {
            fmt.Print(num2)
        } else {
            fmt.Print(num3)
        }
    }
    fmt.Print("-")
    if num1 > num2 && num1 > num3 {
        fmt.Print(num1)
    } else {
        if num2 > num3 {
            fmt.Print(num2)
        } else {
            fmt.Print(num3)
        }
    }    
}