覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Go言語

Go Conference 2018 Autumn に行ってきたよ #gocon

Go Conference 2018 Autumn に参加してきましたので、自分用のメモ。 といっても、今回は実務でゴリゴリにGolang使ってる人やGolangにかなり深い知見のある人の発表で、 正直自分の知らない単語拾いに行った感じでした。 概要 開催場所 Google Tokyo office …

Go言語 - システム情報を取得する

Golangで、システム情報というかOSのuptime(稼働時間)が取得したかったんですが、 Go sigarを利用すると楽そうだったのでお世話になります。 とりあえず、ライブラリのダウンロードを行います go get github.com/cloudfoundry/gosigar uptimeとか取得して…

Go言語 - 置換文字列を一部置換しなかったらどうなるの?

fmt.Sprintf などでフォーマット文字列を置換する場合に、置換対象のパラメータが複数あることもあります。 その際に、置換すべき値の数が合わないとどうなってしまうのかな?と思って一応試してみました。 http://127.0.0.1:%d/%s というフォーマット用の文…

Go言語 - 開発支援ツール

Go言語での開発を行う際にお世話になる開発支援ツールがいくつか存在しています。 そこまで猛烈に意識しなくてもいい気もしますが、自分用のメモとしてコマンドラインでの入手方法等を記載しておきます gofmt gofmt は、Go標準で付属しているコードフォーマ…

Go言語 - Windows上でのプロセス存在チェック

