Tipos de dados no Go
Type
Sintaxe
type [nome] [tipo]
Exemplo
type CarName string
type CarYear int
func main() {
var carName CarName
carName = "Fusion"
fmt.Println(carName)
var carYear CarYear
carYear = 2020
fmt.Println(carYear)
}
Struct
Definição
Uma struct
pode ser comparada a uma classes, mas CUIDADO com essa comparação, pois o Go não é orientado a objetos.
Sintaxe
type [nome] struct {
// Campos...
}
Para acessar um campo da
struct
:[nome da variável].[nome do campo]
.
Exemplo
type Car struct {
CarName string
CarYear int
}
func main() {
car := Car{
CarName: "Fusion",
CarYear: 2020,
}
fmt.Println(car.CarYear)
fmt.Println(car.CarName)
}
Métodos
-
Definição: são funções que estão ligadas a uma
struct
-
Sintaxe
func ([nome da variável] [nome da struct]) [nome do método[([parâmetros...) ([tipos de retorno...]) { // Código ... }
-
Exemplo
func (car *Car) changeCarName() { car.CarName = "Fusion2" fmt.Println(car.CarName) } func main() { car := Car{ CarName: "Fusion", CarYear: 2020, } car.changeCarName() // Fusion2 }
Composição de struct
type Cliente struct {
Nome string
Email string
CPF int
}
type ClienteInternacional struct {
Cliente
Pais string
}
cliete3 := ClienteInternacional{
Cliente: Cliente{
Nome: "Davi",
Email: "davi@gmail.com",
CPF: 12312312300,
},
Pais: "EUA",
}
fmt.Printf("Nome: %s, Email: %s, CPF: %d, Pais %s\n", cliete3.Nome, cliete3.Email, cliete3.CPF, cliete3.Pais) // Nome: {Davi davi@gmail.com %!s(int=12332112300)}, Email: davi@gmail.com, CPF: 12332112300, Pais> EUA
type Cliente struct {
Nome string
Email string
CPF int
}
func (c Cliente) Exibe() {
fmt.Println("Exibindo cliente pelo método: ", c.Nome)
}
type ClienteInternacional struct {
Cliente
Pais string
}
cliente1 := Cliente{
Nome: "Wesley",
Email: "wesley@gmail.com",
CPF: 12345678900,
}
fmt.Println(cliente1)
cliente2 := Cliente{
"Mari",
"mari@gmail.com",
98765432111,
}
fmt.Printf("Nome: %s, Email: %s, CPF: %d\n", cliente2.Nome, cliente2.Email, cliente2.CPF)
cliente3 := ClienteInternacional{
Cliente: Cliente{
Nome: "Davi",
Email: "davi@gmail.com",
CPF: 12312312300,
},
Pais: "EUA",
}
cliente1.Exibe() // Exibindo cliente pelo método: Wesley
cliente2.Exibe() // Exibindo cliente pelo método: Mari
cliente3.Exibe() // Exibindo cliente pelo método: Davi
Interfaces
Sintaxe
type [nome] interface {
[nome da função]([parâmetros...]) [tipos retorno...]
}
Exemplo
Declaração de uma
interface
:
type vehicle interface {
start() string
}
Implementação da
interface
em umastruct
vehicle:
func (car Car) start() string {
return "Iniciou"
}
Como a
Car
implementou a funçãostart()
, logoCar
é umVehicle
.
func acceptOnlyVehicleImplementation(car vehicle) {
fmt.Println("É um veículo")
}
func main() {
car := Car{
CarName: "Fusion",
CarYear: 2020,
}
acceptOnlyVehicleImplementation(car) // car é um veículo
}