Skop Medan Struktur Golang

王林
Lepaskan: 2024-08-31 20:30:41
asal
943 orang telah melayarinya

Skop Medan Struktur

Medan Dieksport

Dalam bahasa lain, ini akan serupa dengan kelayakan akses awam.

  • Jika anda berasal dari Ruby seperti saya, ini akan mentakrifkan atribut dengan attr_accessor

Jika medan (iaitu atribut) struct bermula dengan huruf besar, ini bermakna medan itu dieksport, dengan itu boleh diakses di luar pakej.

Anggapkan kami mempunyai fail berikut dalam projek Go:

main.go
/library
  /book.go
Salin selepas log masuk

Kami akan mentakrifkan book.go dalam pakejnya sendiri.

// 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
}
Salin selepas log masuk

Apabila menggunakannya dalam 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)
}
Salin selepas log masuk

Dalam Ruby, ini adalah sinonim dengan menggunakan attr_accessor kerana kita boleh:

  • baca dan tulis nilai atribut di luar kelas
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
Salin selepas log masuk

Medan Persendirian

Ini serupa dengan kelayakan akses peribadi dalam bahasa lain

Jika ia bermula dengan huruf kecil, medan tidak akan dapat diakses.

Cuba sendiri!

Andaikan nama modul anda ialah myapp dalam go.mod

// go.mod
module myapp

go 1.22.5
Salin selepas log masuk

Kami mencipta fail baharu dalam library/book.go di bawah pustaka pakej

// 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
}
Salin selepas log masuk

Import pakej ke 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)
}
Salin selepas log masuk

Jika anda mempunyai persediaan Go dalam VSCode, anda akan mendapat ralat lint berikut pada talian:

  • tajuk: "Tajuk Buku

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
Salin selepas log masuk

Atas ialah kandungan terperinci Skop Medan Struktur Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!