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)とかで確認してあげれば良いかと思います。