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 exportadoSeguir 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.
Desafio
MédioCorrija 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:
product→Product - 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))
}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
1Fundamentos de OOP em Go
Arquivos ExternosWorkspace e Módulos do GoPacotes e ImportsNomes Exportados vs. Não ExportadosIntrodução à OOP em GoStructs como ClassesDefinindo Métodos em StructsReceptores de Ponteiro vs. de ValorInicialização de StructsFunções ConstrutorasRecapitulação — Calculadora Simples4Interfaces
Introdução às InterfacesImplementação ImplícitaInterface como ContratoInterface Vazia (any)Asserção de TipoSwitch de TipoComposição de InterfacesInterfaces Stringer e ErrorRecapitulação - Calculadora de Formas7Encapsulamento
Campos Exportados vs. Não ExportadosEncapsulamento no Nível de PacoteMétodos Getters e SettersOcultação de Informações em GoRecapitulação - Registros de Alunos10Genéricos (Go 1.18+)
Introdução aos genéricosParâmetros de tipoRestrições de tipoStructs genéricasAlternativa para métodos genéricosRecapitulação - Coleção genérica13Padrões de Projeto — Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão Abstract FactoryPadrão ObserverPadrão Strategy2Tipos e Structs em Profundidade
Tipos Básicos e CompostosDefinições de Tipos PersonalizadosTags de StructStructs AnônimasStructs AninhadasValores Zero e PadrõesRecapitulação - Livro de Contatos5Composição em vez de herança
Por que Go não tem herançaNoções básicas de incorporação de structsPromoção de métodosIncorporação de várias structsIncorporação vs agregaçãoOcultação de métodos incorporadosRecapitulação - Hierarquia de funcionários8Tratamento de Erros e OOP
A interface errorTipos de Erro PersonalizadosEncapsulamento de Erros (fmt.Errorf)Erros Sentinelaerrors.Is() e errors.As()Panic, Defer e RecoverRecapitulação - Analisador de Arquivos3Ponteiros e Memória
Fundamentos de Ponteiros em GoPonteiros para StructsPassagem por Valor vs. ReferênciaA Função new()Coleta de Lixo em GoRecapitulação - Construtor de Lista Ligada6Polimorfismo em Go
Polimorfismo via InterfacesDuck Typing em GoRegras de Satisfação de InterfacesColeções PolimórficasInjeção de DependênciasRecapitulação - Processador de Pagamentos9Concorrência e OOP
Fundamentos de GoroutinesCanais e comunicaçãoCanais com e sem bufferInstrução selectsync.Mutex e sync.RWMutexsync.WaitGroupDesign de structs thread-safeRevisão - Worker PoolPratique por conta própria: Compilador de Go online