Maison >développement back-end >Golang >Portées de champ Golang Struct
Dans d'autres langues, cela serait similaire au qualificatif d'accès public.
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 :
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
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 :
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!