9. 関数
Go言語の関数の特徴として、復数の戻り値を持つ関数や名前付き戻り値を持つ関数があります。
いくつかの種類の関数例をご紹介します。
9.1 関数
一般的な関数
func 関数名(変数名 型, 変数名 型) 型 {
// 処理内容
}
// 例
func add(x int, y int) int {
return x + y
}
戻り値を持たない関数
func 関数名(変数名 型, 変数名 型) {
// 処理内容
}
func hello(s string) {
fmt.Println(s)
}
復数の戻り値を持つ関数
func 関数名(変数名 型, 変数名 型) (型, 型) {
// 処理内容
}
func swap(x, y string) (string, string) {
return y, x
}
名前付き戻り値を持つ関数
戻り値に名前をつけることができます。
こうすることで return と書くだけで、戻り値の変数の値が返ります。
func 関数名(変数名 型, 変数名 型) (変数名 型, 変数名 型) {
// 処理内容
}
// 例
func split(sum int) (x int, y int) {
x = sum * 4 / 9
y = sum - x
return
}
可変長引数を持つ関数
引数の型の前に … をつけるとその変数は可変長引数となります。
可変長引数の変数はスライスとして扱うことができます。
func 関数名(変数名 型) 型{
// 処理内容
}
// 例
func sum(values ...int) int {
s := 0
for v := range values {
s += v
}
return s
}
9.2 メソッド
メソッドはレシーバを持つ関数です。関数名の前に、レシーバと呼ばれる変数名と型を設定します。
メソッドはレシーバの型に紐付けられます。
func (変数名 型) 関数名(変数名 型) 型 {
// 処理内容
}
// 例
type Point struct {
x float64
y float64
}
func (p *Point) Length() float64 {
return math.Sqrt(p.x * p.x + p.y * p.y)
}
func (p *Point) Scale(factor float64) {
p.x *= factor
p.y *= factor
}
また、メソッドの呼び出しは以下のように行います。
p := &Point{x: 2.0, y: 3.0}
// メソッドの呼び出し
p.Length()

