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
}

Esta convenção de nomenclatura substitui 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 essa 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 exportada do Go. Coloque a primeira letra em maiúscula de:

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

Folha de consulta

Em Go, a primeira letra de um nome determina sua visibilidade:

  • Letra maiúscula = Exportado (acessível a partir de outros pacotes)
  • Letra minúscula = Não exportado (privado ao pacote)

Nomes exportados:

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:

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

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

Visibilidade mista:

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
}

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

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