Windows上のプロセスの存在チェックをしたい場合のサンプルコードです。 前回記事のgo-psを利用すれば十分にチェック可能だと思いますが、今回のサンプルでは tasklist.exe に思いっきり頼っています。 package main import ( "bytes" "fmt" "os" "os/exec" …

Go言語 - プロセスの情報出したり、プロセスの一覧出したり

安直なのかもしれないですが、go-psライブラリのお世話になると簡単です 以下で取得しましょう go get github.com/mitchellh/go-ps 実行したプロセスの情報取得 実行したプログラムそのもののプロセス情報を取得する例です package main import ( "fmt" "os"…

Visual Studio Code(vscode-go)のコード補完が効かなくなる

Golangのバージョンを1.9にアップデートしたら、Visual Studio Codeでのコード補完が全く効かなくなりました。 vscode-goプラグインで問題が起こっちゃってるようです。 オートコンプリートの候補としてPANICしか出てこない謎現象が発生します。 以下の手順…

Go言語 - HTMLテンプレートの使い方

GolangでのHTMLテンプレート記述方法や値の展開方法等について学ぶために、html/templateを試してみました。 変数をそのまま展開 コード内の変数をhtmlのテンプレートに展開する例です ■htmlテンプレート(template000.html.tpl) <html> <body> msg: {{.}} </body> </html> ■サンプル…

Go言語 - XMLを読んで特定の要素を削って出力

Golangではencoding/xmlパッケージでXMLを簡単に扱えそうなので、Hello World的に試してみました。 今回のエントリでは、XMLファイルを読んで特定のエレメントを削ったXMLを再出力するということをやってみました。 (といっても、Unmarshal(XML⇒構造体への…

Go言語LT大会! 「最近、Go言語始めました」の会に行ってきた #golangjp

Go言語LT大会! 「最近、Go言語始めました」の会に参加してきました。 以下自分用のメモです。 概要 Go言語入門者のLT大会&懇親会 開催日: 2017/6/5 場所: レバレジーズ株式会社 おススメ・標準・準標準パッケージ20選 オススメの標準・準標準パッケーシ…

golang.tokyo #6 に行ってきたよ #golangtokyo

golang.tokyo #6 に参加してきました。 以下自分用のメモです。 概要 開催日: 2017/6/1 場所: 株式会社ディー・エヌ・エー Gopher Fest 2017 参加レポート 上田拓也 氏 (メルカリ/ソウゾウ) Gopher Fest 2017参加レポート from Takuya Ueda Gopher Fest…

Go言語 - 日時のフォーマット処理

本エントリでは、Go言語で日時を特定の書式にフォーマットする処理を実行してみます。 基本的にはtimeパッケージのTime.Format関数を利用することになります。 例えばJavaなら、LocalDateTime#format やら SimpleDateFormat#format 等を利用してフォーマット…

Go言語 - melodyを利用してWebSocketサーバを立てる

melodyとGinを使ってWebSocketサーバを立てて、簡易的なチャット画面を作ってみました。 実際には、melody Exampleを、ほぼそのまま流用しているだけです。 準備 以下を実行してmelodyを利用可能な状態にしておきます go get gopkg.in/olahol/melody.v1 プロ…

Go言語 - Goの特徴

Go言語(Golang)の特徴(メリット)として以下のようなものが一般的に挙げられています 高パフォーマンス 一般的に軽量言語(LL)ではメモリ管理のコストなどに注意してコードを構成しなければパフォーマンスが極端に悪くなることがあります。 それに対して、…

Go言語 - Ginを使ってHello World

Go言語ではnet/httpを利用することでHTTPサーバを立てることができまが、GinといったWebアプリ用のフレームワークも存在しています。 事前準備 以下を実行してGinのパッケージ取得を行います go get github.com/gin-gonic/gin とりあえずHello World 以下 He…

Go言語 - HTTPサーバでHello World

Go言語ではnet/httpを利用することでHTTPサーバを立てることができます。 とりあえず今回はお試しな感じでHTTPサーバを立ててみます とりあえずHello World 以下 Hello World の文字列を返す例です。 http.HandleFuncにより、ハンドリング対象のパスとハンド…

Go言語 - WindowsのアクティブなセッションのIDを取得する

Windowsではセッションという概念が存在しています。(セッション 0 の分離 - Windows 7 対応アプリケーションの互換性) 複数セッションの中で現在アクティブになっている(物理コンソールにアタッチしている)セッションのセッションIDをGo言語で取得する…

Go言語 - enumを定義する

Go言語には、C言語やJavaにおける「enum(列挙型)」のような機能がありません。 Go言語をやり始めて最初にこれを知った時、 え嘘でしょ? と言いたくなりました。 が、実際には 定数定義とiotaを利用することでC言語における列挙型に近い振る舞いを実現する…

Go言語 - 空インターフェースと型アサーション

Go言語には、全ての型と互換性を持っているinterface{}型(空インターフェース)というものが存在しています。 たとえば以下のように、interface{}で宣言した変数にはどんな型の値でも代入可能です var obj interface{} obj = 123 // int obj = "str" // str…

Go言語 - interfaceを触ってみる

Go言語にはメソッドの型だけを定義したinterfaceというものが存在しています。 interfaceは型の一種であり、任意の型が"どのようなメソッドを実装するべきか"を規定するためのものです。 大雑把にいえばJavaでいうところのinterfaceに似たものです。 interfa…

Go言語 - forループによる繰り返し処理

Go言語で繰り返し処理(ループ)を記述するために用意されている構文はforのみとなっています。 whileやdo whileといったものは提供されていません。 無限ループ 他の言語であれば、無限ループを記述する場合は、 while(true) { xxx } といったようにwhileを…

Go言語 - メソッド

Go言語には、任意の型に関数を紐づけるためのメソッドという機能が存在しています。 メソッドの定義方法 メソッドの定義は以下のように記述します。レシーバーに関する記述をする部分が、関数と異なる箇所になります func (<レシーバー>) <関数名>([引数]) […

Go言語 - 無名関数

前回のエントリでGo言語の関数の基本的な部分について書きました。 本エントリでは、前回のエントリでは扱わなかった無名関数について書きます。 Go言語では関数を値として扱うことができて、変数へ格納することもできます。 まずその辺りの動作を以下確認し…

Go言語 - 関数

オブジェクト指向ではないGo言語において、関数を定義することがプログラミングにおいてかなり重要なものとなるようです。 ここでは、Go言語の関数について基本的な部分を確認します。 Go言語の関数はJavaのメソッドやC言語の関数と比べても独特な部分がいく…

Go言語 - %Tや%vの書式で出力される文字列

Go言語のfmtパッケージに存在するPrintf関数は書式を指定して標準出力に書き込みを行います。 C言語のprintfに良く似ています。が、C言語には存在しない書式がいくつか加わっています。 その中の代表格として以下のような書式が存在しています。 %T 対象デー…

Go言語 - flagパッケージでコマンドラインパラメータを処理する

前日のエントリではos.Argsを用いてコマンドラインのパラメータを取り扱いました。 これ以外にも、Go言語ではflagパッケージというものが用意されています。 コマンドラインで与えられたパラメータのパース処理を簡単に実施できるようになっています。 本エ…

Go言語 - os.Argsでコマンドラインパラメータを受け取る

コマンドラインで与えられたパラメータはosパッケージのArgsで受け取ることができます。 C言語のmain関数やJavaのmainメソッドでは引数でコマンドラインパラメータを受け取りますが、Golangでは引数ではなくos.Argsを通じて取得することになります os.Argsは…

Go言語 - Tickerを使った定期処理

gorutineとtimeパッケージのTickerを使ってバックグラウンドで定期処理を実行することができます。 本サンプルでは、1秒間隔のTickerを生成して、現在時刻を表示します。 5秒後にTicker停止用のメッセージがチャネルに送られて、Tickerをstopしています ■サ…

Go言語 - 外部コマンドを実行する

Go言語で外部コマンドを実行するには、execパッケージを利用します。(実際のimportはimport "os/exec"となります) 実行したいコマンドをexec.Command(<コマンド>)で生成して、生成したコマンドをCmd.RunやCmd.Outputで実行する流れになります Run - コマン…

Go言語 - 整数型

Go言語では整数を扱うための型が複数提供されています。 以下は、各整数型の違いなどについてのメモとなります。 実装系に依存しない整数型 以下の整数型は実装系によらずサイズが決まっています 型 サイズ(bit) 符号 最小値 最大値 int8 8 あり -128 127 in…