ラベル golang の投稿を表示しています。 すべての投稿を表示
ラベル golang の投稿を表示しています。 すべての投稿を表示

2019/01/10

[golang]任意の値、要素数で配列を初期化する方法

Go言語の練習がてら「プログラマ脳を鍛える 数学パズル」をやっていた。

そこでひとつの疑問が生まれた。
一発で任意の値、要素数で配列を初期化できないのか?

そんなことをツイートしたらリプライをいただいたので実際に試してみた。


任意の要素数の配列を生成する


make関数を使って配列(正確にはslice)を生成する。
// すべてfalseの配列ができる
list := make([]bool, 1000)

// すべて0の配列ができる
list := make([]int, 1000)

make(型, 要素数, 容量)で任意の型と要素数でsliceを生成する。しかし型がboolならすべてfalse、intならすべで0のスライスができる。

2018/09/18

gvm使用時にvscode-goで「Cannot find "go" binary. Update PATH or GOROOT appropriately」が出たときの解決方法

新しいMBP2018(High Sierra)にしてからGo言語(以下、golangと呼ぶ)の開発環境構築をしていた。そのとき、VSCodeのMicrosoft謹製のgolang用拡張機能(vscode-go)を使って、golangを書こうとしたときにかなりハマった。

ハマった点はいくつかあるのだが、今回は「Cannot find "go" binary. Update PATH or GOROOT appropriately」というエラーがでたときのことに絞って書こうと思う。

私の開発環境は以下のとおり。
  • macOS High Sierra
  • gvm@1.0.22
  • go@1.11
    • gvmでインストールする
  • VSCode@1.27.x
  • vscode-go@0.6.89

2018/08/21

[golang]TCPサーバ/クライアントをつくって学ぶTCP/IPの基礎

フロントエンドエンジニアとして働く分にはHTML/CSS/JSの知識だけで良いのかもしれないが、仕事上でTCPについての知識が必要になった。しかし、TCPについては基本情報技術者レベルの知識しかなく、いまだにOSI参照モデルが実際のアプリケーションとどう関連付けられるかわかっていない。

そこで、低レイヤーの学習も兼ねて、Go言語(golang)でTCPサーバーとクライアントをStep by Stepで実装し、TCP/IPについてより深く学ぼうと思う。



知識編: TCP/IPとは


インターネットやネットワークについて学んでいると必ず出てくるのが「TCP/IP」だ。OSI参照モデルの第3層(ネットワーク層)のIP(Internet Protocol)と第4層(トランスポート層)のTCP(Transmission Control Protocol)の2つのプロトコルから構成されており、インターネットで標準的に利用されている通信プロトコルだ。

OSI参照モデルとTCP/IPプロトコル群


基本情報技術者の試験ではOSI参照モデルの概念についてしか触れないが、TPC/IPプロトコル群(別名: インターネット・プロトコル・スイート)も存在する。TCP/IPプロトコル群のほうが効率的で、かつ現実的な仕様となっているので一般的に使われており、OSI参照モデルは「概念」として残っている。

OSI参照モデルとTCP/IPプロトコル群の対比表
OSI参照モデルTCP/IPプロトコル群プロトコル
アプリケーション層アプリケーション層HTTP, SMTP, POP3, Telnet, …
プレゼンテーション層
セッション層
トランスポート層トランスポート層TCP, UDP
ネットワーク層インターネット層IP, ICMP, ARP, RARO
データリンク層ネットワークインターフェース層Ethernet, PPP
物理層

2018/05/28

[golang]goaを使ってAPIの設計・開発し、OpenAPIドキュメントを自動生成する

golangでAPIサーバーを開発したい!でも、何からやっていいかわからない。そんなときにはgoaがオススメだ。



goaの特徴


goaの最大の特徴はAPIデザインを書くとモック、クライアントツール、ドキュメントなどを自動生成できるところだ。

開発は以下のような手順になる。

  1. DSLでAPIデザインを書く
  2. goagen(コードジェネレーター)で自動生成する
    • クライアントのスケルトン
    • テストコード
    • CLIツール
    • OpenAPI仕様のドキュメント
  3. APIを実装する
  4. ビルドして実行する

