Heim > Backend-Entwicklung > Golang > Golang-Struct-Feldzielfernrohre

Golang-Struct-Feldzielfernrohre

王林
Freigeben: 2024-08-31 20:30:41
Original
1210 Leute haben es durchsucht

Strukturfeldbereiche

Exportierte Felder

In anderen Sprachen ähnelt dies dem Qualifikationsmerkmal für den öffentlichen Zugriff.

  • Wenn Sie wie ich aus Ruby stammen, wäre dies das Definieren von Attributen mit attr_accessor

Wenn das Feld (d. h. das Attribut) der Struktur mit einem Großbuchstaben beginnt, würde dies bedeuten, dass dieses Feld exportiert wird und somit außerhalb des Pakets zugänglich ist.

Angenommen, wir haben die folgenden Dateien im Go-Projekt:

main.go
/library
  /book.go
Nach dem Login kopieren

Wir würden book.go in einem eigenen Paket definieren.

// 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
}
Nach dem Login kopieren

Bei Verwendung in 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)
}
Nach dem Login kopieren

In Ruby wäre dies gleichbedeutend mit der Verwendung von attr_accessor, da wir Folgendes können:

  • Lesen und schreiben Sie die Attributwerte außerhalb der Klasse
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
Nach dem Login kopieren

Private Felder

Dies ähnelt den Qualifikationsmerkmalen für den privaten Zugriff in anderen Sprachen

Wenn es mit einem Kleinbuchstaben beginnt, sind die Felder nicht zugänglich.

Probieren Sie es selbst aus!

Angenommen, Ihr Modulname ist myapp in go.mod

// go.mod
module myapp

go 1.22.5
Nach dem Login kopieren

Wir erstellen eine neue Datei in Library/book.go unter der Paketbibliothek

// 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
}
Nach dem Login kopieren

Importieren Sie das Paket in 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)
}
Nach dem Login kopieren

Wenn Sie Go in VSCode eingerichtet haben, wird in der Zeile der folgende Lint-Fehler angezeigt:

  • Titel: „Buchtitel“

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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGolang-Struct-Feldzielfernrohre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage