Menu
Coddy logo textTech

Nomes Exportados vs. Não Exportados

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy. Lição 4 de 107.

Em Go, a primeira letra de um nome determina sua visibilidade. Nomes que começam com uma letra maiúscula são exportados (acessíveis a partir de outros pacotes). Nomes que começam com uma letra minúscula são não exportados (privados ao pacote).

Nomes exportados: visíveis fora do pacote

type User struct {
    Name  string  // Campo exportado
    Email string  // Campo exportado
}

func CreateUser(name string) User { // Função exportada
    return User{Name: name}
}

Nomes não exportados: visíveis apenas dentro do pacote

type secret struct {     // Struct não exportada
    password string      // Campo não exportado
}

func validate() bool {   // Função não exportada
    return true
}

Misto: struct exportada com alguns campos não exportados

type Account struct {
    Username string    // Exportado - acessível em qualquer lugar
    Email    string    // Exportado - acessível em qualquer lugar
    password string    // Não exportado - apenas dentro do pacote
}

Essa convenção de nomenclatura substitui os modificadores de acesso, como public e private, encontrados em outras linguagens.

// Letra maiúscula   = Exportado (público)
// Letra minúscula = Não exportado (privado)

func SaveData() {}  // Exportado
func loadData() {}  // Não exportado

Seguir esta convenção é essencial em Go. Quando outros pacotes importam seu código, eles só podem acessar nomes que começam com uma letra maiúscula.

challenge icon

Desafio

Médio

Corrija todos os nomes em product.go para seguir a convenção de nomenclatura de exportação do Go. Coloque em maiúscula a primeira letra de:

  • O nome da struct: productProduct
  • Todos os nomes dos campos: name, price, stock
  • Todos os nomes das funções: totalValue, displayInfo
  • Todas as referências aos campos dentro das funções

Experimente você mesmo

package main

import "fmt"

func main() {
    var name string
    var price float64
    var stock int
    fmt.Scan(&name, &price, &stock)

    p := Product{
        Name:  name,
        Price: price,
        Stock: stock,
    }

    fmt.Println(DisplayInfo(p))
    fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Go online