このように人の手が入るのは「1.DLSでAPIデザインを書く」と「3.APIを実装する」だけだ。それ以外はgoagenというコードジェネレーターが自動的にやってくれる。

golang初心者の私でも、はじめて触ってから3時間くらいで動くAPIサーバーをつくることができた。


以下にgoaを使ってAPIサーバーを開発する手順をまとめていく。

2017/10/23

golangでSlack Real Time Messaging APIを使ってメッセージに応答するまで

以前、Node.js+botkitでSlack用botを作成した。
もう一度Slack botを作ってみたい欲が湧いてきたのだが、いつもどおりNode.jsで書いてしまうと他の言語が全然勉強できないので、今回はgolangを使って書いてみた。

この記事では、Slack Appの登録・設定・作成し、ユーザからのメッセージに対して応答するシンプルなbotを作成する。

Slack APIのページが完全に迷いの森で、慣れるまでどこで何が設定できるのかわかならい。そのため、スクリーンショット多めで説明する。

2017/09/04

GolangでDocker Remote APIを使ってDockerfileからイメージ作成する方法

photo by Daniel Ramirez

golangからDocker Remote APIを使ってイメージ・コンテナを操作する方法を覚えたので、次はDockerfileからイメージを作成し、実行する方法を学んだ。

Docker Remote APIの基本的な使い方は以下の記事を参照ください。


かなりハマったので、皆さんの助けになればと思う。

環境は以下のとおり。

  • Mac OSX
  • go 1.8.3
  • Docker for Mac 17.6.1-ce

2017/09/01

golangからDocker Remote APIを使ってイメージ・コンテナを操作する方法まとめ

photo by Daniel Ramirez

プログラムからDockerのイメージやコンテナの操作をして、必要に応じてコンテナを起動したり停止したりというサービスをつくろうとしていた。
いろいろ調べたので、Go言語(以下、Golangと呼ぶ)からDockerのイメージやコンテナの操作をする方法をまとめる。

Dockerはコンテナ仮想化ツールで、Golangで開発されている。
そのため、Docker Engineのクライアント(moby/client)をそのままGolangで使える。
※ Dockerの詳しい説明は省略する

今回はMobyを使ってイメージの作成・削除、コンテナの起動・停止を行う。


環境は以下のとおり。
  • Mac OSX
  • go 1.8.3
  • Docker for Mac 17.6.1-ce

2017/08/25

golangでSQLite3を使ってデータベースを操作する方法まとめ

golangでツールをつくるためにデータベースがほしかった。
MySQLやPostgreSQL、SQL Server、Oracleなど多種多様なDBMSがあるのだが、環境構築に消耗したくないということでSQLite3を選択。

小規模、もしくは大規模なサービスをつくるならORMを使うより直接SQLite3を操作したほうが問題が少なくすみそう。
ということで、当記事ではgolangからライブラリなどを使わずSQLite3を操作する方法をまとめる。
※ ただしSQLite3のドライバは使う


環境は以下のとおり

  • Mac OSX
  • go v1.8.3
  • sqlite3 v3.8.5

2017/08/08

Go開発環境構築(VSCode, gvm, delve, dep)からHello Worldするまで

仕事でGo言語を使う予定ができたので、本腰を入れて学んでみようと思う。当記事では、私が盛大に躓いたgolangの開発環境構築、戸惑った「しきたり」とHello worldするまでをまとめる。

開発環境・バージョン

  • Mac OSX
  • VSCode 1.14.2
    • 拡張機能: go 0.6.63
  • golang 1.8.3
    • gvmでインストールする
  • gvm 1.0.22
    • golangのバージョン管理ツール
    • Pythonでいうpyenv, Node.jsでいうnvm
  • delve 1.0.0-rc.1
    • デバッグツール
    • VSCodeからgolangを実行するために使う
  • dep 0.2.0
    • パッケージ管理・依存関係管理ツール
    • JavaScriptでいうnpm