【Go言語】環境構築・動作確認・並列処理

Go言語は2009年にGoogleより発表されたプログラミング言語です。

シンプルな言語体系によりプログラミングが非常に容易であることが特徴です。多種多様のプログラミング言語があるなか学習コストが抑えられるというのは非常に大きいことだと思います。

また、軽量な動作で強力な処理能力を持ちます。実際に使ってみたんですが、数百のプロセスからなる並列処理を簡単に実装できました。

今回このGo言語を仕事で扱う機会がありましたので、忘れないうちにまとめておこうと思います。

環境構築

インストール先

/usr/local/go

インストール手順

 $ cd /usr/local

 $ # もちろんwgetでなくても可
 $ # WARNING: certificateが出るなら --no-check-certificate
 $ wget https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz

 $ tar xvpf go1.5.1.linux-amd64.tar.gz

 $ rm go1.5.1.linux-amd64.tar.gz

※バージョンは適時修正

環境変数の設定

 $ export GOROOT=/usr/local/go
 $ export GOPATH=/usr/local/go/.go
 $ PATH=$PATH:$HOME/bin:${GOROOT}/bin

環境変数の確認

 $ go env
 GOARCH="amd64"
 GOBIN=""
 GOEXE=""
 GOHOSTARCH="amd64"
 GOHOSTOS="linux"
 GOOS="linux"
 GOPATH="/usr/local/go/.go"
 GORACE=""
 GOROOT="/usr/local/go"
 GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
 GO15VENDOREXPERIMENT=""
 CC="gcc"
 GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
 CXX="g++"
 CGO_ENABLED="1"

各種ライブラリの追加(環境変数設定後に実施)

基本はgithubから go get コマンドによりインストールします。

 $ # MySQLのライブラリをインストール
 $ go get github.com/go-sql-driver/mysql

ソースコード

hello.go

package main
import "fmt"
func main(){
  fmt.Printf("hello go!\n")
}

動作確認

※コンパイル言語ですがスクリプトによる実行も可能です。

 $ go run hello.go
 hello go!

コンパイル

 $ go build hello.go

コンパイルが成功すると実行権限の付いた hello が生成される。

並列処理

次に並列処理のサンプルです。

方法としては関数で定義した処理を必要なプロセス分呼び出すだけです。

ソースコード

test.go

package main

import (
 "fmt"
 "time"
 "math/rand"
)

func main(){
  fmt.Printf("start.\n")
  go hello("go1")
  go hello("go2")
  time.Sleep(3 * time.Second)
  fmt.Printf("end.\n")
}

func hello(go_routine string){
  for i := 0; i < 10; i++ {
    fmt.Printf("%s %d: hello, world.\n", go_routine, i)
    time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
  }
}

実行結果

 $ go run test.go
 start.
 go1 0: hello, world.
 go2 0: hello, world.
 go1 1: hello, world.
 go2 1: hello, world.
 go1 2: hello, world.
 go2 2: hello, world.
 go2 3: hello, world.
 go2 4: hello, world.
 go1 3: hello, world.
 go2 5: hello, world.
 go2 6: hello, world.
 go1 4: hello, world.
 go1 5: hello, world.
 go2 7: hello, world.
 go1 6: hello, world.
 go1 7: hello, world.
 go2 8: hello, world.
 go2 9: hello, world.
 go1 8: hello, world.
 go1 9: hello, world.
 end.

コメント

  1. The King Casino Online
    You can play at The King Casino with over 3,000 free spins, https://vannienailor4166blog.blogspot.com/ This casino poormansguidetocasinogambling.com game is the perfect fit for both goyangfc entertaining players and high-quality online https://septcasino.com/review/merit-casino/ casino players. https://septcasino.com/review/merit-casino/

    返信削除

コメントを投稿

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)