2020 年 1 月 2 日 Go言語手始め

最近、プログラミング言語「Go言語」に 「Webアプリケーション開発に最適な
言語」と関心が高まっている。

「Go言語」はGoogleが開発したオープンソースのプログラミング言語で、単
に 「Go(ゴー)」とも「golang」とも呼ばれる。日本では「Go言語」が分かりや
すい。                               

「Go言語」は、2009年、Googleで Robert Griesemer、ロブ・パイク、ケン・
トンプソンによって設計されたコンパイル言語で、実行スピードの早いプロ
グラムを作成することができ、全世界で導入が広がっている。      

また、Go言語を扱う技術者の年収は、他の言語を扱う技術者の年収より高い
とか、Go言語をマスターしたいと考えている技術者が多くなっているとかと
云われている。

そこで、Netから情報・サンプルプログラムを得て、Go言語を試してみた。

(1)「Go言語」をインストール。簡単なプログラム("hello, world")の実行。
(2)「Go言語」のプログラムで、MySQLのデータを検索・表示    
(3) 簡単なWebプログラム                    

参考書は、初心者には敷居が高かったが、"Goプログラミング実践入門~
インプレス刊、 Sau Sheong Chang著、武舎広幸、阿部和也、上西昌弘訳 

開発環境:Raspberry Pi Model 1B (Raspbian release 9.6 (stretch))
" Raspberry PiにGo言語をインストールする "
net の記事 "Raspberry PiにGo言語をインストールする"
を参照して、Go言語をインストールし、サンプルプログラムを実行した。

Go言語のインストールは、Raspberry Pi のCPUアーキテクチャに合わせて
armを選択
$ wget https://golang.org/dl/go1.10.1.linux-armv6l.tar.gz
Go言語のパスを通すため、.bashrcファイルの末尾にパスの追加を行う。
export PATH=$PATH:/usr/local/go/bin 
パスの有効化
$ source .bashrc
"hello, world" と表示する簡単な Goプログラムを実行する。     
gosmp01.go package main func main() { fmt.Printf("hello, world ") }
注意する点は、Printf命令が Go標準ライブラリの "fmt"の中にあるので、 import すること。 直接実行する場合は
$ go run gosmp01
ビルドして実行する場合は
$ go build gosmp01 $ ./gosmp01
"MySQLデータベースに接続する"
参考にした記事は、Goでの Mysql接続から構造体へのデータ割り当てまで"

gosmp02.go package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) type User struct { userID int mailaddr string kbnA string IPaddr string count int count2 int } func main() { //mysqlへ接続。ドライバ名、ユーザー名・データソースを指定 db, err := sql.Open("mysql", "xxxx:yyyy@/zzzz") if err != nil { panic(err.Error()) } defer db.Close() //データベースへクエリを送信。取得したデータはrowsに入る。 rows, err := db.Query("SELECT userID,mailaddr from user") defer rows.Close() if err != nil { panic(err.Error()) } //レコード一件一件を用意していた構造体に当てはめる。 for rows.Next() { var user User //構造体User型の変数userを定義 err := rows.Scan(&user.userID, &user.mailaddr) if err != nil { panic(err.Error()) } fmt.Println(user.userID, user.mailaddr) } }
import する Go標準ライブラリは、 "database/sql"、"fmt" と sql-driver。 直接実行する場合は
$ go run gosmp02
ビルドして実行する場合は
$ go build gosmp02 $ ./gosmp02
"Webアプリを作る"
参考にした記事は、"Go言語入門~Webアプリを作ろう"

gosmp03.go package main import ( "net/http" ) func main() { http.HandleFunc("/ping", handler) http.ListenAndServe(":8080", nil) } func handler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("pong")) }
この簡単なプログラムが、ずばり Go標準ライブラリの "net/http"で作る http サーバー。 http.HandleFunc("/ping", handler)は、リクエストのURL文字列に中に"/ping"が入っている時に ハンドラー"handler"を呼び出すことになる。 この http サーバーが複数のリクエストを受ける時には、 リクエストの数だけこのHandleFunc文を書く必要となる。 http.ListenAndServe(":8080", nil)は、ポート8080で待つ。 私の開発サーバーは、Apache HTTPサーバーが動いていたため、ポート番号を8888にした。 w.Write([]byte("pong"))は、レスポンスとして文字列"pong"を返す。画面にこの文字列が表示される。
"感想"
Go言語への敷居はだいぶひくくなった。今後、機会があったら、本格的に Go言語に挑戦してみたい。

それにしても、手軽に使えるPHP言語の良さを再認識した。
PHPは、Web上のHTML文書をそのまま表示するという静的なものから、動的に文書に手を加えて表示する。
さらにクライアントからHTML文書でデータを集めたり。ファイルのアップロード機能を加えてきた。
Webの情報検索から、普遍的なWebアプリへとなってきた。
普通のアプリ、秒当り 100万件のトランザクション処理といった過酷な条件が無いようなアプリでは、
PHPはまだまだ十分利用できると思える。


************************************************************************************