LoginSignup
0
0

More than 1 year has passed since last update.

PHPerが学ぶGo言語② 関数・構造体

Last updated at Posted at 2023-01-15

豚さんです。
今回は関数・構造体について書いていきます。

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です

参考

ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0