English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎チュートリアル

Golang 制御文

Golang ファンクション & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 並行処理

Golang エラ(Error)

Golang その他の雑多な項目

Go 同名メソッド

Go言語では、同一のパッケージ内で名前が同じ二つのまたはそれ以上のメソッドを作成することができますが、これらのメソッドの受信者異なるタイプを持たなければなりません。この機能はGoの関数では使用できません。これは、同じ名前のメソッドを同一のパッケージで作成することは許可されていないということを意味し、そのようにしようとするとコンパイラがエラーを返します。

文法:

func(reciver_name_1 Type) method_name(parameter_list)(return_type){
    // Code
}
func(reciver_name_2 Type) method_name(parameter_list)(return_type){
    // Code
}

この概念について例を用いて説明しましょう:

例1:

package main 
  
import "fmt"
  
//構造体を作成する
type student struct { 
    name   string 
    branch string 
} 
  
type teacher struct { 
    language string 
    marks    int
} 
  
//同じ名前のメソッドで異なる型の受信者
func (s student) show() { 
  
    fmt.Println("学生名:", s.name) 
    fmt.Println("Branch: ", s.branch) 
} 
  
func (t teacher) show() { 
  
    fmt.Println("Language:", t.language) 
    fmt.Println("Student Marks: ", t.marks) 
} 
  
func main() { 
  
    // 構造体の値を初期化する
    val1 := student{"Rohit", "EEE"} 
  
    val2 := teacher{"Java", 50} 
  
    //メソッドを呼び出す
    val1.show() 
    val2.show() 
}

出力:

学生名: Rohit
Branch:  EEE
Language: Java
Student Marks:  50

使用方法:上記の例では、同じ名前のメソッドが二つありますが、show()、受信者の型が異なります。ここで、最初のshow()メソッドはs student型の受信者を含んでおり、二つ目のshow()メソッドはt teacher型の受信者を含んでいます。以下のmain()関数内で、それぞれの構造体変数を使ってこれらのメソッドを呼び出します。同じ型の受信者でこのメソッドを作成しようとすると、エラーが発生します。show()同じ名前のメソッドがある場合、コンパイラはエラーを投げ出します。

例2:

//同じ名前のメソッドを作成する
//非構造体型の受信者
package main 
  
import "fmt"
  
type value_1 string 
type value_2 int
  
//同じ名前の関数を作成する
//異なる型の非構造体受信者
func (a value_1) display() value_1 { 
  
    return a + ".com"
} 
  
func (p value_2) display() value_2 { 
  
    return p + 298 
} 
  
func main() { 
  
    //初期値 
    res1 := value_1("w3codebox") 
    res2 := value_2(234) 
  
    // 表示結果を印字する
    fmt.Println("Result" 1: ", res1.display()) 
    fmt.Println("Result" 2: ", res2.display()) 
}

出力:

結果 1:  oldtoolbag.com
結果 2: 532