Blogブログ

go言語

2020.07.19

Go言語の関数定義と[配列][スライス][map]についてなんか書く。

サムネイルはgo言語→gogo→バンコクという連想です。

まずは関数の基礎から。

最小単位を書きます。

package main
import "fmt"

func hello(person string)string{
   var res string
   res = person +"さんが返ります。"
   return res
}

func main() {
 fmt.Println(hello("yama"))


}

はい。
まず関数は
func XXX(変数名 型)返り値の型 {
 処理
return 返り値
}

です。
その関数名をmain()のなかで普通に使えます。

ここまでは特別なことはないです。

ちなみに返り値の変数名と型を事前に書くことで、
returnの後ろにいちいち変数を指定しなくても返すこともできます。
package main
import "fmt"

func hello(person string)(res string){
   res = person +"さんが返ります。"
   return
}

func main() {
 fmt.Println(hello("yama"))
}

引数を複数持つ場合と返り値を複数持つ場合

package main
import "fmt"

func hello(person string , age int)(res string , feature_age int){
   res = person +"さんが返ります。"
   feature_age = age + 10
   return
}
func main() {
 fmt.Println(hello("yama" , 37))
}

直感的にもわかりやすいです。

関数名を省略して関数を作ることもできます。

func main() {
 y := func(person string , age int)(res string , feature_age int){
      res = person +"さんが返ります。"
      feature_age = age + 10
      return
      }
 fmt.Println(y("yama",40))
}

じゃ、配列を扱ってみようか。

覚え方としてはまずvarを書き、
なんという変数名で、[幾つのキー]を、何の型でもつ?という形式で宣言します。

var whatvariable[5]string

みたいな感じ。
このように書くと
whatvariable[1] = “yama”

みたいに使えます。

いちいち幾つのキーがあるとか書くのがだるい人へ

 arr2 := [5]string{"a", "b", "c", "d", "e"}
 fmt.Println(arr2[1])

これは下記のように書けます。

 arr2 := [...]string{"a", "b", "c", "d", "e"}
 fmt.Println(arr2[1])

5つとか右を見れば当たり前なので”…”で省略します。

じゃ、スライス行ってみようか。

さっきのarr2 := […]string{“a”, “b”, “c”, “d”, “e”}の…を省略するとスライスになります。

//配列からスライスを作ることもできるけれど、スライスを直接作るのは例えばこれ
s := []string("a" , "b")
 //他にも↓とやっても宣言できる。この場合は[0,0,0]が生成されてる
s := make([]int , 3) 
 

スライスを配列から生成することもできる。


 arr2 := [...]string{"a", "b", "c", "d", "e"}
 fmt.Println(arr2[1])
 fmt.Println(len(arr2))

 slice := arr2[1:3] 
//こう書くことでarr2のarr2[1]以上で、arr2[3]より小さいまでを切り出す。
//つまり、sliceには今、slice[0]にbとslice[1]にc が入ってることになる。
 fmt.Println(slice)

 //スライスのキーの数を数える
 fmt.Println(len(slice))
 //スライスの末尾を指定しなかったときに切り出し得る最大の数
 fmt.Println(cap(slice))

じゃ、マップ行ってみようか。

phpとかやっていると一番馴染みがある書き方かもしれない。
とりあえず宣言は
wow := make(map[string]string)
このようにmake関数を使ってmapの引数がstringですよということと値もstringですよということを言ってる。

 wow := make(map[string]string)
 wow['name'] = "yamamoto"
 wow['age']  = "37"
 
//上記はこれと同じ
 wow :=map[string]string{"name":"yamamoto" ,"age":"37"}

phpでいうところの
if(!empty($arr)) { }
をやりたい時、つまり値があるかをチェックしたい時は

value , res := wow["name"]

とやると、valueにはmapの値、resには真偽値が入ってきます。
あとは
fmt.Println(res)とかで確認してあげれば良いかと思います。