サーチ…
構文
- この関数は構造体のコピーを受け取ります。func(t)
- func(t * T)exampleTwo(i int)(n int){return i} //このメソッドはstructへのポインタを受け取り、それを変更できるようになります
基本的な方法
Goのメソッドは、 受信者を除いて関数と似ています。
通常、レシーバはある種の構造体または型です。
package main
import (
"fmt"
)
type Employee struct {
Name string
Age int
Rank int
}
func (empl *Employee) Promote() {
empl.Rank++
}
func main() {
Bob := new(Employee)
Bob.Rank = 1
fmt.Println("Bobs rank now is: ", Bob.Rank)
fmt.Println("Lets promote Bob!")
Bob.Promote()
fmt.Println("Now Bobs rank is: ", Bob.Rank)
}
出力:
Bobs rank now is: 1
Lets promote Bob!
Now Bobs rank is: 2
メソッドの連鎖
golangのメソッドを使うと、メソッドへのポインタを渡し、ポインタを次のような同じ構造体に返すメソッド "連鎖"を行うことができます:
package main
import (
"fmt"
)
type Employee struct {
Name string
Age int
Rank int
}
func (empl *Employee) Promote() *Employee {
fmt.Printf("Promoting %s\n", empl.Name)
empl.Rank++
return empl
}
func (empl *Employee) SetName(name string) *Employee {
fmt.Printf("Set name of new Employee to %s\n", name)
empl.Name = name
return empl
}
func main() {
worker := new(Employee)
worker.Rank = 1
worker.SetName("Bob").Promote()
fmt.Printf("Here we have %s with rank %d\n", worker.Name, worker.Rank)
}
出力:
Set name of new Employee to Bob
Promoting Bob
Here we have Bob with rank 2
メソッドの引数としてインクリメント/デクリメント演算子
Goは++と - 演算子をサポートしていますが、その動作はc / c ++とほぼ同じですが、そのような演算子を持つ変数は関数の引数として渡すことはできません。
package main
import (
"fmt"
)
func abcd(a int, b int) {
fmt.Println(a," ",b)
}
func main() {
a:=5
abcd(a++,++a)
}
出力:構文エラー:予期しない++、カンマが必要ですか、または)
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow