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

2020/07/08

コマンドプロンプト、PowerShell、zshなどでの終了コード(ExitCode)の確認方法まとめ


概要


コードの静的解析やCI/CDでのチェックのためなどで、CLIツールを使うことがあります。

CLIツールを組み合わせてタスクを実行するスクリプト(*.bat、*.ps1、*.shなど)を作る際、処理の成否を終了コード(ExitCode)で判断して条件分岐を行いたい場合がありますが、この終了コードのチェック方法がシェルによって微妙に違っており、毎回調べてしまっておりました。

自分用の備忘録として、情報を整理して記事にします(:3[ふとん]

終了コード確認方法


終了コード確認例
macOSのzshおよびPowerShellにて終了コード確認

コマンドプロンプト

echo %errorlevel%

PowerShell

echo $?
スクリプトの中で直前に実行した処理の成否を確認するなら、後述のbashシェルスクリプトなどと同様に$?を指定する。

echo $LASTEXITCODE
外部スクリプトの呼び出しなどでは使えるけれど、ちょっとややこしいので私はあまり使わないです。詳しくは公式のマニュアルを参照ください。(2020/08/08 改定)

bash、zshなど

echo $?

所見


PowerShellはこれに限らず独自色が強いですね。巷で先人たちが公開してくださっている素晴らしいシェル芸の多くはshやbashを使った内容が多いので、できればWindowsでもWSL2をみんなで導入してシェルスクリプト(*.sh)メインで使えるようになるのが理想だなと思います。

おまけ

golangのコードで外部コマンドを実行した時のExitCodeは、func (*ProcessState) ExitCodeで調べられる。The Go Playgroundで実際に動かせるサンプルはこちら

2020/01/09

Go言語のCLIアプリを作りながらCircleCIでCI/CDを実践してみた

概要

以下を目標に、Go言語で簡単なCLIツールを作りながらCI/CDを実践してみました!
  • CIでtestbuildを実行して、READMEにバッジを貼る
  • テストカバレッジ計測し、READMEにバッジを貼る
  • gitでtagがついたら、バイナリを作ってgithubのリリースページにアップする
以下のリポジトリが成果物です。

A repository to play around with using CircleCI.

github.com/kemokemo/try-circle-ci
実践内容をハンズオンっぽくまとめると共に、ポイントやお世話になった記事をあわせて紹介したいと思いますʕ◔ϖ◔ʔ

2019/06/04

Go言語製のキレイなGUIアプリをFyneライブラリで作るよ!(*´ω`*)

きっかけ

Go言語で社内用のちょっとしたツールを作る時の話です。
ターゲットユーザーがCLIツールでOKな人たちならば、gcliを使ってサクサク作りたい!(●´ω`)ノ
例えばgenerateverifyサブコマンドをもったclitestというツールを作ろうと思ったら、以下を実行するだけでcliとしての大部分が自動生成されます。
gcli new -c generate -c verify clitest
デプロイ先でのファイルハッシュ値とディレクトリ構成をチェックしたい、そんな時に使えるツールをGo言語で作りました!

しかし、世の中そうもいきません。GUIが必要とされる場合も多々あります。そんな折、たまたまGolang WeeklyさんのつぶやきFyneの存在を知りました。

Fyne is awesome

2019/05/27 現在の公式GitHub
100 %ピュアGoな実装でマテリアルデザイン!!₍₍ (ง ˙ω˙)ว ⁾⁾

これだけで踊ってしまうレベル!

使い始めるにあたり、以下の公式のページをざっと読んでおくと良い感じです。

2019/01/28

Google Cloud FunctionsにGo言語サポートきましたよ!ʕ◔ϖ◔ʔ (Background Functions編 その1)

TL;DR


遂にGCPCloud FunctionsGo言語サポートが来ましたので、前回HTTP Functionsを使ってみました。今回はCloud Storageと連携させてBackground Functionsを使ってみたいと思いますʕ◔ϖ◔ʔ

2019/01/24

Google Cloud FunctionsにGo言語サポートきましたよ!ʕ◔ϖ◔ʔ (HTTP Functions編)

ついに来た!


Today, we're excited to announce support for Go on Cloud Functions.
Get Go-ing with Cloud Functions: Go 1.11 is now a supported language

GCPのCloud Functionsに、Go言語のサポートが来ました!素晴らしい!!
という訳で、早速使ってみましょうʕ◔ϖ◔ʔ

2018/12/31

BookshelfサンプルでもっとGKEを使ってみますʕ◔ϖ◔ʔ

GCPの公式チュートリアルネ申すぎぃ


前回の記事を書いた後に「Google Cloud Platform での Go」を見つけました。Go言語でGCPを使いたい私のようなGopherにとって欲しい情報がぎゅっと詰まった感のある素敵ページです。

今回はこのGo言語クイックスタートの中でGKE用に用意されている「Kubernetes Engine での Go Bookshelf の実行」を実践していきたいと思いますʕ◔ϖ◔ʔ

2018/12/25

App EngineのGo 1.11 Runtimeが素敵なのでGCP始めましたʕ◔ϖ◔ʔ

発端


ずいぶん前なのですが、Go言語の公式ブログで「Announcing App Engine’s New Go 1.11 Runtime」という記事がありました。内容は「おまじないコード無しの普通のWebサービスのコードを、そのままApp Engineにデプロイできるようになったよ」というもので、GCPにとても魅力を感じました。

やってみる


素敵だなと感じたら実践せずにはいられないフレンズなので、やってみますʕ◔ϖ◔ʔ
記事によると以下の3ステップでデプロイできるとのこと。


  • Create an account with https://cloud.google.com.
  • Create a project.
  • Install the Cloud SDK on your system.

https://blog.golang.org/appengine-go111

2018/10/25

MongoDBを使ったGo言語のAPIサービスでDocker Compose対応してみたʕ◔ϖ◔ʔ

TL;DR



2018/09/25

Golang 1.11のWebassemblyチュートリアルやってみた!ʕ◔ϖ◔ʔ

TL;DR


  • Go 1.11でModules、WebAssemblyへの試験的な対応など、いくつかの大きな変更と既存パッケージの改良などがあった
  •  WebAssembly(以下Wasm)のGo公式wikiが親切でわかりやすい!筋トレしたくなってきた!ʕ◔ϖ◔ʔ

2018/09/09

gocodeのautocompleteできない問題を解消したよ!ʕ◔ϖ◔ʔ

概要

先日購入したMacbook Proで快適にgolangを書いていたのですが、importしているライブラリに対してautocompleがいつの間にか効かなくなってしまって少し困っておりました。

今日は、これを解決できたのでメモいたします ʕ◔ϖ◔ʔ ヘケ

2018/04/30

ebitenのexamplesを動かしてgopherjsやgomobileを使ってみたよ

はじめに


公式のサンプル集から ebiten のBest practiceを学ぼうと思っていろいろ触ってみることにした。
まずは examplesのREADME を読むべし。

動かしてみる


gopherjs


gopherjs使ったことないので、とりあえずインストール。そして実行。

gopherjs serve --tags=example

ぐぬぬ、なんかエラーが。。(´・ω・`)

$ gopherjs.exe serve --tags=example
serving at http://localhost:8080 and on port 8080 of any available addresses
/src/syscall/syscall_nonlinux.go:5:18: undeclared name: SYS_EXIT
/src/syscall/syscall.go:53:39: too few arguments in call to Syscall
/src/syscall/syscall_nonlinux.go:5:18: undeclared name: SYS_EXIT
/src/syscall/syscall.go:53:39: too few arguments in call to Syscall
/src/syscall/syscall_nonlinux.go:5:18: undeclared name: SYS_EXIT
/src/syscall/syscall.go:53:39: too few arguments in call to Syscall

2018/04/24

golangで何か書き始める時によく使うスニペット

golangで何かザクッと作り始める時に、よく以下のスニペットを使っています。



os.Exit()は、deferを実行しないで処理を終了してしまいます。あっちこっちで使うと思わぬ事故の元。
これをmain関数内だけで使って諸々の処理はその引数であるrun関数内で行うことで、
deferが実行されない事故を防げます。

・・・というのは、書籍「みんなのGo言語」の4.5章の受け売りなんです。
他にも素晴らしい記事がたくさん載ってるので必読!٩( 'ω' )و



2017/01/14

[Go言語] msiインストーラー の情報を記載したxmlを更新する

お仕事で「msiインストーラーの情報をまとめたxmlを、インストーラー更新に伴って更新したい」
という場面があったので、先日のVBScriptと組み合わせてコマンドラインツールを作りましたヽ(=´▽`=)ノ