LotosLabo

プログラミング技術とか気になった情報を載せていきます

Go言語に少し触れてみた

はじめに

Go言語とは、Googleによって発表されたオープンソースプログラミング言語のことです。

- シンプルな言語
- コンパイル・実行速度が早い
- 安全性が高い
- 親切である

という特徴があります。
(公式から抜粋してきた内容と、使ってみた感想をまとめてみました)

使い方


Go言語インストール先はこちら


go1.2.windows-amd64.msiというのがあるのでそちらを選択します。
64bitの方はこちらを選んでください。

IDEにはインストールファイルに入っている
LiteIDEというツールを使っていきます。


インストールが完了しましたら、環境変数を設定します。

①PATH→ C:\Go\bin;
②GOROOT → C:\Go

それぞれダウンロードした場所を指定します。

次に、下の画像の黒いボタンをクリックして、上のGOROOTとPATHのように入力します。

f:id:lo25131:20140126193257j:plain


最後にViewタブよりManage GOPATHをクリックし、
Custom Directoriesにワークスペースを作成すれば完了です。


LiteIDEは最初このような画面になっています。

f:id:lo25131:20140126194033j:plain



ファイルより新規作成を行ったらこのような画面が表示されます。
先ほど作成したワークスペース、画面上のGOPATHから選択し
TempleteにはGo1 Command Projectを選択します。
このとき名前も入力してください。

f:id:lo25131:20140126194615j:plain


最初はこのようなコードが表示されていると思います。
プロジェクト名を「test」として入力しました。

基本プログラム

■出力

// test project main.go
package main
import ("fmt")
func main() {
	fmt.Println("Hello World!")
}


最初はpackageから始まります。
次にパッケージからfmtというのをインポートします。
名前の通り、fmt→フォーマットするという意味です。

importでfmtを使用しなくても、

package main
func main() {
	println("hello world")
}

これでも出力することは可能です。
今回は 「hello world」という文字が入力される結果となります。

ビルドにはビルドタブのBilldAndRunかもしくは
キーボードのCtrl + Rでビルドが可能です。


これをみるとGo言語のコードの特徴として、

  • 文末にセミコロンが必要ない
  • 関数定義型

という感じでした。

変数出力

package main
import "fmt" // ()で囲まなくてもいいです
func main() {
	var aisatu string = "こんにちは"
	hello(aisatu)
}
func hello(s string) {
	fmt.Println(s)
}


またこの変数宣言の
var aisatu string = "こんにちは" は
aisatu := "こんにちは" として代用することが出来ます。

package main
import "fmt" 
func main() {
	aisatu := "こんにちは"
	hello(aisatu)
}
func hello(s string) {
	fmt.Println(s)
}

時間取得

package main

import (
	"fmt"
	"time"
)
func main() {
	fmt.Println("The time is", time.Now())
}


時間にはtimeをインポートします
これを出力すると・・・

The time is 2014-01-26 20:15:21.7558825 +0900 JST

このように表示されます。しかしコレでは見にくいので
time.Now() を  nowにします。

package main
import (
	"fmt"
	"time"
)
func main() {
	now := time.Now()
	fmt.Println(now.Year())
}

now.Year()により、年が取得できます。
その他にも
now.Weekday() 曜日取得
now.Month()  月取得
now.Add(time.Duration(1) * time.Second 1秒後取得

ディレクトリの作成

package main
import (
	"os"
)
func main() {
	os.Mkdir("File1", 0777) //ディレクトリを1つ
        os.MkdirAll("File2/File3",0777) //ディレクトリを複数
}

Mkdirとはディレクトリを作成するコマンドです

ディレクトリの名前変更

package main
import (
	"os"
)
func main() {
	os.Rename("File1", "File4")
}

os.RenameによりFile1の名前をFile4に変更する

ディレクトリの移動

package main
import (
	"os"
)
func main() {
	os.Rename("File1/File2/File3", "File1/File3")
}

File2にあるFile3File1に持ってくる方法です。

ディレクトリの削除

package main
import (
	"os"
)
func main() {
	os.Remove("File1") // 単体
        os.RemoveAll("File1/File2/File3")  //まとめて
}

os.Removeで削除します

ファイルの作成

package main
import (
	"os"
)
func main() {
	os.Create("hoge.txt")                    
}

os.Createにより、テキストファイルなど修飾子を付けて作成することが出来ます。また、ファイルの名前変更、移動、削除はディレクトリと同じです。

ファイルの書き込み

package main
import (
	"io/ioutil"
	"os"
)
func main() {
	os.Mkdir("file", 0777)
	os.Create("file/file.txt")
	content := []byte(
		"Hello world\n" +
	    "こんにちは\n",
	)
	ioutil.WriteFile("file/file.txt", content, os.ModePerm)
}


ファイルの読み込み・書き込みにはio/ioutilというパッケージを使います。
このプログラムでは
①ファイルの作成
②ファイルの中にテキストファイルを作成
③テキストファイルに文字を書き込む
というようになっています。


ファイルの読み込み

package main
import (
	"fmt"
	"io/ioutil"
)
func main() {
	contents, err := ioutil.ReadFile("file/file.txt")
	if err != nil {
		fmt.Println(contents, err)
		return
	}
	println(string(contents))
}


先ほどの書き込みで入力された値が表示されます。

まとめ


ところでなぜGO言語の記事を書こうと思ったのか。
それはとある雑誌に掲載してあったからです。
今年は「GO言語が流行る!?」とあったので少し触ってみました。
扱いやすくてシンプルにコードが書けるという点で今後伸びそうですね。
今後これで何を作るというわけではありませんが、いろいろと使い道がありそうなので、思いついたらまた記事を書きます。