0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GoでWebアプリケーションを作る(1)

Posted at

こんにちは。

今日からはGo言語を使って簡単なWebアプリケーションを作成します。

目的

  • あなたがプログラミングを行う際の選択肢として、Goを挙げられる為の第一歩となること
    • より、知らない人に知ってもらうことを重要視しています

全体の流れの確認

  • Goとは
    • 特徴
    • どこで使われているの?
  • Hello, World作成
    • 実行
    • クロスコンパイルの体験
  • 変数とその定義方法
    • 変数の種類
    • 変数定義方法
    • 不具合箇所は、最高の講師に教えてもらおう
    • 不具合の修正
  • 関数
    • 関数の定義
    • 関数を書いてみる
    • 関数の実行される順番
  • パッケージ
    • パッケージを使う
    • パッケージを作る
  • 構造体
    • 構造体の定義
    • 構造体への関数の関連付け
    • 牛丼屋型と、注文する関数を定義する
  • Webアプリケーション
    • httpを起動する方法
    • はじめてのGo言語Webアプリケーション起動
    • Goroutineに触れる
    • zakohttpパッケージについて
  • テスト
    • Go言語でのテストのやり方
    • テストの実行と修正
    • その他のテストの書き方

今回は「Goとは」です。

Goとは

Googleが主導して開発しているプログラミング言語です。
正式名称は、Goですが、ググラビリティが低いので、Golang golang go言語 Go言語 go-lang辺りで表記されていることが多いです。

特徴

シンプルである

設計思想として単純さを是としています。
例えば、言語仕様。使用されるキーワードは25個しかありません。
表現や構造がシンプルであるため、学習コストが低いという側面があります。

標準パッケージが充実している

Go言語の環境を用意するだけで、標準パッケージを扱え、より多くの作業が行えます。

  • testing: テスト記述
  • net/http: HTTPサーバ/クライアントなど
  • encoding: hexやテキスト表現
  • crypto: 暗号関係
  • ...

クロスコンパイルが容易

コンパイル時に、環境変数GOOSGOARCHを設定するだけで、Windowsの実行形式ファイルやLinuxの実行形式ファイル、macOSの実行形式ファイルを出力することができます。
標準パッケージの多くが、クロスコンパイルされることを前提としているため、標準パッケージを活用することで、環境ごとに不具合の起きづらい開発を行うことが可能です。
例えば、ファイルパスの文字列結合は、"path1" + "\" + "path2" といった表現はせず、path/filepathの関数Join を用い、filepath.Join("path1", "path2")というように表現することをお勧めします。

注意しておかなければいけない点としては、一部パッケージには、OS依存のものがあるということです。
例えば、Windowsのレジストリに対する処理のような、OSに依存するものがあります。

周辺ツールが標準で提供される

Go言語をインストールするだけで、パッケージの管理やダウンロード、コンパイル、テスト、字句解析、ドキュメント生成など、多くのことが実行できます。
go <subcommand> 形式で、それらのツールを扱うことが可能です。
参考: コマンド一覧

並行プログラミングが文法レベルでサポートされている

とても簡単に並行プログラミングを作成することができます。
並行プログラミングしない場合は、func(){//<yourCode>}() のような形で関数を呼び出せます。
対して、並行プログラミングする場合は、go func(){//<yourCode>}() のような形で関数を呼び出します。
わずか、3 byteほどの差分で並行プログラミングを表すことが可能です。

なお、Go言語での並行プログラミングさせたスレッドは、Goroutine(ごーるーちん) と呼びます。

Goroutineは、カーネルスレッドではありません。

OSのカーネルスレッドとは異なり、ユーザ空間で動作する軽量なスレッドです。
それぞれのGoroutineの管理(スケジューリングなど)も、1つのユーザ空間スレッドとして動作しています。

どこで使われているの?

本講義でも活用している、Dockerで扱われています。

ハンズオンの開始

以降の章では、事前準備したDockerを用い、ハンズオンを行います。

特別な注釈がない限り、実施するプロンプトは、コンテナ上です。
もしコンテナを実行していないようであれあば、以下のコマンドを実行してください。

:# TERMINAL 0

:# vim,emacs,nano派の人はこちら
$ docker run --name go-tutor -it --rm jo7oem/go-tutor:v2022 /bin/bash

:# VSCode派の人はこちら
$ docker run --name go-tutor-vscode -p 8888:8888 -d --rm jo7oem/go-tutor-vscode:v2022

ハンズオンでは、こちらから指示したpathに、ディレクトリやファイルを作成してもらい、Go言語に触れてもらいます。
基本的なフォルダ構成は、 /go/src/go_tutorial/<セクション名>/<プログラム名>/***.goのようになります。

講師側が説明で用いるソースコード(答え)は、/go/src/samples/<セクション名>/<プログラム名>/***.goの形で格納してあります。
講師側が想定している出力結果を確認したい際は、/go/src/samples/配下を実行することで、容易に確認できます。
また、ハンズオンがうまく行かない際には、以下のように差分を確認することで、課題解決を助ける可能性があります。

:# TERMINAL 0
$ diff /go/src/go_tutorial/<セクション名>/<プログラム名>/***.go /go/src/samples/<セクション名>/<プログラム名>/***.go

今日は以上です。
ありがとうございました。

次のPart 2は「Hello, Worldを作る」です。
よろしくお願いいたします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?