タグ

goに関するkuchitamaのブックマーク (30)

  • awslim - Goで実装された高速なAWS CLIの代替品を作った - 酒日記 はてな支店

    最初に3行でまとめ AWS CLIは便利です。しかし起動が遅いので、Goで実装された高速な(ただし機能は少ない)代替品を作りました。awslim といいます リリースバイナリは無駄に大きいので、必要な機能だけを組み込んだビルドを簡単にできるようにしてあります。ビルドして使うのがお勧めです どうぞご利用下さい github.com 以下はこれに至るまでの経緯とか、実装や使い方の話とかです。長いです。 作成の経緯 AWSの各種サービスにアクセスするための AWS CLI は、スクリプトやコマンドラインから処理を自動化するために大変便利なツールです。AWSでサーバーサイドの開発、運用している人であれば、ほぼ全員がお世話になっているんじゃないかと思います。 しかし、AWS CLI (コマンド名aws) には「起動が重い」という問題があるなとずっと思っていました。具体的には、aws --versio

    awslim - Goで実装された高速なAWS CLIの代替品を作った - 酒日記 はてな支店
  • Goのビルドタグの書き方が// +buildから//go:buildに変わった理由

    ざっくり言うと // +buildは、一般的な&&や||を使う論理式の書き方じゃないので分かりにくかった 複数行書くこともできたので暗黙的な論理演算になり、意図しないビルド条件になることがあった だから、より身近で明確な書き方ができる//go:buildへ置き換えることになった(記述位置の条件とかも見直してる) Go1.17でビルドタグの書き方が変わることがアナウンスされた 2021年8月のGo1.17から//go:buildが使えるようになりました。 後でも触れるのですが、もちろん後方互換性が維持されているので// +buildも使えます。 // +buildだけが指定されているファイルに対してgo fmtを実行すると、同等の//go:buildがすぐ上の行に追加されるようになっています。 // +buildはいくつかの問題を抱えていた もともと// +buildに指定できるのはOS名か

    Goのビルドタグの書き方が// +buildから//go:buildに変わった理由
    kuchitama
    kuchitama 2023/05/09
  • Go言語に出したプロポーザルが通った:{bytes,strings}.ContainsFuncの追加 - プログラムモグモグ

    今年の夏にGo言語に以下のようなプロポーザルを出していたのですが、それが先ほど承認されました。標準パッケージの関数追加になります。 proposal: bytes, strings: add ContainsFunc · Issue #54386 · golang/go · GitHub Go言語のstringsパッケージとbytesパッケージには、文字列から文字や部分文字列を探す関数がいくつかあります。 探す文字の位置を返す関数、最後から探す関数、そういう文字が含まれるかどうかを返す関数を表にまとめると、次のようになります。 Find what? Index* LastIndex* Contains* substr string Index(s, substr string) int LastIndex(s, substr string) int Contains(s, substr s

    Go言語に出したプロポーザルが通った:{bytes,strings}.ContainsFuncの追加 - プログラムモグモグ
  • Goで作ったロジックにWebUIをつけてGitHubページに公開する | フューチャー技術ブログ

    ちょっとしたツールをGoで作ってみたのですが、わざわざインストールしなくてもいいようにWebのUIをつけてブラウザで使えるようにしてみました。作ってみたのは以下のツールで、Markdownのリスト形式でざっと下書きしたテーブルの設計をSQLとか、PlantUMLとかMermaid.js形式のERDの図にします。 https://shibukawa.github.io/md2sql/ ウェブフロントエンド部分はNext.jsの静的サイトで、GoWASMにしてロードして実行しています。WASMを使うのは初めてなのであえて選んでみました。 GoWASM化するもともとCLIツールは作っておりました。CLIのメインはcmd/md2sql/main.goで作っていました。この中でやっていることは kingpin.v2のオプションパース 指定されたファイルを読み込み(あるいは標準入力) パース 指定

  • Go Secure Coding Practice の日本語翻訳を公開します - Techtouch Developers Blog

    はじめに Go Secure Coding Practice とは コンテンツ一覧 良かったところ 注意すべきところ 最後に はじめに こんにちは。SRE の izzii です。 テックタッチのエンジニア規模もそれなりに拡大し、若手の採用も進んできたため、セキュアコーディングを徹底していきたいという思いがあり、まずは意識改革ということで勉強会を実施しました。セキュアコーディングを目的とした場合には教育だけでなく Static application security testing (SAST) の導入といった方法もあるのですが、まずは自分を含めた開発メンバーにノウハウをインストールすることにしました。セキュアコーディングへの意識が高まれば、いづれ SAST の導入の際に抵抗感も少ないだろうと考えています。いきなり SAST を導入しても、誤検知が煩くて浸透しないリスクもありうると考えてい

    Go Secure Coding Practice の日本語翻訳を公開します - Techtouch Developers Blog
    kuchitama
    kuchitama 2022/08/27
  • Go な Web Server を Systemd で良い感じに動かすメモ

    Go で Web Server 書く 動作確認するだけのコードなのでなるだけシンプルに書く。んで、 Port 80 を Listen したいけどプロセスは root で走らせたくないので、 systemd でポート開いてそれをプログラム側で使うようにする。 ディスクリプタごにょる部分は coreos/go-systemd がドンピシャなのでこれを使う。 package main import ( "errors" "fmt" "log" "net" "net/http" "github.com/coreos/go-systemd/activation" ) func main() { // Mux を設定する m := http.NewServeMux() m.HandleFunc("/", handler) // Server を設定する s := &http.Server{ Handl

    Go な Web Server を Systemd で良い感じに動かすメモ
  • Go製の全文検索エンジンOmochiを作った.

    1.はじめに 膨大な量の電子データから目的となるデータを取得・抽出する情報検索。その技術は広く普及し、多くの人々が、様々な場面でその恩恵を受けています。GoogleやBingをはじめとした、世の中に大きなインパクトを与えるWeb検索がその代表例ですが、物件検索や論文検索、メール検索などその応用は様々です。 さて、今回取り組んだのは、Goによる転置インデックスを用いた全文検索エンジンのスクラッチ実装です。研究で自然言語処理を学んだことをきっかけに、情報検索や転置インデックスといったトピックに強い興味が湧いたので、Elasticsearch等には頼らず、ゼロから実装を行いました。以下、リポジトリになります。 記事では、Omochiの設計・実装に関する説明を行なっていきます。 2.転置インデックス型・全文検索エンジンOmochi リポジトリのREADME.mdにも記載がありますが、今回実装した

    Go製の全文検索エンジンOmochiを作った.
  • Goプログラム実行時間の短縮 - ZOZO TECH BLOG

    こんにちは。生産プラットフォーム開発部の中嶋です。生産プラットフォーム開発部はアパレル生産のDXを進めている部門です。具体的には服作りのIT化を含めたアパレル生産の効率化の促進と「生産支援」のシステムを主にGoで開発しています。今回はその運用の中でGoプログラムの実行時間をどのように短縮したのかを紹介します。 目次 目次 学べること・解決できること 背景 エラー発生 調査・対応 インスタンスの変更 原因 実装アプローチの見直し ゴルーチンを使ったタイムアウト処理 サンプルコード チャネルのクローズについて Goのメモリマネジメントについて スタックとヒープ ゴルーチンとメモリについて ヒープについて 問題の仮説 どのように解決したか 実装イメージ 利用したパッケージ サンプルコード 結果 まとめ 最後に 参考リンク 学べること・解決できること Goのメモリエラーに対するアプローチ例 Go

    Goプログラム実行時間の短縮 - ZOZO TECH BLOG
  • Goのテストに入門してみよう! | フューチャー技術ブログ

    2020/08/15更新: 「テストの失敗をレポートしたい」と「サブテストの一部のみ実施したい」の章を追加 はじめにTIG の辻です。今回は春の入門祭りということで Go のテストに入門してみよう! という記事です。 書いた背景ですが Go の標準ライブラリのコードリーディング会で testing パッケージにチャレンジしてみましたが、難しすぎてわからん。そもそも Go のテストって何ができるんだっけ? という話になり、基的な内容をなるべく具体例をまじえながらまとめました。 ざっとどんなことができるんだろう、という index になれば幸いです。 TipsGo に組み込まれているテストの仕組みの中に、ベンチマークに関するテストと Example テストというサンプルコード用のテストも含まれているのですが、この 2 つは対象外にします。基礎的と思われる内容から順に並べてみました。 はじめに

    Goのテストに入門してみよう! | フューチャー技術ブログ
  • An Introduction To Generics - The Go Programming Language

    The Go 1.18 release adds support for generics. Generics are the biggest change we’ve made to Go since the first open source release. In this article we’ll introduce the new language features. We won’t try to cover all the details, but we will hit all the important points. For a more detailed and much longer description, including many examples, see the proposal document. For a more precise descrip

    An Introduction To Generics - The Go Programming Language
  • Goのテーブル駆動テストをわかりやすく書きたい

    Goでテーブル駆動テストを書いていると、書いているときは「すげー読みやすくテスト書けてるぞ!」と思っていても、落ち着いてから見てみると「なんだこれ...訳がわからん...」となることがあると思います。(自分はよくあります。) この記事は、このようなことを解決するのに役立つtipsについてまとめています。主にテストケースについて焦点を当てています。 テストしやすいコード設計に興味がある方は や を参考にしてください。 はじめに この記事はパーソナライズGopher道場で学んだことを元に書いています。 そして、この記事で紹介するテーブル駆動テストの書き方は主観に基づいており、 あくまでテストの1つの書き方にすぎないです。 なので、「この書き方をしないとダメ!」というものではないので、みなさんの考え方やプロダクトに合わせて、柔軟にこの記事で紹介するtipsを取り入れていただけると幸いです。 結論

    Goのテーブル駆動テストをわかりやすく書きたい
  • Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)

    動的型付けプログラミング言語や、class を持つようなプログラミング言語を使う場合、そのフィールドメンバの定義順などを意識する事は少ないかもしれません。 Go は struct という、C言語が持っている構造体と同じ様にメモリ配置され、構造体そのものをレシーバとして、メソッドを定義しつつプログラミングを行います。struct はデータ構造そのものを示し、それが大きくなるにつれ、当然ながらメモリ使用量も多くなります。 さて、例えば以下のコードを実行すると、struct 100 個分のサイズは幾らになるでしょうか。 package main import ( "fmt" "unsafe" ) type Account struct { TimeZone struct { Name       string `json:"name"` UtcOffset  int    `json:"utc_

    Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)
    kuchitama
    kuchitama 2022/01/28
  • Goのロギングライブラリ 2021年冬 - moriyoshiの日記

    この記事はPySpa Advent Calendar 2021の14日目のエントリーとして書かれました。昨日のエントリーは冷凍品でウキウキ引きこもり生活 でした。ちなみに私も70ℓの冷凍庫を購入しましたが当にライフチェンジングでした。 総論: なぜログが必要か 可観測性 たとえ目的は自明でも、その動作までが自明なアプリケーションというものはほぼ存在しません。現実の世界のアプリケーションというものは、動作パラメータだったり実行環境だったり、起動時点でのさまざまな要因によって挙動を変えるものだからです。そして、そうしたアプリケーションにはライフサイクルというものがあります。ここでいうライフサイクルは、アプリケーションの処理が実行されるにつれ、アプリケーションの内外との情報のやりとりで生じる大局的な状態の変化のことです。アプリケーションが並行処理を行うようなものであれば、個々の並行処理の単位

    Goのロギングライブラリ 2021年冬 - moriyoshiの日記
  • コンテナで動くGoアプリをデバッグする方法

    初めに 最近開発環境を整備していて、コンテナでGoアプリケーションをリモートでデバッグするのにちょっと面倒だったので、自分のメモも兼ねてやり方を残しておきます。 要件 プロジェクトによりますが、今の現場では主要エディタがVSCodeです。 もちろんVimユーザー(うち一人はぼく)がいるので、ターミナルでもデバッグできるように対応する必要があります。 また、コード変更を反映させるために都度イメージをビルドしてコンテナを再作成するは開発スピードが落ちるため、コンテナ再起動だけで反映されるようにする必要があります。 デバッガのしくみ Goにはdelveというデバッガがあります。 delveはClient-Serverモデルになっていて、次の2つのプロトコルで通信が可能になります。 JSON-RPC DAP JSON-RPCはdelveのCLIに使われています。 DAPはMicrosoftが策定し

    コンテナで動くGoアプリをデバッグする方法
  • GraphQLのN+1問題を解決する DataLoaderの使い方 - 一休.com Developers Blog

    こんにちは。宿泊事業部の宇都宮です。この記事では、GraphQLサーバ実装時に遭遇するN+1問題と、その解決のために使えるライブラリを紹介します。 フィールド単位でresolverを用意する N+1問題 GoのDataLoaderライブラリ DataLoaderの仕組み DataLoaderのサンプルコード DataLoaderとDataDog APM むすび 採用情報 フィールド単位でresolverを用意する GraphQLでは、クライアントのクエリに応じてオンデマンドに結果を取得できます。 たとえば、以下のクエリを投げると… { accommodation(accommodationId: "00001050") { name } } 以下のようなレスポンスが取得できます。 { "data": { "accommodation": { "name": "マンダリン オリエンタル 東

    GraphQLのN+1問題を解決する DataLoaderの使い方 - 一休.com Developers Blog
  • 【GraphQL × Go】gqlgenの基本構成とオーバーフェッチを防ぐmodel resolverの実装 - LayerX エンジニアブログ

    こんにちは。SaaS事業でLayerX ワークフローの開発を担当している@sh_komineです。 この記事は、LayerX Advent Calender 2021の16日目の記事です。 LayerX ワークフローではGoGraphQLをフル活用して開発を行なっています。 www.layerx.jp GraphQLの良さはいろいろと語られていますが、「Goで実際にどう実装するんだ?」と言うところは、gqlgenの簡潔なGet Startedがあるくらいでなかなか手で動かさないと理解できないなという思いがありましたので、graphqlプロジェクトの基構成に触れながら、オーバーフェッチを防ぐ実装の仕方について書いていきたいと思います。 記事は実際の事例ではなく、gqlgen 初学者の全体把握、gqlgenの仕組みについての理解に焦点を当てた記事になります。 以下の流れで話をします。

    【GraphQL × Go】gqlgenの基本構成とオーバーフェッチを防ぐmodel resolverの実装 - LayerX エンジニアブログ
  • 今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ

    こんにちは、@p1assです。 最近研修で Go を書いていて、その際にいくつか質問をされるのですが、聞いてみると前にも答えたような質問が多かったので、これを機にブログに参考リンクをまとめようと思います。 質問された際にすぐ答えられない質問も数多くあり、調べたり教えてもらったりすることで様々なことを再発見できました。 この記事では、質問に対する回答をできるだけ公式に近い文章を引用する形で書き記します。私個人の考えは別の段落になるようにして、事実と意見を区別するように心がけています。 なにか誤りを見つけた際は GitHub で PR を投げていただけると助かります。 言語仕様 関数の引数は値渡しか参照渡しか? Go はすべて値渡し (pass by value) です。 ポインタの場合は、ポインタそのものがコピーされポインタの指し示す先の値はコピーされません。 Go の多値返却はタプルか?

    今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ
  • Serverless連載3: Goでサーバーレス用の検索エンジンwatertowerを作ってみました | フューチャー技術ブログ

    サーバーレス連載の3回目は検索エンジンを作ってみたお話です。 クラウドサービスが充実してくるにつれて、サーバーレスではいろいろなことができるようになっています。HTTPサーバーは動きますし、RDBやNoSQLなストレージも使えますし、PubSubみたいなサービスも利用できます。これらを駆使するとそこそこ複雑な処理も記述できます。 一方で、上から下までサーバーレスにしようとするとできないものもいくつかあります。例えば、RDBも使えるといっても制約があり、LambdaやCloud FunctionsからRDSやCloudSQLを雑に使うとコネクションを張りすぎる問題があります。LambdaにはRDS Proxyが出始めています。あと、RDBそのものは基的に常駐型なのでサーバーレスではないです。一応サーバーレスなのもありますが、起動時間が結構かかるらしい(自分ではまだ試してないです)。それ以外

    Serverless連載3: Goでサーバーレス用の検索エンジンwatertowerを作ってみました | フューチャー技術ブログ
    kuchitama
    kuchitama 2020/03/27
    これこれ、こういうのいるよなぁって思ってたとこなのでありがたい!!
  • SSL証明書の有効期限確認に便利なツール「cert」 | DevelopersIO

    こんにちは、コカコーラ大好きカジです。 「SSL証明書(サーバ証明書)の有効期限確認や証明書の種類を確認するのは面倒ですよね。」 OpensslのコマンドをGoogle検索して・・・というか、自分もそんな感じです。 同じな悩みを持った人いそうだなぁ・・・と思って調べたら解決していた人がいました。感謝です。 certとは SSL証明書(サーバ証明書)の情報取得ツールです。(MITライセンスです。) genkiroid/cert Cert is the Go tool to get SSL certificate information. 前提条件 MacOSXでの利用法を記載します。他のOSの場合は、Goが動作すれば動くようですので、上記URLのReadmeをご参照ください。 certのセットアップ brewを利用すれば簡単にインストールできます。 % brew tap genkiroid/

    SSL証明書の有効期限確認に便利なツール「cert」 | DevelopersIO
    kuchitama
    kuchitama 2017/11/01
    おおー!めっちゃ便利じゃね?Goなら、AWS Lambdaで使えるかな?
  • Go1.9から使える Monotonic Clocks を試してみた

    先日Go1.9beta1がリリースされました。 Go 1.9 Beta 1 is released! Announcement:https://t.co/lV5nvXwOoR Get it!https://t.co/2LhlOo2EtX#golang pic.twitter.com/zm09DwX93q — Go (@golang) 2017年6月14日 Go 1.9 Release Notes 型エイリアスのサポート、math/bitsパッケージ、 sync.Map型など、 今回のアップデートでも便利そうな機能が追加されます。 詳しくはtenntennさんのGopher Fest 2017参加レポートをどうぞ。 今回のリリースノートを見て、個人的に注目しているのはMonotonic Clocksのサポートです。 他の機能追加はTwitterとかで見かけるけど、 Monotonic Cl