Maison >développement back-end >Golang >Portées de champ Golang Struct

Portées de champ Golang Struct

王林
王林original
2024-08-31 20:30:411227parcourir

Portées des champs de structure

Champs exportés

Dans d'autres langues, cela serait similaire au qualificatif d'accès public.

  • Si vous venez de Ruby comme moi, cela définirait des attributs avec attr_accessor

Si le champ (c'est-à-dire l'attribut) de la structure commence par une majuscule, cela signifierait que ce champ est exporté, donc accessible en dehors du package.

Supposons que nous ayons les fichiers suivants dans le projet Go :

main.go
/library
  /book.go

Nous définirions book.go dans son propre package.

// library/book.go

// Assume we have a package called "library" which contains a book.
package library

// Struct that represents a physical book in a library with exported fields
type Book struct {
  Title string, 
  Author string
}

Lors de son utilisation dans main.go :

package main

import (
  "fmt"
  "library" // importing the package that the struct Book is in
)

func main() {
  book := library.Book{
    Title: "Book Title",
    Author: "John Snow"
  }
  // Print the title and author to show that the struct Book fields are accessible outisde it's package "library"
  fmt.Println("Title:", book.Title)
  fmt.Println("Author:", book.Author)
}

En Ruby, cela serait synonyme d'utiliser attr_accessor puisqu'on peut :

  • lire et écrire les valeurs d'attribut en dehors de la classe
class Book
  # allow read and write on the attributes from outside the class
  attr_accessor(:title, :author)

  def initalize(title = nil, author = nil)
    @title  = title
    @author = authoer
  end
end

# usage outside of the class
book = Book.new()

# assinging attributes outside of the class
book.title = "Book Title"
book.title = "Jon Snow"

# accessing attributes outside of the class
puts book.title, book.author

Champs privés

Ceci est similaire aux qualificatifs d'accès privé dans d'autres langues

S'il commence par une minuscule, les champs ne seront pas accessibles.

Essayez-le par vous-même !

En supposant que le nom de votre module est myapp dans go.mod

// go.mod
module myapp

go 1.22.5

Nous créons un nouveau fichier dans library/book.go sous le package library

// library/book.go

// Assume we have a package called "library" which contains a book.
package library

// Fields start with lowercase, fields are not exported
type Book struct {
  title string
  author string
}

Importez le package dans main.go

// main.go
package main

import (
  "fmt"
  // import the library package
  "myapp/library"
)

func main() {
  book := library.Book{
    title: "Book Title",
    author: "John Snow"
  }
  // Print the title and author to show that the struct Book fields are accessible outisde it's package "library"
  fmt.Println("title:", book.title)
  fmt.Println("author:", book.author)
}

Si vous avez configuré Go dans VSCode, vous obtiendrez l'erreur de charpie suivante sur la ligne :

  • titre : "Titre du livre

Golang Struct Field Scopes

unknown field author in struct literal of type library.Bookcompiler[MissingLitField](https://pkg.go.dev/golang.org/x/tools/internal/typesinternal#MissingLitField

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn