talked on https://golangtokyo.connpass.com/event/129067/
![CLI ツール開発を支える技術 2019春 / Techniques that support building CLI tools, 2019 Spring](https://cdn-ak-scissors.b.st-hatena.com/image/square/db5319af7cb867e220f14667d0d41116f9e3d363/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7c56ae5703e445bfb62ff4363aa092fa%2Fslide_0.jpg%3F12615272)
talked on https://golangtokyo.connpass.com/event/129067/
tl;dr GoでCLIのツールを作るとき、皆さんフラグをどう実装しますか? 標準のflagパッケージでシンプルにしますか? それともCLIコマンドライブラリで複雑でリッチなモダンコマンドにしますか? 今回はいくつもあるCLIコマンドライブラリから、フラグを制御するライブラリに着目しようと思います。 まず手始めに標準のflagパッケージを見た上で、各ライブラリは何を解決したいのか。どのような方法で解決しようとしているのか。 この機会にちょっと眺めて遊んでみようと思います。 Go標準flagパッケージ Go製のCLIツールを見ていくと、どうもサードパーティライブラリを使っている方が多く印象を受けます。 このコマンド、中身どうなっているかな。 と見に行くと、ほとんどのツールは標準flagパッケージではなく、サードパーティライブラリをつかっています。 Go公式ツールや、古くに作られたツールなどは
この記事は「BASE Advent Calendar 2018」24日目の記事です。 devblog.thebase.in はじめに BASEでエンジニアとしてインターンをしている池田です。今日はクリスマスイブということで、以前から気になっていたグリューワイン(ドイツのクリスマスに欠かせないホットワイン)をクリスマスマーケットに飲みに来ています。 普段はBASE BANKというBASEの100%子会社にて金融事業の立ち上げを行っています。BASE BANKのプロダクトのAPIはGoを使って書かれているのですが、BASEでのGoの使用はこのプロジェクトが初だったので、開発基盤整備の一貫で様々なlinterの導入を行いました。その際にlinterの内部がどうなっているかに興味を持ち、すごく簡単なlinterの仕組みを実際に作ってみたので、今回はその知見をお話しします。 Goと静的解析 Goには
GitなどのVCSからcloneしたローカルリポジトリをどう管理するのがいい感じなのか、よくわからない。なんとなく自己流でやっているが、もっといい方法を知りたい。 tl;dr - ディレクトリレイアウトをgolangの作法に合わせ、すべてのリモートリポジトリをghqを使ってcloneし、percolを使って簡単に検索できるようにしましょう。 追記: いまならpercolの代わりにpecoというツールを使うのもよいでしょう。というか、僕はそうしています。設定方法はこのエントリとほぼ同様の内容でいけると思います。 背景 そんな課題を抱えつつも、特になにかをするわけでもなく日々暮らしていた折、Rebuild: 42: When in Golang, Do as the Gophers Do (lestrrat)で@lestrratさんが、Goのお作法に、他の言語のリポジトリも含め、すべてあわせる
TL;DR fork元(オリジナル)をgo getしてその中で作業,forkした自分のレポジトリにpushしてPull Requestを送る. 問題 Github上のGo言語のプロジェクトにコミットするとき,cloneの仕方で若干ハマることがある.普通のOSSプロジェクトの場合は,forkしてそれをcloneしてpush,Pull Requestとすればよい.Go言語のプロジェクトでは,同じレポジトリの中でパッケージを分け,それをimportして使ってるものがある.そういう場合にforkしたものをそのままcloneすると,importの参照先がfork元の名前になりハマる. 例えば,github.com/someone/toolがあるとする.このレポジトリはgithub.com/someone/tool/utilsという別パッケージを持っており,mainがそれを使っているとする.つまり以下
OSS紹介 Advent Calendar 2017 - Qiita 18日目の記事です。(一週間遅れ) Amazon ECS へのデプロイツール ecspresso と、そこで使っている環境変数を展開しつつ複数の YAML/JSON/TOML を読み込む config loader である go-config の紹介をします。 ecspresso github.com 「エスプレッソ」と読みます。Go で書かれた Amazon ECS 用のデプロイツールです。以下の3つのファイルを用いて ECS へのサービス、タスク定義作成、入れ換えを行います。 YAML の設定ファイル タスク定義のための JSON (aws ecs describe-task-definition 出力と互換) サービス定義のための JSON (オプション。aws ecs describe-services 出力の
クラウドサービスのリソース管理をコード化できるTerraform、とても便利に使っているけれど、リソースの種類によって当然ながら書くべき内容が異なりなかなかスムーズに書くことができない。 Provider: AWS - Terraform by HashiCorp 例えば自分がよく使うAWSだけでも、このリンク先に書かれているだけのリソースの種類、書き方がある。そして機能やサービスが増えるごとに、リソースの書き方もどんどん多様化していく。今はこれをいちいちウェブ上で書き方を確認しながらTerraformを書いているんだけど、ちょっと手間が多いなという気がしてきた。 同様にInfrastructure as CodeのツールであるAnsibleには、ansible-docというコマンドがあって、ドキュメントをコマンドライン上で見ることができるようになっている。 $ ansible-doc f
よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事はGoアドベントカレンダー2017 その3の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね? さっさとgoimportsかgoreturnsを保存時に自動実行するエディタ環境を使いましょう。 gofmtも一緒に実行されていいことずくめですよ! インターフェースがnil判定出来ないパターンがあるのダメじゃん? 最初は私もそう思いました。しかし、typed-nilがnilリテラルと比較できなくなったのは 「nil判定サボったままinterface型に変換した」からでサボらなければ全く問題にならないのです。 map,sliceが不便? map,sliceはメソッドが一切ありません。 極論をいうとGoのプリミティブ型みたいなものなのです。 ユーザーが欲しいものはmapやsliceを駆使して各自
go-shebang-story.md Story: Writing Scripts with Go This is a story about how I tried to use Go for scripting. In this story, I’ll discuss the need for a Go script, how we would expect it to behave and the possible implementations; During the discussion I’ll deep dive to scripts, shells, and shebangs. Finally, we’ll discuss solutions that will make Go scripts work. Why Go is good for scripting? Whi
注意 現在X(旧Twitter)でのソーシャルログインができない事象を確認しています。事前にX(旧Twitter)側で再ログインした上でconnpassのソーシャルログインを行うか、 「ユーザー名(またはメールアドレス)」と「パスワード」の組み合わせでのログインをお試しください。合わせてFAQもご確認ください。 お知らせ 2024年9月1日よりconnpassサービスサイトへのスクレイピングを禁止とし、利用規約に禁止事項として明記します。 9月1日以降のconnpassの情報取得につきましては イベントサーチAPI の利用をご検討ください。 お知らせ connpassではさらなる価値のあるデータを提供するため、イベントサーチAPIの提供方法の見直しを決定しました。2024年5月23日(木)より 「企業・法人」「コミュニティ及び個人」向けの2プランを提供開始いたします。ご利用にあたっては利用
先週末、仕事で東京に行く機会があって、往復の新幹線の中でまとまった時間が取れるなと思ってGo言語に入門していました。Go言語に入門する理由は 仕事で普通に使う(mackerel-agentなど) 職場で評判がいい 一年に一個は新しい言語を勉強しようっていうアレ などなどです。本やtour of goを読むだけだとあまり頭に入ってこないので、複雑過ぎず簡単過ぎない例をやろうということで平均化パーセプトロンで二値分類を書きました(ファイルの読み込み、文字列操作、スライス、Mapの基本的な操作、structの使い方などがちょっと身に付く)。Perlに再入門、Scalaを勉強するときもこのネタだったので、定番になってきつつある。コードはこの辺に置いてます。 https://github.com/syou6162/go-perceptron/blob/master/main.go ちょっと困った箇所
はじめに こんにちは、Go界の骨盤職人です。buildersconにmattnさんがいらしていたということで生mattnさんに謁見したかったのですが、諸事情でこの日程はどうしても都合がつかず、参加できなかったことが非常に残念でいまでも悔やんでいます。 さて、Goは安定して開発が進んでおり、いまは安定バージョンが1.8にもなろうというところです。セルフホスティングも1.5で達成し、GCの高速化も順調に進んでいる中、いまだにGoの問題として挙げられるものとして「パッケージバージョンの管理」があります。今日はその辺の話をしようと思います。 TL;DR go パッケージを使って、自分たちが書いたコードが依存してるパッケージを明らかにし、依存先パッケージの更新に追従していこう。 前置き 以下の話はGoをプロダクションで中規模〜大規模に利用している環境を想定しており、細かな閉じられたパッケージのみを開
Google App Engine(GAE)で Go 製のウェブアプリを動かしたかった話。いっぺん動かしてみると GAE/Go はウェブアプリを動かす環境としてはとてもいい。ただ、中途半端な知識だけで始めると開発者としてはつまずくことが多かったので、分かりにくい点をまとめておく。 Google App Engine Go Standard Environment について goapp は $GOPATH 以下もアプリケーションのソースとしてアップロード/コンパイルする goapp はプロジェクトルート以下のソースコードをすべてコンパイルしようとする go-app-builder: Failed parsing input: parser: bad import "syscall" in ... go-app-builder: Failed parsing input: app file x
Mackerel Advent Calendar 2015の12日目です。比較的ゆるい内容にしました。昨日はすてにゃんさんでした。 この記事について 件の通り、mackerelのチェックプラグインについて。僕自身も業務では監視システムの中核としてMackerelを採用していて、主題のgo-check-pluginsやmackerel-agent-pluginsにいくつかのコントリビュートをさせていただいております。今回はgo-check-pluginsのプラグイン仕様やらお作法やらを簡単に解説します。golangでチェックプラグインを書いてみたいという人の一助になれば幸いです。 go-check-plugins チェックプラグインの開発にはいくつかのルールとお作法があります。ざっくり言うと次のポイントを押さえるべきだと思っています。 exit code 公式HPにも解説がありますが、これが
GitHub - kohkimakimoto/cofu: Minimum configuration management tool written in Go.github.com CofuというサーバプロビジョニングツールをGoで実装しました。Itamaeを参考に作りました。実装言語の違い(ItamaeはRubyによる実装)はありますが、外部仕様、内部実装、共にかなり似せて作ってあるので、ItamaeまたはItamaeが参考にしているchefを使ったことがあると、理解は簡単かと思います。特徴をざっくり説明すると、 ローカルでのプロビジョニングのみ対応。SSHなどでのリモートサーバのプロビジョニングはサポートしない Goなので実行ファイル一個で動く。導入が簡単 レシピはLuaのDSLで記述する 今のところ動作プラットフォームはRedHat(CentOS)のみをサポート あたりでしょうか。
最近マスタリングTCP/IP SSL/TLS編や暗号技術入門を読んでいた.理解を深めるためにGo言語で標準のcryptoパッケージを触り/実装を読みながら読んだ. cryptoパッケージは他の標準パッケージと同様に素晴らしい.Go言語にはどのような暗号化手法が実装されているのか実例を含めてざっとまとめる.なお本文に書ききれなかったものを含め全ての実装例はtcnksm/go-cryptoにある. 共通鍵暗号 まずは共通鍵暗号をみる.共通鍵暗号は暗号化と復号化に同じ鍵を用いる暗号化方式である.共通鍵暗号はブロック暗号とストリーム暗号の2種類に分けることができる.ブロック暗号は特定の長さ単位で暗号化を行う方式であり,ストリーム暗号はデータの流れを順次処理していく方式である. Go言語にはブロック暗号としてDES(Data Encryption Standard),DESを繰り返すtriple-D
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く