【Go】Go言語のファイルサーバと並行処理例

  • 2019年10月21日
  • Go

Goは、シンプルで信頼性の高い効率的なソフトウェアを簡単に構築できるオープンソースのプログラミング言語です。
The Go Programming LanguageをGoogle翻訳して引用

 Goは上記の様にお手軽に高速なコードを書けます。例えば、サーバプログラムです。複数のサーバを並行処理するコードも次のように30行ほどで済みます。


package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	serverChan := make(chan bool) // goroutine間の通信チャンネル. ここでは単に処理の段階を停止させるために使用

	go func() { // go routineを宣言。"go 関数"で宣言された関数は他の"go 関数"で宣言された関数と非同期で動作する
		fmt.Println("http://localhost:12345") // 画面にこのアドレスでサーバが動いていると通知
		log.Fatal(                            // この中で起きたことについてログを吐き出して自身のプロセスをキルする
			http.ListenAndServe( // サーバとその受け口を定義
				"localhost:12345", // Listenする受け口
				http.FileServer(http.Dir("/home/www/data/ubx")), // サーバオブジェクト。ここでは組み込み関数で用意されているファイルサーバ
			),
		)
	}()

	go func() {
		fmt.Println("http://localhost:60789")
		log.Fatal(http.ListenAndServe("localhost:60789", http.FileServer(http.Dir("/home/www/data/pos"))))
	}()

	<-serverChan // ここでserverChanにtrueが渡されると処理が先に進む。このコードでは渡す機会がないので常にここで停止
}

 例ではファイルサーバでしたが、エコーやらCGIやら色々と用意されておりで至れり尽くせりです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG