タグ

げん_Goに関するimaizmのブックマーク (82)

  • Go: A Documentary

    Go: A Documentary by Changkun Ou <changkun.de> (and many inputs from contributors) This document collects many interesting (publicly observable) issues, discussions, proposals, CLs, and talks from the Go development process, which intends to offer a comprehensive reference of the Go history. Disclaimer Most of the texts are written as subjective understanding based on public sources Factual and ty

  • Go言語のジェネリクス入門

    Go1.18は2022年3月にリリースされました。このリリースはGo言語へのジェネリクスの実装を含んでいます。 この記事ではできるだけ最新の仕様と用語法にもとづいてジェネリクスの言語仕様について解説していきます。 更新履歴 2024/01/03: Go1.21(2023-08-08)でcmpパッケージが標準ライブラリに追加されたことに対応しました。 2023/02/23: Go1.20(2023-02-01)のcomparableの仕様変更に対応しました。 次の関連資料があります: The Go Blog - All your comparable types Griesemer氏によるGo公式ブログです。 Go言語のBasic Interfaceはcomparableを満たすようになる(でも実装するようにはならない) 上記の内容に対する筆者の解説記事です。Go1.20リリース前に書いたの

    Go言語のジェネリクス入門
  • Goのテーブル駆動テストをわかりやすく書きたい

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

    Goのテーブル駆動テストをわかりやすく書きたい
  • Go製アプリケーションのコンテナ化にはkoを推したい - YAMAGUCHI::weblog

    はじめに こんにちは、Google Cloudでオブザーバビリティを担当しているものです。Cloud Operations suiteをよろしくおねがいします。(宣伝終わり) この記事はGo Advent Calendar 2021 その1の22日目の記事です。昨日は @sago35tk さんの「ESP32 向けに TinyGo をセットアップする」でした。TinyGoのコアな情報を日語で教えてくれるtakasagoさんには当にいつも感謝しています。 さて、今日はGo製のアプリケーションをdockerlessでコンテナ化できるkoの紹介をします。koは当にイチオシのツールで、みんなに使ってもらいたいのでぜひ使ってください。 github.com DockerによるGo製アプリのコンテナ化 まず最もポピュラーと思われるDockerを用いた場合のGo製アプリケーションのコンテナ化の方法に

    Go製アプリケーションのコンテナ化にはkoを推したい - YAMAGUCHI::weblog
  • Goのロギングライブラリ 2021年冬 - moriyoshiの日記

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

    Goのロギングライブラリ 2021年冬 - moriyoshiの日記
  • Go言語で基本的なCRUD操作を行うREST APIを作成 | DevelopersIO

    Javaエンジニアだった私がGo言語でREST APIを作る上で学んだことをまとめています。 プロジェクト構成、単体テスト、Dockerイメージの作成など実際にREST APIを開発する上で必要だと思われる要素を盛り込みつつサンプルプロジェクトを作成していきます。 はじめに Javaエンジニアだった私がGo言語でREST APIを作る上で学んだことをまとめています。 プロジェクト構成、単体テスト、Dockerイメージの作成など実際にREST APIを開発する上で必要だと思われる要素を盛り込みつつサンプルプロジェクトを作成していきます。 今回はできるだけ外部ライブラリやフレームワークを使わずにGo言語の標準機能のみで開発しました。 これからバックエンドにGo言語を使用することを検討されている方の参考になれば幸いです。 ※この記事は既にGo言語の開発環境をセットアップ済みで基的な文法を学

    Go言語で基本的なCRUD操作を行うREST APIを作成 | DevelopersIO
  • Goへのヘイトに対する考え方

    https://www.kbaba1001.com/entry/2021/09/17/073149 (該当記事が削除されました) RubyのサービスをGoで置き換えるのは3倍人手がかかる 何するにも機能不足 JSONの読み書きにわざわざ構造体書くの面倒 同僚がGoを選ぼうとしたら愚かな選択ですねと答える サーバーサイド開発にGoを使うのは危険 っぽい内容だったかと。 だいぶGoの特徴や既存の言語との考え方の違いが広まってきてるのかなぁと思っていた矢先だったので十年くらい前のような指摘をあえて今されていてびっくりした。 正直、ここに書かれたようなヘイト項目は既出すぎるので、もし影響の大きい項目を多くの人が同様に嫌っているならばGoはここまでの人気のある処理系になることはなかったと思う。(もしくは多くの人が嫌ってはいるが影響の小さい項目ということ) Goは出た当初、こういうヘイトが世界中のブロ

    Goへのヘイトに対する考え方
  • Deep Dive into The Go's Web Server

    Gonet/httpパッケージはとてもよくできており、Webサーバーを動かすのに必要になる「httpコネクションを確立してリクエストを読んでルーティングして……」という手続き的な処理を気にせずとも誰でも簡単にWebサーバーを立てられるようになっています。 ですが、そのnet/httpが代わりにやってくれている「裏側の処理」の部分が気になる、何やっているんだろう?と不思議に思っている方はいませんか? このでは、実際に筆者がnet/httpパッケージのソースコードを読み込んだうえで、「GoのWebサーバーがどのような仕組みで起動・動いているのか」というところについて、図を使いながら解説しています。

    Deep Dive into The Go's Web Server
  • 1ms 以下のリアルタイムオブジェクト検出/画像処理を目指して Goの配信サーバサイドで通知ぼかしを実装してみたこと - Mirrativ Tech Blog

    こんにちは ハタ です。 今回は以前iOSのクライアントサイドで実装していた通知ぼかし機能をサーバサイド(配信サーバ)上に再実装した事を書きたいなと思います 今回はかなり内容を絞りに絞ったのですが、長くなってしまいました、、 目次機能があったのでつけてみました、読み飛ばして読みやすくなった(?)かもしれません 目次 目次 通知ぼかし機能とは サーバサイド通知ぼかし プロトタイプの実装 苦労の始まり その1 画像処理速度 苦労の始まり その2 データ量 さらなる計算量の削減を求めて さらなる最適化へ Halide の世界へ 簡単な halide の紹介 苦労の始まり その3 いざ リリース リリースその後 We are hiring! 通知ぼかし機能とは 通知ぼかし機能は、ミラティブ上での配信中に写り込んでしまったiOSの通知ダイアログをダイアログの中身を見えないようにぼかし処理をしてあげる

    1ms 以下のリアルタイムオブジェクト検出/画像処理を目指して Goの配信サーバサイドで通知ぼかしを実装してみたこと - Mirrativ Tech Blog
  • よくわかるcontextの使い方

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

    よくわかるcontextの使い方
  • GoはいつGCするのか?

    TL;DR Go(のランタイム)は以下のタイミングで自動的にGCを実行する 前回のGC後に占有していたメモリと同量を新たに確保したとき 前回のGCから2分後 cgroupなどでメモリ制限しているときは、メモリ使用量が制限の50%以上になったらruntime.GC()を呼び手動でGCすべきである 前置き: GoとOOMのこれまで 以下はGo 1.16での調査結果です。Goのバージョンが異なった場合は事情が異なる可能性があります。 Goでプログラムを書く際に、使用メモリ量を気にしなければならないシーンはGCのおかげでそう多くはありません。実際それは間違いではないのですが、運用まで視野に入れるとそうは言ってられないことがあるのもまた現実です。昨今はコンテナの利用が当たり前になったことに伴い、OOMによりプロセスが強制的に終了させられることもあり、それを避けるために一定量以下のメモリで動くことが重

    GoはいつGCするのか?
  • 今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ

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

    今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ
  • GitHub - hajimehoshi/ebiten: Ebitengine - A dead simple 2D game engine for Go

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - hajimehoshi/ebiten: Ebitengine - A dead simple 2D game engine for Go
  • Go言語でゲームボーイアドバンスのエミュレータを作った話

    CPUはなんとARMのCPUを採用しています。(そのおかげでLLVMのターゲットに指定できる) ゲームボーイとの違い CPU 最大の違いはCPUです。ゲームボーイ(以降、GB)ではZ80を独自カスタムしたLR35902というCPUを使っていますが、このCPUは8bitで動作するCPUです。つまり命令のサイズが8bit(1byte)しかありません! しかも、LR35902は掛け算命令など現代のCPUでサポートしている基的な命令をサポートしていません。 これに比べてGBAに搭載されているARM7TDMIは32bit CPUです。つまり命令のサイズが4byteとGBの命令の4倍の大きさになります! このおかげでCPUの命令セットがさまざまな命令をサポートできるようになりました。(まあ後述の理由で実質16bit CPUですが...) またクロック数もGBの4MHzから16MHzに伸びました。 B

    Go言語でゲームボーイアドバンスのエミュレータを作った話
  • 社内でよく使う VSCode の機能紹介 - Techtouch Developers Blog

    テックタッチのバックエンドエンジニアの taisa です。 社内勉強会で、Visual Studio Code(以降 VSCode と記載)ナレッジ共有会を実施したのでその内容を紹介します。 今回の趣旨は「VSCode で各自がよく使う機能やショートカット、ちょっとしたノウハウを共有することで開発効率を向上させたい」というものです。自分自身 VSCode を使いこなせておらず、他のメンバーの使い方に興味がありました。共有会では、みんなで順番に画面共有しながら進めていきました。 コマンドパレット編 シンボル検索編 ショートカット編 最近開いたプロジェクトを開く 最近開いたファイルを開く / ファイルを検索する サイドバーを開く/ 閉じる、パネルを開く/ 閉じる、エクスプローラを開く 指定のエディタに移動する Grep する 特定の文字列を選択して置換する 定義へ移動、直前の場所に戻る、直前の

    社内でよく使う VSCode の機能紹介 - Techtouch Developers Blog
  • Go で使う Makefile の育て方

    Go を使ってプロダクトを作る時、Makefile を使ってビルドを指定することが多いです。 理由としては、 バージョン情報などを埋め込むのに都合がいい 複数のバイナリを吐き出す時に都合がいい Go のビルドオプションを指定するのにいろいろあって整理しておきたい 事前にコードジェネレータで書き出す部分があり、それを考えると Makefile などで整理したい などなどです。なので今回はプロジェクトが大きくなっていく中でどういう Makefile の書き方をしているか、というのをご紹介しようと思います。 サンプルとして、今回のプロジェクトでは gRPC を使ったチャットサービスのサーバーとクライアントを作ることにします。リポジトリは https://github.com/rosylilly/gochat に置いておきました。 Step 1. バージョン情報を埋める 今回はサーバーとクライアン

    Go で使う Makefile の育て方
  • Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)

    Go言語低レイヤー入門 Hello world が 画面に表示されるまで @DQNEO (ドキュネオ) Go Conference Tokyo 2021 2021-04-24

    Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)
  • Goから学ぶI/O

    GoにはI/Oに関わるパッケージが数多く存在します。io, os, bufio, fmtなどなど……。これらの立ち位置や、I/O実行の裏で何が起こっているのか当に理解していますか?このでは、この問への答えをまとめました。

    Goから学ぶI/O
  • Go の最初の手順 - Training

    プログラミング言語の学習に関心があるのに、どこから始めればよいかわからない場合は、 ここから始めましょう。 Go で単純なプログラムを構築するために必要な基的な構文と思考プロセスについて説明します。 このラーニング パスの内容は次のとおりです。 Go コードの最初の行を記述するために必要なツールをインストールします。 Go で制御フローを使用する方法について説明します。 Go でのデータ型について説明します。 エラーを処理する方法について説明します。 メソッドとインターフェイスを使用する Go での同時実行のしくみについて説明します。 プログラムを作成してテストします。

    Go の最初の手順 - Training
  • Goエラーハンドリング戦略

    Goのエラーハンドリングが採ったスタイル 多値返し 直積(関数の返値とエラーを両方返す) try-finallyをdeferという機構でカバー panicはプロセスを落とすためのもの Goはこの戦略でエラーハンドリングを行うとしましたので、「多値はなぜタプルじゃないんだ?」、「直和(返値orエラー)で十分じゃ?」「panic-recoverでtry-catchできそう?」などいう様な他の処理系の風習を持ち込むことは意味がありません。そしてそれらの提案の多くはすでに検討されリジェクトされてきた経緯があります。 「try組み込み関数」プロポーザルなんかも検討されマージ直前くらいまで進んだこともありますが、「Goのエラーハンドリング」にとって一長一短がありました。その欠点課題は解決できずに最終的にリジェクトされました。 「多値返し」は実にCPUフレンドリーな機構で、C言語の関数呼び出し規約にちょ

    Goエラーハンドリング戦略