浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Go】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やら色々と用意されておりで至れり尽くせりです。

  • この記事いいね! (0)