Golangに入門してみた。

  • Pocket
  • このエントリーをはてなブックマークに追加
  • 173 follow us in feedly

まえがき

Golangにちょっとだけ足を突っ込んでみたので今日やってみたことのメモを少し

開発環境

  • OS MacOSX
  • Go go1.2.1 darwin/amd64

Goの実行方法

『.go』ファイルを実行するにはこんな感じ

go run hello.go

実行ファイルにビルドするにはこんな感じ

go build hello.go

GolangでHelloWorld的な

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello golang")
	fmt.Println("Hello", "World", "Go")
}

実行するとこんな感じ

> go run hello.go

Hello golang
Hello World Go

fmtのprint系のメソッドでは引数を複数与えれるのが使いやすい。

変数を使ってみる

package main

import (
	"fmt"
)

func main() {
	var hoge int = 1
	var fuga = 1
	piyo := 1

	fmt.Println(hoge)
	fmt.Println(fuga)
	fmt.Println(piyo)
}

『var』を使うことで動的に型が決まったり、『:=』はそれの短縮した書き方であったり。そもそも変数名の後に型を書いたりと、かなり面白い書き方ができるようだ。

関数を使ってみる

package main

import (
	"fmt"
)

func add1(x int, y int) int {
	return x + y
}

func add2(x, y int) int {
	return x + y
}

// 複数の戻り値を返す関数
func add_and_minus(x, y int) (int, int) {
	return x + y, x-y
}

func main() {
	fmt.Println(add1(100, 200))
	fmt.Println(add2(100, 200))
	fmt.Println(add_and_minus(100, 200))
}

個人的に一番気持ち悪かったので、関数の書き方。

『func 関数名 引数 戻り値』の順番で書くようです。また、戻り値に複数の値を持たせることもできる変態です。

forループ

package main

import(
	"fmt"
)

func main(){
	for i:=0; i<10; i++ {
		fmt.Println(i)
	}

	// whileっぽいforループ
	// goではwhileは使えない
	counter1 := 0
	for counter1 < 10 {
		fmt.Println(counter1)
		counter1++
	}

	// 無限ループ
	counter2 := 0
	for {
		fmt.Println("loop")

		counter2++
		if counter2 == 10 {
			return
		}
	}
}

for文にも少し癖があり、他の言語で言う『for()』の『()』は書きません。これは個人的にいいなーとお思う点。あと、whileは使えないようです。

slice、配列みたいなもの

package main

import(
	"fmt"
)

func main(){
	list := []int{1, 2, 3, 4, 5}

	fmt.Println(list)
	fmt.Println(list[0])
	fmt.Println(list[1])
	fmt.Println(list[2])
	fmt.Println(list[3])
	fmt.Println(list[4])

	fmt.Println(list[2:])
	fmt.Println(list[:2])
	fmt.Println(list[1:3])

	// 要素の追加
	list = append(list, 6, 7, 8)
	fmt.Println(list)
	
	// 要素を削除したい
	list = append(list[:2], list[3:]...)
	fmt.Println(list)




	list2 := []string{"hoge", "fuga", "piyo"}

	fmt.Println(list2)
	fmt.Println(list2[0])
	fmt.Println(list2[1])
	fmt.Println(list2[2])

	// 要素の追加
	list2 = append(list2, "hoge")
	fmt.Println(list2)
}

# 実行してみる
> go run slice.go

[1 2 3 4 5]
1
2
3
4
5
[3 4 5]
[1 2]
[2 3]
[1 2 3 4 5 6 7 8]
[1 2 4 5 6 7 8]
[hoge fuga piyo]
hoge
fuga
piyo
[hoge fuga piyo hoge]

スライスは配列を使いやすくしたものだそうです。配列は配列でちゃんと存在するようで、配列はメモリの割り当てなどを厳密に行いたい時に用いるようです。

Map(ハッシュみたいなもの)を使ってみる

package main

import (
	"fmt"
)

func main(){
	hash := map[string] string{
		"name":    "hoge",
		"age":     "20",
		"address": "osaka",
	}

	fmt.Println(hash)
	fmt.Println(hash["name"])
	fmt.Println(hash["age"])
	fmt.Println(hash["address"])

	hash["hoge"] = "Hoge"
	fmt.Println(hash)
}

# 実行してみる
> go run map.go

map[name:hoge age:20 address:osaka]
hoge
20
osaka
map[name:hoge age:20 address:osaka hoge:Hoge]

おすすめ書籍

関連記事

peco-go-1peco-go-1.gif

MacでGoをインストールしてpecoいれてzshのhistoryをいい感じにする

まえがき 今回はMacにGoをインストールして、『peco』というGo...

記事を読む

Golangのswitch文がおもしろかったので少しメモ

まえがき 最近週末はGoを少し勉強中の私です。今日はGoの言語仕様をサ...

記事を読む

新着記事

no image

PHPでRubyのirbっぽいインタラクティブなスクリプトが実行できる「boris」

まえがき PHPでもRubyのirbみたいなことがしたくて探してみたと...

記事を読む

2015年の抱負と去年の振り返り〜よちよちWEB業界1年経験して〜

まえがき あけましておめでとうございます。今年もどうぞよろしくお願いし...

記事を読む

Java SE 7 Bronze試験(1Z0-802)を受けてきました

まえがき 以前から少し受けてみたかった試験『Java SE 7 Bro...

記事を読む

HubotでJenkinsのジョブを実行する

まえがき HubotをつかってJenkinsのジョブをじっこうしてみた...

記事を読む

no image

Hubotをforeverでデーモン化する

まえがき 今回はHubotをforeverを使ってデーモン化してみた時...

記事を読む

スポンサーリンク

PAGE TOP ↑