「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GoLang 構造体

GoLang 構造体

2024 年 11 月 8 日に公開
ブラウズ:915

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
- book: 関数内の構造体にアクセスするための変数
- Book: 構造体の型
ToString() 関数の名前
関数の戻り値の型
リリースステートメント この記事は次の場所に転載されています: https://dev.to/nerdherd/golang-structs-3o0k?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3