ホームページ  >  記事  >  バックエンド開発  >  GoLang 構造体

GoLang 構造体

WBOY
WBOYオリジナル
2024-08-30 06:41:06622ブラウズ

GoLang Structs

Golang では、構造体はデータの単純なコンテナーです。

  • フィールドを含めることができます
  • メソッドが関連付けられていません
    • 個別に定義され、構造体型に関連付けられたメソッド。

以下は、Ruby と GoLang で同等の単純な Book クラスを示しています。

class Book
  attr_reader(:title, :author)

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

# usage
book = Book.new('Title', 'Jon Snow')
// Equivalent to `class Book` in ruby
type Book struct {
  Title string,
  Author string
}

GoLang 型のインスタンス化

複合リテラル

複合リテラルは、複合型を 1 ステップで初期化するための構文です。次の型をインスタンス化できます:

  • 構造体
  • 配列
  • スライス
  • 地図

ここでは、新しい Book インスタンスを変数 book に割り当てています

// Composite Literal
book := Book{
  Title: "Title",
  Author: "Author"
}

新しいキーワードを使用する

より長い形式では、新しいキーワードを使用します。これは、Ruby で book = Book.new(..)

を使用してクラスをインスタンス化する方法に似ています。

= 記号を使用して本の属性 (つまり、タイトルと著者) を割り当てます。

// Using the `new` keyword
book        := new(Book)
book.Title  = "Book Title"
book.Author = "John Snow"

短い変数宣言なし (:=)

最初の例で記号 := を使用したことに注意してください?

これは、変数を宣言して値を割り当てる次の冗長な方法の糖衣構文です。

// Without Short Virable Declaration

// Example 1
var book Book // Declare variable `book` of type `Book`
book.Title = "Book Title" // Assign the value to book variable
book.Author = "John Snow"

// Example 2
var count int
count = 20

工場機能

次のような場合に、ファクトリ パターンを使用して構造体の初期化を簡単にすることもできます。

  • 追加のロジックを追加
  • デフォルト値を追加

本のタイトルと著者トークンの最初の文字を大文字にしたいと仮定します。

// Factory Function
func NewBook(title string, author string) Book {
  return Book{
    Title: titlelise(title), // default logic to "titlelise" 
    Author: titlelist(author)
  }
}

func titlelise(str string) {
  caser := cases.Title(lanaguage.English)
  return caser.String(str)
}

構造体に関数を付加する

Ruby では、単純にクラス内に関数を定義します。ここでは、本のタイトル名、著者名を出力するための to_string() という関数を定義しています。

class Book
  attr_reader(:title, :author)

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

  # new function we added
  def to_string()
    put "#{title} by #{string}"
  end
end

GoLang では、関数に構造体を渡すことによって関数を「アタッチ」します。

// Equivalent to `class Book` in ruby
type Book struct {
  Title string,
  Author string
}

// Attaching the function to the `struct`
func (book Book) ToString() string {
  return fmt.Sprintf("%s by %s", book.Title, book.Author)
}

// Usage
book := Book{
  Title: "Title",
  Author: "Author"
}

book.ToString()
// => Title by Author

説明:

func (book Book) ToString() string
トークン 説明 関数 関数キーワード (本) 関数を Book struct 型にアタッチします
Token Description
func function keyword
(book Book) Attaching the function to the type Book struct
- book: variable to access the struct within the function
- Book: type of the struct
ToString() name of the function
string return type of the function
- book: 関数内の構造体にアクセスするための変数- Book: 構造体の型 ToString() 関数の名前 文字列 関数の戻り値の型

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

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