ホームページ >バックエンド開発 >Golang >Golang 構造体フィールド スコープ

Golang 構造体フィールド スコープ

王林
王林オリジナル
2024-08-31 20:30:411229ブラウズ

構造体のフィールドスコープ

エクスポートされたフィールド

他の言語では、これはパブリック アクセス修飾子に似ています。

  • 私と同じように Ruby を使用している場合、これは attr_accessor を使用して属性を定義することになるでしょう

構造体のフィールド (つまり、属性) が 大文字 で始まる場合、そのフィールドがエクスポートされ、パッケージの外部からアクセスできることを意味します。

Go プロジェクトに次のファイルがあると仮定します:

main.go
/library
  /book.go

book.go を独自のパッケージで定義します。

// 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
}

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)
}

Ruby では、次のことができるため、これは attr_accessor を使用することと同義です。

  • クラス外で属性値の読み取りと書き込みを行う
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

プライベートフィールド

これは、他の言語のプライベート アクセス修飾子に似ています

小文字で始まる場合、フィールドにはアクセスできません。

自分で試してみてください!

モジュール名が go.mod の myapp であると仮定します

// go.mod
module myapp

go 1.22.5

パッケージ ライブラリの下の library/book.go に新しいファイルを作成します

// 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
}

パッケージを 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)
}

VSCode で Go をセットアップしている場合、行に次の lint エラーが表示されます。

  • title: 「本のタイトル

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

以上がGolang 構造体フィールド スコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。