Go 言語のメソッド

GolangGolangBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Go言語のメソッド機能に関する知識をテストすることを目的としています。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) go/ObjectOrientedProgrammingGroup -.-> go/methods("Methods") subgraph Lab Skills go/methods -.-> lab-15488{{"Go 言語のメソッド"}} end

メソッド

提供されたコードは、widthheight の2つのフィールドを持つ rect と呼ばれる構造体型を定義します。この構造体型に対して、areaperim の2つのメソッドが定義されています。area メソッドは長方形の面積を計算し、perim メソッドは長方形の周りの長さを計算します。メイン関数はこれら2つのメソッドを呼び出し、その結果を出力します。

  • area メソッドのレシーバ型は *rect でなければなりません。
  • perim メソッドのレシーバ型は rect でなければなりません。
  • area メソッドは長方形の面積を返す必要があります。
  • perim メソッドは長方形の周りの長さを返す必要があります。
  • main 関数は両方のメソッドを呼び出し、その結果を出力する必要があります。
$ go run methods.go
area: 50
perim: 30
area: 50
perim: 30

## 次に、Goの関連するメソッドのグループ化と命名のメカニズムである
## インターフェイスを見てみましょう。

以下が完全なコードです。

// Goは構造体型に定義された _メソッド_ をサポートしています。

package main

import "fmt"

type rect struct {
	width, height int
}

// この `area` メソッドの _レシーバ型_ は `*rect` です。
func (r *rect) area() int {
	return r.width * r.height
}

// メソッドはポインタまたは値の
// レシーバ型のどちらでも定義できます。ここに値レシーバの例があります。
func (r rect) perim() int {
	return 2*r.width + 2*r.height
}

func main() {
	r := rect{width: 10, height: 5}

	// ここでは、構造体に定義された2つのメソッドを呼び出します。
	fmt.Println("area: ", r.area())
	fmt.Println("perim:", r.perim())

	// Goはメソッド呼び出し時の値とポインタの間の変換を自動的に処理します。
	// メソッド呼び出し時のコピーを避けるため、またはメソッドが受け取る構造体を変更できるようにするために、
	// ポインタレシーバ型を使用することができます。
	rp := &r
	fmt.Println("area: ", rp.area())
	fmt.Println("perim:", rp.perim())
}

まとめ

この実験では、Go言語でメソッドを定義し、構造体型に対して計算を行う能力をテストします。rect 構造体型に対して areaperim のメソッドが定義され、main 関数がこれらのメソッドを呼び出して結果を出力します。