タグ

tjmtmmnkのブックマーク (1,120)

  • 改めて見直すGoの特徴

    極力Goならではな特徴をいくつか挙げていく。 依存解決が必要最低限で互換性を考慮しつつ決定的 モジュール単位で依存をダウンロード。コンパイル対象はサブパッケージ単位。 依存の明示方法はコードに埋め込まれ、かつ未参照のインポートはコンパイルエラー。 つまり動作するコードのすべては正確な依存ツリーが明示されていて余計な依存は引き込まれない。 そして持ち前のコンパイルの速さを含め、相当深い依存ツリーでも依存解決にかかる時間は既知の処理系の中でも最速レベル。(唯一勝てるのはプリビルドバイナリが配布されている場合くらい) また、コンパイルやリンクに必要な処理量そのものが比較的少ないため、開発環境負荷も小さい。 かなり巨大なプロジェクトであってもメモリ8GBで困るようなことが無い。つまり、CI環境の維持にもローコストで済む。 ライブラリの提供側では後方互換性が破壊されるような変更はV1->V2というよ

    改めて見直すGoの特徴
    tjmtmmnk
    tjmtmmnk 2024/05/12
  • Pagination with Relative Cursors

    Omitted from the table are tests with the 1,000,000th offset and above since they consistently timed out. Not only do queries take a long time when a large offset is used, but there’s also a limited number of queries that can be run concurrently. If too many requests with large page numbers are made at the same time, they can pile up faster than they can be executed. This leads to unrelated, quick

    Pagination with Relative Cursors
  • TypeScript 関数型スタイルでバックエンド開発のリアル

    TSKaigi 2024 のスライドです

    TypeScript 関数型スタイルでバックエンド開発のリアル
  • モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み 大規模なソフトウェア開発においてモノリシックかマイクロサービスかというアーキテクチャの議論がありますが、近年は第3の選択肢としてモジュラモノリスが話題になっています。いったんマイクロサービス化に舵を切りながら現在はモジュラモノリスに取り組むアソビューの考え方や進め方について、VPoEの兼平大資(disc99)さんによる寄稿です。 アソビューでは、現在の事業状況にマッチしていることや過去の経緯から、モジュラモノリスを中心としたアーキテクチャを採用しています。 今回は、なぜその選択をし、どのように実現しているかを紹介します。 記事の前半では、アソビューが提供する事業や、アーキテクチャに対する考え方、開発組織の歩みなどを説明します。 中盤以降は、アソビューにおけるモジュラモノリスへの取

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • 【Go 言語】interface のポインタからメソッドコールできないのはなぜ? - Qiita

    結論 簡潔に言うと「interface を指すポインタは interface を実装した構造体のポインタのポインタになるから」です。 これだけではよくわからないので詳しくみていきましょう。 interface のポインタからメソッドコールができないとは? interface の Mammal とそれを実装した Human という構造体を考えましょう。 type Mammal interface { GetAge() int } type Human struct { Age int } func (h *Human) GetAge() int { return h.Age }

    【Go 言語】interface のポインタからメソッドコールできないのはなぜ? - Qiita
    tjmtmmnk
    tjmtmmnk 2024/05/06
  • Goにおけるテスト用DB分離のテクニック

    この記事は Go言語 Advent Calendar 2023 4日目の記事です。 導入 GoMySQLやPostgreSQLのようなリレーショナルデータベースをDocker上で立ち上げテストに利用する手法は一般的です。この場合、異なるパッケージからの並行テスト実行によりテストデータの追加やクリーンアップ、データベース操作が重複することがあります。これにより、テストの数が増えるにつれ操作が競合したり、他のテストケースによる影響で期待される結果が得られないことがあるためFlakyテスト(不安定なテスト)の問題が生じます。 この記事では、テスト中のデータベース操作に関連する問題に対処する方法として TestMain 関数を使用し、テスト用データベースをパッケージごとに分離するアプローチについて紹介します。この方法は、テストの信頼性を向上させると同時にデータベース操作の競合を避けるための効果的

    Goにおけるテスト用DB分離のテクニック
    tjmtmmnk
    tjmtmmnk 2024/05/04
  • GoにはなぜXという機能がないのか? 〜テスト関数ごとの暗黙的な初期化処理の実現を考察する | gihyo.jp

    つきなみGo GoにはなぜXという機能がないのか? 〜テスト関数ごとの暗黙的な初期化処理の実現を考察する はじめに 筆者はGoだけではなく、Scalaなど他言語を扱った経験もあり、しばしばGoには他の言語にあるXという機能がなぜないのだろう?と考えることがあります。 たとえば、テスト関数ごとに暗黙的に呼ばれる初期化関数の定義があります。データベースに対するDrop・Create・Insertなどの処理をテストごとに実行したい場合に定義できると便利でしょう。同じ処理を都度書いているとテストケースが増えてきた時にメンテナンス性が下がってしまったり、初期化処理を追加し忘れてしまう恐れなどもあります。 しかし、Goにはこのようなテスト関数ごとに暗黙的に実行される初期化処理を定義できません。Goが他言語に劣っているようにもみえますが、当にそうなのでしょうか? 公式のFAQにもあるように、とある機能

    GoにはなぜXという機能がないのか? 〜テスト関数ごとの暗黙的な初期化処理の実現を考察する | gihyo.jp
    tjmtmmnk
    tjmtmmnk 2024/05/04
  • Practical Persistence in Go: Organising Database Access

    A few weeks ago someone created a thread on Reddit asking: In the context of a web application what would you consider a Go best practice for accessing the database in (HTTP or other) handlers? The replies it got were a genuinely interesting mix. Some people advised using dependency injection, a few favoured the simplicity of using global variables, others suggested putting the connection pool poi

    tjmtmmnk
    tjmtmmnk 2024/05/03
  • SQSを用いたクレジットカード決済の非同期化 - ZOZO TECH BLOG

    こんにちは、カート決済部カート決済サービスブロックの林です。普段はZOZOTOWN内のカートや決済の機能開発、保守運用、リプレイスを担当しています。 弊社ではカートや決済機能のリプレイスを進めており、これまでにカート投入のキャパシティコントロールや在庫データのクラウドリフトを実現しています。 techblog.zozo.com techblog.zozo.com 記事では新たにクレジットカード決済処理を非同期化したリプレイス事例を紹介します。 はじめに 背景・課題 非同期化のシステム構成 パターン1 - 完全非同期化パターン パターン2 - 非同期・同期切り替えパターン パターン3 - ポーリングパターン システム構成の決定 メッセージングサービスの選定 効果 今後の展望 まとめ さいごに はじめに 章では、非同期化前のZOZOTOWNのクレジットカード決済を用いた注文処理の流れを説明

    SQSを用いたクレジットカード決済の非同期化 - ZOZO TECH BLOG
  • Go言語の埋め込みについて4つのポイントでまとめました - Qiita

    インターフェースに構造体は埋め込めません。インターフェースにはシグネチャを与えるものなので具象な構造体を埋め込むのはNGですね。 逆に他3つは可能です。それぞれの使い方を下記のサンプルコードで確認しました。 package main import ( "fmt" ) type Flyer interface { Fly() string } type Runner interface { Run() string } // ① インターフェースにインターフェースを埋め込む type FlyingRunner interface { Flyer Runner } // ② 構造体にインターフェースを埋め込む type ToriJin struct { // 鳥人 FlyingRunner } // ③ 構造体に構造体を埋め込む type ShinJinrui struct { // 新人類

    Go言語の埋め込みについて4つのポイントでまとめました - Qiita
    tjmtmmnk
    tjmtmmnk 2024/04/30
  • マイクロサービスからモジュラーモノリスを経て新マイクロサービスへ - Techtouch Developers Blog

    バックエンドエンジニア兼万年ダイエッターの taisa です。テックタッチは、以前マイクロサービスからモジュラーモノリスを経て新マイクロサービスへの切り直しを実施しました。記事では、マイクロサービス・モノリスについて簡単に触れながらテックタッチがどういったプロセスでマイクロサービスの切り直しを実施したかを紹介します。 はじめに マイクロサービスとモノリス マイクロサービスとは マイクロサービスの利点 モノリスとは 単一プロセスモノリス モジュラーモノリス 分散モノリス テックタッチの場合 初期の頃の構成イメージ マイクロサービス切り直し前 特徴 モジュラーモノリス化 サービスの移行 別ドメイン境界でサービス切り直し イベントストーミング マイクロサービス切り直し後 DB 統合へ続く まとめ 参考 はじめに テックタッチは初期の頃からマイクロサービスアーキテクチャを採用していますが、一部の

    マイクロサービスからモジュラーモノリスを経て新マイクロサービスへ - Techtouch Developers Blog
  • 現場で役立つGo言語のTipsをただまとめてみた

    はじめに こんにちは、23卒でバックエンドエンジニアをしているたかしゅんです。 私の所属しているプロダクトではサーバーサイドの開発言語としてGoを採用しております。 チームでGoの勉強会をした際にあまりにもGoの流儀や綺麗な書き方を理解していなかったので、以下の書籍を読みました。 [Go言語 100Tips ありがちなミスを把握し、実装を最適化する] この書籍から得た知見、プルリクエストのレビューで受けたアドバイス、そしてコードレビュー時に意識すべき点などを基に、知識を整理し共有したいと思います。 基礎文法は理解しているけど、実際のプロダクトで何を意識して書けば良いのかわからない方に、少しでも参考になれば幸いです。 1. コード 1.1 不用意にネストしない 可読性の悪いコードには命名、一貫性、書式など様々な原因がありますが、その中の重要な原因の一つとしてネストが関係します。 よくある例と

    現場で役立つGo言語のTipsをただまとめてみた
    tjmtmmnk
    tjmtmmnk 2024/04/28
  • よくわかるcontextの使い方

    Goの標準パッケージにはcontextパッケージというものが存在します。 このパッケージは、net/httpやdatabase/sqlのような現実の事象と対応している何かが存在するようなパッケージではないため、初学者にとっては使い道がわからない、となってしまいがちです。 しかしcontextパッケージは、複数のゴールーチンを跨いだ処理を実装する際には非常に強力な力を発揮する、とても便利なパッケージなのです。 このでは、「contextとは何か?」というところから「どのように使えばいいのかわかる」ところまでたどり着けるように、Goのcontextまわりのことを解説しました。

    よくわかるcontextの使い方
    tjmtmmnk
    tjmtmmnk 2024/04/28
  • なぜ Teng は良いものなのか - tokuhirom's blog

    なぜ Teng は良いものなのか、を YAPC で再考させられたのでここにメモしておく。 Teng は自社開発のウェブアプリケーションを作ってる人たちが作っていて、それがうちのニーズにあってるのでいいっていう話であって、どこでもすごい最高!! と主張したいわけではないです。まあ、個人の感想ですね。 ソースが読みやすい ソースがよくモジュール化されていて、読みやすい。自身で書いている部分が多いという贔屓目を抜きにしても読みやすいんじゃないかなーと。 僕らのような自社開発のウェブ屋では、なにか無茶な要望を受けた時にささっと対応するということが求められるシーンが多いので、ソースの読みやすさというのはかなり重要なファクターとなっています。 複雑な SQL を発行できないように機能が制限されている SQL ビルダーを使って JOIN やサブクエリを駆使したウェブアプリケーションを開発してしまうと、運

    tjmtmmnk
    tjmtmmnk 2024/04/26
  • 一言で理解するReact Server Components

    この記事はReact公式の内容を翻訳・紹介するものではありません。筆者の解釈や理解を伝えるものであり、Reactの公式見解と一致しているとは限りません。あらかじめご了承ください。 皆さんこんにちは。最近Next.js 13.4がリリースされ、App Routerがstable扱いになりました。App RouterはReact Server Component (RSC) をふんだんに用いて構築されています。 React体でServer Componentがずっとalpha版なのにNext.jsでbetaとかstableとか言ってるのは何で? という問題も、React Canaryのアナウンスにより無事に解消されました。 React Canaryってなに? 先日React公式ブログでアナウンスされた、新しいリリースチャネルです。 筆者の理解による概要をお伝えすると、Canary版のReac

    一言で理解するReact Server Components
  • PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜 - Mirrativ Tech Blog

    こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術PerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlGoという2つの環境を同時に運用していますが、 基的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレガシーな実装においては顕著) そこで PerlXS を利用することで Perl から Go を直接呼び出せるようにできないかと考え検証を進めることにしました Goの -buildmode=c-shar

    PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜 - Mirrativ Tech Blog
    tjmtmmnk
    tjmtmmnk 2024/04/25
  • Goで関数の引数に、union型っぽくstruct Aもしくはstruct Bのどちらかを受け取れるようにしたい - $shibayu36->blog;

    Goで関数の引数に、struct Aという型もしくはstruct Bのどちらかを受け取るということをしたかった。interfaceをちゃんと切ってそれに必要なメソッドをAとBに実装することで実現できることを知った上で、あまり丁寧にそういうことをせずにやりたい。 色々調べると、genericsを使うとできるようだ。 package main import "fmt" type A struct { Field1 int } type B struct { Field2 string } type AorB interface { A | B } func PrintAorB[T AorB](s T) { // Tで受け取ったものをそのままs.(type)とは出来ないので、一旦anyへキャスト switch v := any(s).(type) { case A: fmt.Println(v.

    Goで関数の引数に、union型っぽくstruct Aもしくはstruct Bのどちらかを受け取れるようにしたい - $shibayu36->blog;
    tjmtmmnk
    tjmtmmnk 2024/04/24
  • 業務アプリケーション開発にGoを採用する理由

    この記事は MICIN Advent Calendar 2022 の24日目の記事です。 前回は熊沢さんの2つの新規事業立ち上げで経験したタイプ別MVP検証の進め方でした。 はじめに 記事では、業務アプリケーションのバックエンドとしてGoを採用することによるメリットを、実際の業務経験を振り返りつつ考察してみます。 近年では多くの企業でGoが採用されています。その採用理由は、「並行処理をたくさん行いたいから」「学習コストが低いから」「フットプリントが小さくコンテナベースのプラットフォームに向いてるから」「Googleが使ってるから」「高速だから」といったところが挙げられるんじゃないでしょうか。 一方で、単なるモノリスなAPIとしてGoを選ぶ必要はないんじゃないのか、といった声もよく聞きます。「初期フェーズはスピード重視でRuby on Railsが最強だ」「枯れた技術であるJava + S

    業務アプリケーション開発にGoを採用する理由
  • Go の ORM / query builder 消耗日記

    自分が Go の Web アプリを触り始めてからそろそろ1年になる.会社的にはずっと Ruby on Rails を使っていて,新しいプロダクトをリリースするにあたり一部マイクロサービスで Go を使い始めて1年経った?それくらいの頃.サーバは gin で,ORMGORM だった. GORMGORM は 2018/08 現在で 9.7 k stars を集める超人気 ORM .ちょっと Ruby の activerecord っぽい API を持つクエリビルダを持ち,なぞのちからで Associations (has_many から, polymorphism 的なのまで)や Callback にも対応する. db.Where(&User{Name: "izumin5210"}).First(&user) // SELECT * FROM users WHERE name = "iz

    tjmtmmnk
    tjmtmmnk 2024/04/20
  • Goではどんなライブラリがデータベースにアクセスするときにベストか考える - ぷらすのブログ

    はじめに標準ライブラリの database/sql の役割を知るdatabase/sql に足りないものは?私がサードパーティのライブラリに求めるもの当に全ての SQL を書きたいのか?QueryExec3 つのライブラリを比較するsqlxgormgorpまとめこの記事は Go5 Advent Calendar 2019 の 1 日目の記事です。 はじめにGo のメジャーバージョンはいつの間にか 5 まで到達していたようですね、@p1assです。 Go でデータベースにアクセスするときに使うライブラリは database/sql や それをラップした sqlx , gorm , gorp など様々なライブラリがありますが、皆さんはどのライブラリを使っていますか? おそらく様々な理由があってどれか(ここに挙げられていないものかもしれない)を使っているでしょう。 しかし、それは当にベストな

    Goではどんなライブラリがデータベースにアクセスするときにベストか考える - ぷらすのブログ
    tjmtmmnk
    tjmtmmnk 2024/04/20