タグ

Goに関するSystemのブックマーク (78)

  • バリデーションとパースの分離。Goで実装する「変更に強い」CSV 処理の設計 - カミナシ エンジニアブログ

    こんにちは。カミナシで「カミナシ 従業員」の開発を行っている nilpoona です。 業務アプリケーションを作っていると、避けて通れないのが CSV インポート機能 です。 最初は「encoding/csv で読んでループ回せば実装できる」と考えて作り始めるのですが、仕様が複雑になるにつれて、以下のような課題に直面することがあります。 バリデーションとパース処理が混在し、エラーの発生箇所が追いづらい。 「文字コードが Shift_JIS だった」など多様なエンコーディングへの対応で、ビジネスロジックが複雑になる。 パースやバリデーションエラーを即座にリターンしてしまうと、ユーザーは一つのエラーを直してもまた次のエラーが出る「モグラ叩き」のような修正サイクルを繰り返すことになる。 データが正しい状態か保証されないまま、後続の処理(DB 保存など)に渡されてしまう。 今回は、こういった CS

    バリデーションとパースの分離。Goで実装する「変更に強い」CSV 処理の設計 - カミナシ エンジニアブログ
    System
    System 2025/12/11
  • docker-buildのチューニングTips全部書く【Go×GitHubActions】

    docker の最新記法や、GitHubActions でのビルドチューニングについて網羅的に書かれている記事って意外と少ない! 主に Go*GitHubActions での image ビルドについて、実行時間を短く・レイヤーを小さくする Tips を共有します 🚀 はじめにQualiArts Advent Calendar 2025 の 4 日目の記事です! 最近 Go のビルド周りを改善するのが趣味で、情報が結構散らばっていて困った経験があるのでまとめます。 皆様の docker-build 改善のきっかけになれるような記事を目指します!どれか刺され!🔥 目次 1. .dockerignore を適切に設定するまずどのように docker がファイルを扱うのかを確認しましょう。 docker build時、docker デーモンに指定ディレクトリ配下のファイルを tar アーカイ

    docker-buildのチューニングTips全部書く【Go×GitHubActions】
  • Goで作る静的解析ツール開発入門

    Goで静的解析ツールを作ってみたいけど、何から始めればいいの?」と思ったことはありませんか? Goは「静的解析がやりやすいように設計しよう」という背景を持って作られたプログラミング言語なので、go/astやgo/typesといった解析用の標準ライブラリがとても充実しています。 しかし、いざ作ろうと思っても「skeletonで雛形は作れたけど、その先のgo/astパッケージやgo/typesパッケージを使って自分がやりたい解析ロジックをどう書いていけばいいのか全く分からない」という壁にぶつかる方も多いと思います。 このでは、そんな「静的解析ツールを作りたいけれど、最初の一歩が踏み出せない」という方のために、ASTや型情報の基礎知識から実践的な解析ロジックの書き方まで、実際に動くサンプルコードとともに解説します。 読み終わる頃には「自分でも静的解析ツールが書けそう!」という状態になっている

    Goで作る静的解析ツール開発入門
    System
    System 2025/09/17
  • Goで実現するAho-Corasick法によるNGワード検出アルゴリズム | CyberAgent Developers Blog

    はじめに はじめまして、CyberAgentの26卒内定者として、株式会社QualiArtsで働いている masaです。 記事では、内定者バイト期間中に実装したNGワード検出アルゴリズムと実装例をご紹介します。 NGワード検出が必要な理由 ゲームにおいて、ニックネームやコメントなど、ユーザーが入力する箇所が多く存在します。その際に、不適切な表現を検知し、入力させないことはコンプライアンス、ユーザー体験に非常に重要です。 要件 開発チームがゲームの設定やデバッグを行う管理画面では、以下2つを設定できるようにします。 拒否リスト NGワードの一覧で、ここにある単語が含まれているとNG 許可リスト 拒否リストに含まれていても、ここに含まれている単語はOK 例: 拒否リストにhoge、許可リストにhogefugaと設定されている場合、hogefugafooはOK 簡単なNGワード検出アルゴリズム

    Goで実現するAho-Corasick法によるNGワード検出アルゴリズム | CyberAgent Developers Blog
    System
    System 2025/04/29
  • Goのジェネリクス徹底理解

    1. ジェネリクスなしでの開発 ジェネリクスが導入される前に、異なるデータ型をサポートするジェネリック関数を実装するためにいくつかのアプローチがありました。 アプローチ1: 各データ型に対して関数を実装する このアプローチは、極めて冗長なコードと高い保守コストをもたらします。いかなる変更も、すべての関数に対して同じ操作を行う必要があります。さらに、Go言語は同じ名前の関数のオーバーロードをサポートしていないため、外部モジュールからの呼び出しにこれらの関数を公開するのも不便です。 アプローチ2: 最も広い範囲のデータ型を使用する コードの冗長性を避けるために、別の方法は最も広い範囲のデータ型を使用することで、つまりアプローチ2です。典型的な例はmath.Maxで、これは2つの数のうち大きい方を返します。様々なデータ型のデータを比較できるように、math.MaxはGoの数値型の中で最も広い範囲

    Goのジェネリクス徹底理解
    System
    System 2025/01/01
  • Pure Go で辞書同梱な形態素解析器 kagome を公開してみました - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Pure Go で辞書同梱な形態素解析器 kagome を公開してみました - Qiita
  • Big Sky :: golang で画像アップロードが簡単に出来る go-imageupload を使ってみた。

    « GitHub Pages が Jekyll 3.0 になり、ますますブログが書きやすくなった。 | Main | コマンドラインから JSON が簡単に作れるツール jo » golang で Web アプリを作ってると画像のアップロード処理を書くことって意外と多くて、その度にググったり過去の自分の実装を調べたりして、みたいな事を繰り返してましたが go-imageupload を使うとかなり端折れる事になりそうです。 GitHub - olahol/go-imageupload: Gracefully handle image uploading and thumbnail creation. https://github.com/olahol/go-imageupload 実装は簡素ですが、毎回自分でこれを書いてたと思うと時間が勿体ないですね。使い方も簡単で README.md か

    Big Sky :: golang で画像アップロードが簡単に出来る go-imageupload を使ってみた。
  • Big Sky :: THE GO TOOL

    先日、Go言語開発チームはリポジトリ内にあった殆どのMakefileを削除した。私(訳者)は混乱したし不安にもなった。しかしそれは私がこれまでの習慣と異なる場面に遭遇した事による物だと気付いた。その事を色濃く書かれたいる記事があったので紹介したい。Go言語を知らない人でも面白く読めると思います。 Are You Fuckign Coding Me!? - The go tool http://areyoufuckingcoding.me/2012/02/14/the-go-tool/ 訳を許諾してくれたnu7hatchに感謝したい。(Thanks to nu7hatch) THE GO TOOL 毎週リリースされる最新版に新しいgoコマンドが導入され話題になっていたので、ちょっとこれについて書くことにした。 私は初め、このgo toolを統一しようというアイデアを聞いた時、少し懐疑的にな

    Big Sky :: THE GO TOOL
  • Goによるプライベートネットワークへのアクセスを禁止するHTTPクライアントの実装 - はこべにっき ♨

    クローラのように、ユーザからの入力に応じて任意のURLにHTTPリクエストを発行するソフトウェアは、誤ってプライベートネットワークへのリクエストを処理しないようにする必要があります。悪意のあるユーザが故意にプライベートなネットワークに対してリクエストして、内部情報にアクセスするといった攻撃を行う可能性があるからです。 PerlではLWPx::ParanoidAgentやLWPx::ParanoidHandlerといったモジュールが便利です。これらのモジュールは、リクエスト先のURLをチェックしてプライベートネットワークへのリクエストを禁止してくれます。単にIPアドレスをチェックするだけでなく、ホスト名をDNSで解決して得られたIPアドレスをチェックしたり、リダイレクト先のURLをチェックしたりしてくれます。まさに偏執的です。 このLWPx::ParanoidAgentと同様の機能をもったG

    Goによるプライベートネットワークへのアクセスを禁止するHTTPクライアントの実装 - はこべにっき ♨
  • Building Minimal Docker Containers for Go Applications

    There are several great official and community-supported containers for many programming languages, including Go, but these containers can be quite large. Let's walk through a comparison of methods for building containers for Go applications, then I'll show you a way to statically build Go apps for containerization that are extremely small. Part One: Our "app"We need something to test for our app,

    Building Minimal Docker Containers for Go Applications
  • Go言語で API サーバーを開発する | カメリオ開発者ブログ

    こんにちは!白ヤギの開発者、森です。 白ヤギではいま API サーバーを Go 言語で開発しています。 皆さんも Go の話題をよく見聞きするようになっていると思います。今回は白ヤギの業務でどんな風に Go を使って開発しているかの一端を紹介します。 余談ですが、先日、大学の先生とお話ししたときにこんな話を伺いました。その先生は学生にプログラミングを教えているそうですが、何割かの学生は及第点に届かないそうです。しかし、そういった学生がプログラミングの素養がないかというとそういう訳ではなく、プログラミングを学ぶ上でその学生にとって何が理解を促すのかが違うだけなのだと仰っていました。教える側として全ての学生が習得できるプログラミング教育というのを見つけられていないのが悔しいといった話をされていました。 何かを学ぶというのを一般論では語るのは難しいということかもしれません。そのため、私はこうい

    Go言語で API サーバーを開発する | カメリオ開発者ブログ
  • Go言語でSQLのトレースをする

    ぴっぴ先輩が「Go言語で発行したクエリを確認したい」って言ってて、 「MySQL使っているならGeneral Logを吐けばよいのでは?」と返したんだけども、 もっと汎用的な方法はないものかと考えてみました。 Golangdatabase/sql はどんなDBでも対応できるよう、ドライバを自由に入れ替えることができます。 ドライバは単にdatabase/sql/driverにあるインターフェースを満たしている何かなので、 ユーザが自由に作ることができるし、interfaceを経由して直接呼び出すことも可能です。 この仕組を使って、別のドライバにそのまま渡すプロキシを作れば、ログを吐けるのでは?ということでやってみました。 go-sql-proxy 使い方 まず最初にgo-sql-proxyをドライバとして登録します。 hooks := &proxy.Hooks{ // Hook fun

    System
    System 2015/05/13
  • Migu という golang 用 DB スキーマのマイグレーションツールを作った話 - 何気に大変

    Ridgepole インスパイアの golangDB スキーマのマイグレーションツールを作りました。 https://github.com/naoina/migu Migu は Ridgepole と同様に(バグが無い限り)冪等性が保証されています。 Ridgepole と違うところは、スキーマ定義を DSL ではなくて golang の struct で定義するところです。こうすることによって、モデル定義 = スキーマ定義となるので DRY になります。 使い方 下記を schema.go というファイル名で保存します。ファイル名は何でもいいんですが、ここでは schema.go を使います。package 名も何でも構いません。 package schema type User struct { Name string Age int } 次に migu_test というデータ

  • チャットで学ぶ Go ネットワークプログラミング : DSAS開発者の部屋

    簡単なチャットプログラムは、ネットワークプログラミング用のフレームワークでは定番のサンプルプログラムです。 echo サーバーが Hello World とするなら、チャットは FizzBuzz といったところでしょう。 とりあえず動くだけのチャットならだれでもすぐに作れるようになりますが、まじめにチャットを作ることで、 ネットワークプログラミングで考えないといけない点やエラー処理の重要な基礎を学ぶことができます。 ということで、 Go でシンプルなチャットを実装してみました。 (ソースコード) 以降、何を考えてどういう設計を採用したのかを解説していきます。 考慮すべきポイント 特定のクライアントへの送信に長時間待たされた場合に、他のクライアントへの送信が遅れないようにする。 クライアントを切断するのは、 (1)ルーム側から kick する場合, (2)受信エラー, (3)送信エラー の3

    チャットで学ぶ Go ネットワークプログラミング : DSAS開発者の部屋
  • Why Go Is Not Good :: Will Yager

    Blog Why Go Is Not Good I like Go. I use it for a number of things (including this blog, at the time of writing). Go is useful. With that said, Go is not a good language. It's not bad; it's just not good. We have to be careful using languages that aren't good, because if we're not careful, we might end up stuck using them for the next 20 years. This is a list of my chief complaints about Go. Some

    System
    System 2014/06/30
  • Big Sky :: Golang で PubSub 出来る go-pubsub を書いた。

    Golang ってネットワークを扱うのが凄く楽で色んな物が作りたくなるんだけど、いつも pubsub っぽいのが欲しくなって毎回作ってる気がしたので汎用的に扱えるインタフェースを作った。 mattn/go-pubsub - GitHub https://github.com/mattn/go-pubsub 使い方は簡単で、まず subscribe 側はある型を引数に持つコールバックで Sub を呼び出す。 ps := pubsub.New() ps.Sub(func(i int) { fmt.Println("int subscriber: ", i) }) そして publish 側はある型を指定して Pub を呼び出す。 ps.Pub(1) Pub された値と同じ型の引数を持つ subscriber のみがメッセージを受け取れるという仕組み。構造体も渡せるので複雑なメッセージ内容もOK

    Big Sky :: Golang で PubSub 出来る go-pubsub を書いた。
  • Inside the Go Playground - The Go Programming Language

    Introduction NOTE: This article does not describe the current version of the Go Playground. In September 2010 we introduced the Go Playground, a web service that compiles and executes arbitrary Go code and returns the program output. If you’re a Go programmer then you have probably already used the playground by using the Go Playground directly, taking the Go Tour, or running executable examples f

    Inside the Go Playground - The Go Programming Language
  • GO net/http handlers

    GO net/http handlers A list by Andrea Di Persio, 15 Nov 2013 A collection of gists showing how to use net/http handlers as a starting block for building powerful HTTP servers. The package net/http provides all the building blocks (and more) to build both HTTP client and server applications. Learn how to use net/http handlers and how to built new ones suited to your needs. Basic examples Hello Worl

  • GO Essential

    GO Essential A list by Andrea Di Persio, 11 Nov 2013 A collection of resources for programmers trying GO for the first time. GO language is a clean and modern programming language, mixing elements from C, Python, and more exotic languages like Limbo. On top of that, GO offers a sane approach to concurrency, so you'll never have to worry about locks, mutex and other nightmarish construct, and a nic

  • Big Sky :: Go言語でWebAppの運用に必要なN個のこと

    « Software Design 2013年10月号「生産性を向上させるVimのTips」を書かせて頂きました。 | Main | Go言語でインタフェースの変更がそれ程問題にならない理由 » golang - Go言語でWebAppの開発に必要なN個のこと - Qiita [キータ] http://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies アプリケーションサーバ 標準パッケージの ne... http://qiita.com/tenntenn/items/b8b27e32c28f7569f41a tenntenn さんに開発版を書いて貰ったので運用編を書こうかと思った。 なお、以下のプロダクトは全て golang で書かれているが、rubyperl のアプリケーションを運用する際にも

    Big Sky :: Go言語でWebAppの運用に必要なN個のこと