並び順

ブックマーク数

期間指定

  • から
  • まで

321 - 360 件 / 2115件

新着順 人気順

GOの検索結果321 - 360 件 / 2115件

  • Compile SQL to type-safe code

    You write SQL queries You run sqlc to generate code that presents type-safe interfaces to those queries You write application code calling the methods sqlc generated. Seriously, it's that easy. You don't have to write any boilerplate SQL querying code ever again. See the current list of supported programming languages and databases. Schema updates and poorly-written queries often bring down produc

      Compile SQL to type-safe code
    • テストケースの名前には条件と結果を含めた方が良い - 感情を込める

      という考えにたどり着いたので、考えのスナップショットをとっておく。 Go言語における、テスト関数名とサブテストのname引数の値を「テストケースの名前」・「テスト名」と呼ぶことにしている。 (*testing.T).Run(name string, f func(t *testing.T)) bool テスト名に近いものとして、(*testing.T).Errorや(*testing.T).Logの引数がある。これらはテスト実行時の出力に含まれるが、テストケースを分かつものではない。あくまで、特定のテストケース内の情報を増やすものだ。対するテスト名は、(通常は)テストケースを分割できる最小単位である。 テストケースがテスト名の単位で存在するということは、テスト名はそのテストケースを十分に表現できていたほうがよいということだ。さもなくば、検証・変更しようとする仕様に対応するテストケースや、実

        テストケースの名前には条件と結果を含めた方が良い - 感情を込める
      • ECSとGoで構築したシステムにDatadogを導入する | おそらくはそれさえも平凡な日々

        追記: GoのアプリケーションをOpenMetricsを使ってObservableにする方法については別エントリを書きました。 → https://songmu.jp/riji/entry/2020-05-18-go-openmetrics.html ECSとGoで運用しているシステムに対するDatadogの日本語知見があまり無さそうだったので書いてみる。ちなみに以下の環境です。 ECS on EC2 (not Fargate) アプリケーションコンテナのネットワークモードはbridgeモード 動的ポートマッピングも利用 背景として3月にNature Remoのインフラアーキテクチャ改善をしていて、その前にもうちょっと監視を整えたほうが良いな、ということでDatadogを導入したのがある。テストがないとリファクタリングできないように、監視がないとアーキテクチャのアップデートもやりづらいとい

          ECSとGoで構築したシステムにDatadogを導入する | おそらくはそれさえも平凡な日々
        • プラットフォーム依存しない新しい「Docker Compose」 マルチコンテナをクラウドに簡単デプロイ | ログミーBusiness

          DockerCon 2021 にあわせて、ひさびさに開催された「Docker Meetup Tokyo」 DockerConの振り返りのほか、Docker 20.10の新機能や、大幅に新しくなったDocker Composeについてお知らせします。ゴリラ氏からは、Docker Composeの概要について発表がありました。 Docker CLIに梱包された新しいdocker composeゴリラ氏:「新しいDocker Compose」と題して発表します。よろしくお願いします。 軽く自己紹介をします。ゴリラと申します。好きなものはGo、Vim、Dockerとかで、最近はちょっとDenoにハマっています。趣味はVimのプラグインだったり、Goを使ったCLIだったり、開発が多いです。あとは興味がある分野の勉強だったり、記事を書いたりです。最近はジムに行っていて、ムキムキな体を目指しています。

            プラットフォーム依存しない新しい「Docker Compose」 マルチコンテナをクラウドに簡単デプロイ | ログミーBusiness
          • Ubie創業期にKotlinを導入した私が、社の技術選定の転換について思うこと|たろう

            Kotlinエバンジェリストとして、ガッカリしょんぼり…!? Ubieが、KotlinをやめてGoとNode.jsへの転換を決定したことについて、私がこれをどう受け止めたのか… こんにちは。私はたろうと言います。 Ubie株式会社 Ubie Discoveryに勤めるソフトウェアエンジニアです。 業務外では、Kotlinエバンジェリストとして講演や執筆を行なったり、技術カンファレンス「Kotlin Fest」の運営代表を務めたりしています。 先日「Ubie は Go と Node.js の会社になります」という記事が、同じくUbie Discoveryのyukuというソフトウェアエンジニアにより発信されました。 新しいアプリケーションを立ち上げる際には、その役割に応じてGoで書くかNode.jsで書くかの2択となり、今後はKotlinを使わない。記事の内容を噛み砕くと、そんな感じです。 私

              Ubie創業期にKotlinを導入した私が、社の技術選定の転換について思うこと|たろう
            • Go公式のlinter、Golintが非推奨になった

              Goが公式で出していたGolintがdeprecated/frozenしました。 メンテがされていない 2018年から実質的な変更が加わってない Issueも放置されているものが多い golang orgに存在するlinterなのでGoが公式として推奨しているlinterに見える Go が実際には保守されていないプログラムを公式として推奨しているように見えてしまう 開発者は合理的に異なるスタイルを採用したい場合がある Golint単体で特定の警告を無視したりするなどの機能を持っていない ということからattractive nuisance(魅力的な迷惑者)になっているというProposalでした。 Issueの議論を見てもdeprecate/frozenすることに対して否定的な意見は少なく、一年ほど前にapproveされました。(なので「非推奨にしよう」なったの自体は少し前の話です) そし

                Go公式のlinter、Golintが非推奨になった
              • レコメンドへの大規模アクセスを支えるGo製サーバーの裏側

                CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again

                  レコメンドへの大規模アクセスを支えるGo製サーバーの裏側
                • Goのテストに入門してみよう! | フューチャー技術ブログ

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

                    Goのテストに入門してみよう! | フューチャー技術ブログ
                  • スキーマファースト開発のためのOpenAPI(Swagger)設計規約 | フューチャー技術ブログ

                    はじめまして。TIG DXユニット 1の亀井です。 はじめに みなさん、Swagger使ってますか? Swaggerや周辺ツールについては 某先輩の記事 にて丁寧に解説されていますので、 本記事では実際にSwaggerのスキーマ定義を設計していく上で取り決めた規約について書いてみたいと思います。 前提私が在籍しているプロジェクトでは、REST APIは golang でフロントエンドを Vue.js + TypeScript で構築しています。 短期間・高品質での構築を実現するためにSwaggerを設計ドキュメントとしてだけではなく、コード自動生成やモックサーバーに活用させることで徹底したスキーマファーストな開発を行ってきました。 というわけで、今回は下記のツールを利用することを前提として規約を作成しています。 go-swagger: Goアプリケーションのハンドラ、リクエスト/レスポンス

                      スキーマファースト開発のためのOpenAPI(Swagger)設計規約 | フューチャー技術ブログ
                    • Go、Rust、Pythonで実装したAPIサーバーの負荷試験比較 - Qiita

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

                        Go、Rust、Pythonで実装したAPIサーバーの負荷試験比較 - Qiita
                      • Go言語がGenericsを導入、過去最大の変更となる「Go 1.18」正式版リリース

                        Googleが中心となってオープンソースで開発されているGo言語の最新版となる「Go 1.18」正式版がリリースされました。 Go go1.18 is released! Release notes: https://t.co/UFumhMjcOL Download: https://t.co/fnDCVVhJXK#golang pic.twitter.com/uWNSy5V7nv — Go (@golang) March 15, 2022 ブログ「Go 1.18 is released!」によると、Go 1.18は、「massive release that includes new features, performance improvements, and our biggest change ever to the language.」(新機能、性能改善、そして過去最大の変更の変

                          Go言語がGenericsを導入、過去最大の変更となる「Go 1.18」正式版リリース
                        • gRPCのGo実装の新星、Connect | フューチャー技術ブログ

                          サービス間通信とIDL(インタフェース記述言語)連載の2日目のエントリーです。 本当はGraphQLネイティブなデータベースの紹介をしようとしたのですが、紹介しようとしていたものがまだベータでクライアントライブラリが公開されていない(空っぽのリポジトリしかない)みたいな感じで試せなかったので、急遽2022/6/1に公開されたばかりのgRPC関連のライブラリのConnectを紹介することにしました。 Connectの開発元が公開したブログは次のサイトにあります。 Buf | Connect: A better gRPC 公式ドキュメントはこちらです。 Introduction | Connect なお、gRPCについての詳細はこのエントリーでは紹介しません。ちょうど、H.SakiさんがgRPCの詳しい紹介の記事を書いてくれているので、ぜひ、みなさんこちらを参照ください。 作ってわかる! はじ

                          • Go 脱初心者への道

                            最近、 Go の学習を始めました。入門書や 公式のチュートリアル を終えてもなかなか解らないことをまとめてみました。 1. パッケージ作成・パッケージ管理 1. a. ディレクトリ構成は非公式ながら標準と目されるものがある(らしい) Standard Go Project Layout /cmd にmainのアプリケーションのソースを置きます。 /pkg にライブラリのソースを置きます。 /src にソースを置いてはいけません。 なお、このディレクトリ構成は go コマンド(go build 等)がデフォルトで認識するディレクトリ (/src , /pkg , /bin) とは全く異なるので注意が必要です。 2021-05-24 追記 このレイアウトは殆ど普及していないとのこと。また、リポジトリ名が「標準」を名乗るのは誤解を招くとのissueも挙がっています。 個人的な意見として、ライブラ

                              Go 脱初心者への道
                            • Goのテーブル駆動テストをわかりやすく書きたい

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

                                Goのテーブル駆動テストをわかりやすく書きたい
                              • Go Optimization Guide

                                Patterns and Techniques for Writing High-Performance Applications with Go¶ The Go App Optimization Guide is a collection of technical articles aimed at helping developers write faster, more efficient Go applications. Whether you're building high-throughput APIs, microservices, or distributed systems, this series offers practical patterns, real-world use cases, and low-level performance insights to

                                • スプレッドシートの内容を GitHub のリポジトリに自動的に同期する仕組みを作った

                                  [{ "teamName": "チームA", "players": ["Aさん", "Bさん", "Cさん", "Dさん"] }] スプレッドシートの内容を Node.js で取得 スプレッドシートの内容を Node.js で取得するために @googleapis/sheets を使用しました。 認証情報は Application Default Credentials (以下 ADC) が設定されていることを前提にしました。事前に認証情報に紐付いているメールアドレスに対して、スプレッドシートを閲覧できる権限を与えておく必要があります。 これにより以下のコードでスプレッドシートの内容を取得することができます。 const sheetId = ""; const auth = new GoogleAuth({ scopes: [ "https://www.googleapis.com/aut

                                    スプレッドシートの内容を GitHub のリポジトリに自動的に同期する仕組みを作った
                                  • Goのプロジェクト構成について

                                    Go のコミュニティーで昔から話題になっているテーマだと思いますので、自分なりの考えを共有したいと思います。プロジェクトの内容によって構成などはかなり違ってくると思いますが、ここでは DDD を使ったWebサーバーについて紹介します。よくあるユースケースではないかと思います。 フィードバックやコメントなど大歓迎です!意見交換もしていきたいです! ファイルとネームスペース Go ではプロジェクト構成がそのままネームスペースになります。不便だと思う方もいるかも知れませんが、僕は非常に使いやすいと思っています。他の言語ではしばしば、プロジェクトの構成をすでに大まかに決めているか、もしくはコードを書く前に決めるようにすることが基本だったりします。しかし、Go ではコードを書きながらプロジェクトの構成、パッケージの追加・削除を行うことが一般的です。 よくインターネットで Go の初心者が、「プロジェ

                                      Goのプロジェクト構成について
                                    • Goでモンキーパッチするライブラリを作った - Plan 9とGo言語のブログ

                                      Goで単体テストを実装する場合、動的な言語のように「テスト実行中に外部への依存を置き換える」といったことはできません。代わりに、 外部への依存を引数で渡す 外部への依存をインターフェイスで渡す のように、テスト対象をテスト可能な実装に変更しておき、テストの時は外部への依存をモック等に置き換えて実行する場合が多いのではないかと思います。 個人的な体験でいえば、テスト可能な実装に置き換えていく過程で設計が洗練されていく*1ことは度々あるので、面倒を強制されているというよりは設計を整理するための道具といった捉え方をしているのですが、そうは言っても動的な言語に比べると面倒だなと感じるときは少なからずあります。既存の実装がテスト可能になっておらず、変更するコストが高い場合は特にそうですね。 そんなとき、気軽にモンキーパッチできると嬉しいんじゃないかと思って、テストの時だけ関数を置き換えられるようなラ

                                        Goでモンキーパッチするライブラリを作った - Plan 9とGo言語のブログ
                                      • RustのgRPCがGoよりも遅い?

                                        夏のある日、GoのgRPCが、Rustよりも2倍早いという記事を見つけました。「おいおい、測定ミスだろ」と強がっていましたが、日々、不安は高まっていきます。真実の愛であれば、疑うことは許されませんが、エンジニアの言語への愛など、所詮、状況に応じて使い分けるような打算的な愛。確認してみました。 性能測定結果上記の記事と同じく、gRPCのサーバソフトウェアは、Goはgrpc-go、Rustはtonicのgreeterの性能を、gRPCのクライアントソフトウェアghzを使って、測定しました。ハードウェアは、AWSを利用し、サーバはc5a.8xlarge(32 vCPU/64 GiB)インスタンス、クライアントはc5a.16xlarge(64 vCPU/128 GiB)インスタンスを使いました。 1台のクライアントインスタンスは、同時に3,000個のgRPCクライアントを立ち上げ、合計で6,000

                                          RustのgRPCがGoよりも遅い?
                                        • Golang GenericsでREST APIを作る - Nature Engineering Blog

                                          Go 1.18が出てしばらく経ちました。みなさんGenerics使っていますか? @maaashです。 これは Nature Engineering Blog祭 の2日目の記事です。 祭り 最初は歓喜し、mapやfilter的なfor文を少しずつgithub.com/samber/loに切り替えたり、 internalなsliceパッケージを作ってみたり。 ですが心のどこかで欲求不満が蓄積されていくのを感じていました。 使い尽くしていないのでその真価が理解できていなくて物足りないような、 こんなに面白いおもちゃが与えられたのに遊び尽くしていないような感覚です。 Genericsを使ったコードを書きたい!と思いながら日々の業務でREST APIを書いていると、、 あれ、これはかの When To Use Genericsの結論にある: If you find yourself writing

                                            Golang GenericsでREST APIを作る - Nature Engineering Blog
                                          • Go1.21から導入された Go Toolchainの仕組みをまるっと解説

                                            2023/8/9にリリースされたGo1.21 新たに導入されたツールチェーン(Go Toolchains) 次の内容を知ってもらい、Toolchainを使いこなせるようになること ・導入が必要となった背景 ・導入で期待されること ・具体的にはどう使うのか ・どんな挙動なのか

                                              Go1.21から導入された Go Toolchainの仕組みをまるっと解説
                                            • ぼくのかんがえたさいきょうのGo HTTPサーバー起動方法

                                              これまで何度か HTTP Server の Graceful Shutdown について記事を書きました。 Go 言語で Graceful Restart をする Go 言語で Graceful Restart をするときに取りこぼしを少なくする Go1.8 の Graceful Shutdown と go-gracedown の対応 最終的に Go 1.8 で Server.Shutdown が導入され、この件は解決を見ました。 しかし、最近「あれ?本当に正しく Server.Shutdown 使えている?」と疑問に思い、少し考えてみました。 というか ↑ の記事もまだ考慮が足りない気がする。 ぼくのかんがえたさいきょうの Go HTTP サーバー起動方法 とりあえず完成形のコード。 package main import ( "context" "log" "net/http" "os

                                              • Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ

                                                技術記事です。今日は Go の golang.org/x/sync/errgroup についてです。 TL; DR Go が並行処理を得意とするのは事実だけど、とはいえ正しく使うのは難しい(特に channel)。 errgroup なら「並行でダウンロードする」のような頻出パターンをとても簡単かつ安全に使えるので、まずはこれで美味しいところだけ頂いてしまおう。 重い処理を並行にすればあなたのプログラムはカジュアルに数倍速くなる。 多分 errgroup だけで現実の要件の85%くらいはカバーできるはず。 channel も含めてちゃんと使いこなしたいと思ったら、Go 言語による並行処理 がおすすめです。 errgroup とは ドキュメントはここを参照してください。説明を読むよりコード例で見たほうが早いと思うのでこちらをどうぞ。 package main import ( "fmt" "

                                                  Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ
                                                • GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ

                                                  2023.10.5追記: Goチームからプロジェクトの目的に応じたディレクトリ構造についてのドキュメントが公式に公開されています。 https://go.dev/doc/modules/layout 2020/11/13 「やってみてよかったことまとめ」「やってみて困ったこと」「外部モックサービスを使ったユニットテストの未来」の章を追記 2020/11/18 「やってみてよかったことまとめ」にSNSでもらったフィードバック内容を追記 はじめにこんにちは、TIG 真野です。秋のブログ週間連載の第9弾です。 1年弱ほどGo言語でWeb APIアプリケーション開発を行っていますが、かなり割り切った構成・テスト方針を採用しました。そろそろ1年弱になり機能開発も比較的落ち着き、保守運用フェーズの割合も徐々に増えてきた頃合いなので、やったこと・学び・反省といった振り返りを共有します。 Goのパッケージ

                                                    GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ
                                                  • 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 で良い感じに動かすメモ
                                                    • SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ

                                                      TIGの辻です。GoのORマッパー連載8日目です。本記事では sqlc を紹介します。早速ですが、結論から行きましょう。 sqlc まとめ SQLファイルからデータベースにアクセスできる型安全なGoのコードを生成するライブラリ 構造体のモデルの手書き実装不要 複数テーブルをJOINしたときのマッパー実装不要 生成されるコードは不要なリフレクションなし SQLをがんがん書きたい、でも面倒なマッパー構造体は書きたくない、という開発者にとっては大きな味方になります。 sqlc の紹介 sqlc はSQLファイルからGoのアプリケーションコードを生成するライブラリです。2020/2に v1.0.0 をリリースし、着々とスターを伸ばしています。2021/08現在は v1.8.0 をリリースしています。本資料で生成しているコードも v1.8.0 を用いています。 https://star-histor

                                                        SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ
                                                      • Raft + Redis な内製Redisサーバの紹介 - Mirrativ Tech Blog

                                                        こんにちは ハタ です。 Mirrativのインフラ内で実際に開発・運用している内製のRedisサーバについてお話したいなと思っています。 前回の記事 は、今回紹介する内製Redisサーバで起きたメモリリーク対策に関するお話しとなっておりますので、もし未読であればあわせて読んでいただければと思います。 今回はなぜ Redis サーバを内製することにしたのかの経緯や実装についての簡単な紹介が出来たらなと思っています Redis 導入の経緯 課題感: 揮発しないでほしい 課題感: 生存時間が短いデータを保持したい 課題感: 日次データをなんとかしたい 候補 Redis Cluster のヨシアシ: slot 管理 Dynomite のヨシアシ: sharding/replication radisha = Raft + Redis + HA Raft クラスタ コマンドとデータストア レプリケ

                                                          Raft + Redis な内製Redisサーバの紹介 - Mirrativ Tech Blog
                                                        • Electron代替を目指す軽量なフレームワーク「Tauri v2」β版リリース。iOS/Android対応など

                                                          JavaScriptとHTML/CSSを用いてアプリケーションを構築できるElectronの代替を目指し、より軽量なRust製のフレームワークとして開発されている「Tauri v2」のβ版がリリースされました。 iOS/Androidモバイル対応 TauriはこれまでWindows、Mac、Linuxに対応したデスクトップ版が2022年6月にバージョン1.0としてリリースされていますが、iOSとAndroidに対応したモバイル対応は正式版となっていませんでした。 Tauri v2ではWindows、Mac、Linuxに加えてモバイル版としてAndroidとiOSに対応することで、デスクトップ版のアプリケーションからモバイル版への移植をスムーズに行えるようになります。 また、モバイルOSで提供されている通知機能、NFC対応、生体認証、バーコードの読み取り、クリップボードなどのAPIにもアクセ

                                                            Electron代替を目指す軽量なフレームワーク「Tauri v2」β版リリース。iOS/Android対応など
                                                          • Go の入力バリデーションパッケージ ozzo-validation を試した。

                                                            はじめに Go のウェブアプリで使う入力バリデーションに関して、ozzo-validation を検討した。 これまでのバリデーション 普段、仕事では labstack/echo という Go のウェブフレームワークを使う事が多いのだけど、バリデーションに関しては labstack/echo のサンプルに合わせて go-playground/validator を使ってきた。 go-playground/validator は機能も豊富で(一応)痒い所に手は届くのだけど、struct にタグを付けて判定させないといけない。これが実に煩わしい。以前 labstack/echo を使ったサンプルを書いたので、それを見て欲しい。 // Comment is a struct to hold unit of request and response. type Comment struct { I

                                                              Go の入力バリデーションパッケージ ozzo-validation を試した。
                                                            • Go言語でポータブルなCI/CDパイプラインが定義可能に。「Dagger」がGo SDKを発表

                                                              CI/CDパイプラインをポータブルにする「Dagger」をGo言語に対応させる「Go SDK」が発表されました。これによりGo言語でどこでも動くポータブルなCI/CDパイプラインの定義が可能になります。 Introducing the Dagger Go SDK: a new way to develop your CI/CD pipelines as code, and run them in containers anywhere. https://t.co/7riHAwUSMO pic.twitter.com/mEwrZySbLp — dagger (@dagger_io) October 25, 2022 CI/CDがローカルPCでもGitHubでもCircleCIでも実行可能 Daggerはソフトウェアのビルド、テスト、デプロイを行う一連のCI/CDパイプラインをポータブルにする

                                                                Go言語でポータブルなCI/CDパイプラインが定義可能に。「Dagger」がGo SDKを発表
                                                              • Go 言語でスライスから要素を消すには

                                                                の様に直感的な操作ができるはずです。しかし Go 言語の場合、スライスの伸長にて発生するメモリアロケーションを append 関数と代入を使う事で透過的に行える仕組みを採用しています。例えばスライスの伸長は この様に行います。C言語をかじった事のある方や、プログラミング言語の内部データ構造をご存じの方であれば、リストといった物が伸長の度にメモリを再確保する様な事をやっていない事はご存じだと思います。Go 言語のスライスも同様で、スライスには長さとキャパシティを持っており、キャパシティを超えない範囲で長さだけが増えていき、キャパシティを超えるとメモリが再確保されるという作りになっています。ですので、上記のコードであれば、スライス(実際は SliceHeader)が内部で持っているポインタ、長さ、キャパシティを、代入してやる事で上書きしています。 スライスから要素を消す スライスの伸長と同様に

                                                                  Go 言語でスライスから要素を消すには
                                                                • GoとKinesis Data Firehoseで非同期の検索基盤を構築─モノリス化した「カオナビ」はアーキテクチャ改善にどう取り組み始めたか - はてなニュース

                                                                  社員の個性・才能を発掘し、戦略人事を加速させるタレントマネジメントシステム「カオナビ」を提供する株式会社カオナビでは、SaaS移行にあわせてクラウドを全面的に採用し、インフラの自動化などにAWSのマネージドサービスを積極活用しています。とはいえ10年近い運用で、サービス開発におけるシステムのモノリス化が課題となってきました。 こういった全社的な課題は、2020年からCTOを務める松下雅和(@matsukaz)さんを中心にCTO室で対応しています。モノリスなシステムは、全体のモジュラモノリス化を前提に、とくにボトルネックとなる検索処理を非同期の基盤サービスとして切り出しています。 この検索基盤の設計と実装を通して、カオナビはシステムのアーキテクチャ改善をどのように進めようとしているのか。非同期である必要性や、デプロイの工夫、開発組織の文化まで含めて、CTO室の千葉峻秀さんとインフラグループの

                                                                    GoとKinesis Data Firehoseで非同期の検索基盤を構築─モノリス化した「カオナビ」はアーキテクチャ改善にどう取り組み始めたか - はてなニュース
                                                                  • 効率的なGo

                                                                    本書は、Goアプリケーションの効率やスケーリングに関する疑問に対して、実用的な答えを与えてくれる書籍です。 レイテンシー、CPU、メモリ資源についての知識、またOSやGoがそれらを抽象化している方法について、またソフトウェアの効率に関わるデータ駆動な意思決定を行う事の意味や、計算量解析の手法、最適化状況の例など、実用的なソフトウェアを開発する中での「効率」に関する知識を紹介します。 Goやその他のモダンな言語で書かれたプログラムを設計、作成、変更するソフトウェア開発者、また誰かが書いたソフトウェアを主に運用するDevOpsエンジニア、SRE、シスアド、プラットフォームチームなどの読者が、いつ、どのように効率最適化を適用するかという問いに答えるための知識を身に付けることができるでしょう。 関連ファイル 原著者による本書のサンプルリポジトリ 正誤表 ここで紹介する正誤表には、書籍発行後に気づい

                                                                      効率的なGo
                                                                    • go.modとgo.sumの読み方

                                                                      go.mod 主にモジュールのインポートパスとバージョン情報を書いておくためのファイルで、いくつかのディレクティブを使ってアプリケーションがどのような依存関係を持っているか記述しておきます。 go mod tidy等を実行するとこのファイルを元に依存先を取得し次項で解説するgo.sumを生成します。 サンプル module github.com/ryo-yamaoka/sample-lib go 1.17 require github.com/ryo-yamaoka/direct-dependent-lib v0.0.2 require github.com/ryo-yamaoka/indirect-dependent-lib v0.0.4 // indirect exclude github.com/ryo-yamaoka/direct-dependent-lib v0.0.1 repl

                                                                        go.modとgo.sumの読み方
                                                                      • 🪵 Go1.21 log/slogパッケージ超入門

                                                                        はじめに 2023年8月9日(日本の場合)Go1.21がリリースされました🎉。Go1.21ではさまざまな変更点や追加機能が加わります。その中でもGo標準ライブラリに導入される構造化ロギングパッケージlog/slog(以下、slog)を楽しみにしている方は多いのではないでしょうか? 本稿では、slogを実際に触りつつ、機能の解説をしていきます。 TL;DR 本稿の概要をスライドにもまとめているので、ご参考にして下さい。 従来のlogパッケージについて slogの説明に入る前に、Go標準のlogパッケージについて簡単に紹介する。logパッケージを用いると、 io.Writer インターフェースを実装する任意の型にログメッセージを書き込むことができる。しかし以下のような制限があった。 ログレベルをサポートしていない ログレベルはほとんどのログパッケージの定番機能の一つだが、logパッケージには

                                                                          🪵 Go1.21 log/slogパッケージ超入門
                                                                        • Re: Goでcsvを操作するための基本的な知識

                                                                          はじめに Println で標準出力してみると以下のように表示されるかと思います。(SHIFT-JIS形式なのでmacでみると文字化けしていますがひとまず置いておきます) 日本では一般的に CSV ファイルは Shift_JIS でエンコードされている事が多いです。Go 言語は内部のエンコーディングが UTF-8 なので、Shift_JIS な CSV ファイルを読み込むと文字化けします。 そこで便利なのが エンコーディングの変換は golang.org/x/text/transform が便利です。このパッケージと、golang.org/x/text/encoding/japanese を使う事で、os.Open で開いたファイルがさも初めから UTF-8 であるかの様に扱う事ができます。 どんな風に扱うか japanese パッケージには japanese.ShiftJIS や jap

                                                                            Re: Goでcsvを操作するための基本的な知識
                                                                          • Go と prisma と lit-html と ky で作るモダンな TODO アプリ

                                                                            はじめに 以前から Go の ORM (Object Relational Mapping) 選定の為に、そこそこ時間を使っています。現状は gorp を使っていますが、満足している訳ではありません。 そんな中で見つけた prisma を試すべく、バックエンドに Go と prisma を使った TODO アプリを作ってみる事にしました。 prisma とは prisma (Next-generation ORM for Node.js and TypeScript)は簡単に言うと 自動生成された型付きのクライアントが付いている マイグレーションが出来る モデル定義から CRUD やインデックスを自動生成できる PostgreSQL, MySQL, SQLite3 等をサポート Prisma Studio という GUI が付いている というモダンな ORM です。Nuxt と TypeS

                                                                              Go と prisma と lit-html と ky で作るモダンな TODO アプリ
                                                                            • Why Go? · microsoft/typescript-go · Discussion #411

                                                                              Language choice is always a hot topic! We extensively evaluated many language options, both recently and in prior investigations. We also considered hybrid approaches where certain components could be written in a native language, while keeping core typechecking algorithms in JavaScript. We wrote multiple prototypes experimenting with different data representations in different languages, and did

                                                                                Why Go? · microsoft/typescript-go · Discussion #411
                                                                              • Go製アプリケーション/ライブラリにおけるメンテナンス性を重視したGoのバージョン管理戦略 - Diary of a Perpetual Student

                                                                                2024-08-28 GOTOOLCHAIN=auto時にはtoolchainディレクティブに指定したものより新しいGoがインストールされていても戻るわけではないという話を追記しました。 Go言語では半年に1回メジャーリリース(マイナーバージョンの更新)がやってきます。ちょうどこの8月にGo 1.23がリリースされたばかりです。Go言語のメジャーリリースは最新2つ分までサポートされるポリシーであることがhttps://go.dev/doc/devel/releaseに書かれています。現在であればGo 1.23やGo 1.22はサポートされており、Go 1.21はサポートが切れているということです。 また、サポートされているバージョンでは、不定期でマイナーリリース(パッチバージョンの更新)がやってきます。バグ修正や脆弱性対応がメインですね。 Goがリリースされると、Goでアプリケーションを作

                                                                                  Go製アプリケーション/ライブラリにおけるメンテナンス性を重視したGoのバージョン管理戦略 - Diary of a Perpetual Student
                                                                                • gojqのパーサーを書き直しました - プログラムモグモグ

                                                                                  jqはJSONを絞り込むツールですが、実はれっきとしたプログラミング言語です。 算術演算子、論理演算子、分岐構文、try・catch、そして関数定義があり、ループは再帰関数で実装します。 単に .foo とか .[0] とかでJSONを辿るだけのツールだと思われている方は、builtin関数の定義を見ていただくと良いかと思います。 selectやmapのように、よく使われる関数でさえ内部実装になっていない (Cで書かれていない) のは面白いですね。 jqのクエリを思ったように書けないという経験から、jqをより深く知るためにGo言語で再実装したのがgojqです。 去年の4月から開発を始め、8月にブログ記事を書きました。 jqのほぼすべての機能を実装しており、pure Goで書かれているのでGo言語のツールに簡単に組み込むことができます。 この記事公開以降も開発を続けています。 --arg,

                                                                                    gojqのパーサーを書き直しました - プログラムモグモグ

                                                                                  新着記事