豚さんです。
今回は関数・構造体について書いていきます。
Go言語にはクラスが存在しないという事前知識はあり、
代わりに構造体というものが存在するということは
調べて何となく知っている所からスタートです。
まずは、関数の説明を書いていき構造体の説明に移っていきます。
※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。
go version go1.19.4 darwin/amd64
1. 関数
前回の記事では、とりあえずmain関数で実行していましたが
どういうことか理解していませんでした。
Go言語はmainパッケージのmain関数で実行されるんですね。
sample.go
// Goのプログラムはmainパッケージから実行する
package main
import "fmt"
func main() {
fmt.Println("テスト")
}
$ go run sample.go
テスト
では、関数を作っていきます。
func ○○ が関数です。
sample.go
// Goのプログラムはmainパッケージから実行する
package main
import "fmt"
// sample(引数 引数の型) returnする引数
func sample(sample string) string {
return sample + "関数を実行しました"
}
func main() {
// sample関数呼び出し
fmt.Println(sample("サンプル"))
}
$ go run sample.go
サンプル関数を実行しました
複数returnする場合は以下の様に記載します。
sample.go
package main
// int型をstring型にキャストするためのパッケージ
import "strconv"
import "fmt"
// sample(引数 引数の型) returnする引数
func sample(sample string, num int) (string, string) {
num_string := strconv.Itoa(num)
return sample, num_string
}
func main() {
// sample関数呼び出し。
// 戻り値は2つのため、sample, num_stringとする
sample, num_string := sample("サンプル", 1)
fmt.Println(sample + "関数は" + num_string + "回実行しました")
}
$ go run sample.go
サンプル関数は1回実行しました
もし、第一引数がいらない場合、ブランク変数(_)を使います。
sample.go
package main
import "strconv"
import "fmt"
func sample(sample string, num int) (string, string) {
num_string := strconv.Itoa(num)
return sample, num_string
}
func main() {
// この場合、num_stringにのみ値が入る
_, num_string := sample("サンプル", 1)
fmt.Println("関数は" + num_string + "回実行しました")
}
$ go run sample.go
関数は1回実行しました
...を使えば可変引数を利用可能です。
sample.go
package main
import "fmt"
// numに複数の数値が入る
func sample(num ...int) {
fmt.Println(num)
}
func main() {
// 複数引数を指定可能
sample(1, 2, 3, 4, 5)
}
$ go run sample.go
[1 2 3 4 5]
※ 個人的にsample関数でnumをreturnしたいですが、
やり方はまだ見つかっていません。
2. 構造体(struct)
type ○○ struct で構造体を作成します。
sample.go
package main
import "strconv"
import "fmt"
// メンバ変数定義
type Palculation struct {
means string
num int
}
// ③set.でstructのmeansとnumを呼んで値設定
// *struct名 で記載
func (set *Palculation) setPalculation(means string, num int) {
set.means = means
set.num = num
}
// ⑤
func (get *Palculation) getPalculation() {
get.num += 5
num_string := strconv.Itoa(get.num)
fmt.Println(get.means + "の結果は" + num_string + "です")
}
func main() {
// ①palculationにstructを入れる
var palculation Palculation
// ②上記の関数を呼び出す
palculation.setPalculation("足し算", 1)
// ④
palculation.getPalculation()
}
$ go run sample.go
足し算の結果は6です
参考
ありがとうございました。