タグ

Goとgoに関するWatsonのブックマーク (260)

  • How We Saved 70K Cores Across 30 Mission-Critical Services (Large-Scale, Semi-Automated Go GC Tuning @Uber)

    How We Saved 70K Cores Across 30 Mission-Critical Services (Large-Scale, Semi-Automated Go GC Tuning @Uber) Introduction As part of Uber engineering’s wide efforts to reach profitability, recently our team was focused on reducing cost of compute capacity by improving efficiency. Some of the most impactful work was around GOGC optimization. In this blog we want to share our experience with a highly

    How We Saved 70K Cores Across 30 Mission-Critical Services (Large-Scale, Semi-Automated Go GC Tuning @Uber)
    Watson
    Watson 2022/01/14
  • Nintendo Switch™ ネイティブバイナリへの Go コンパイルを成功させた話

    記事は「Go Advent Calender」25 日目の投稿です。 Happy Holidays! EDIT (2022-01-03): There is an English version of this article. tl;dr いままでは Go プログラムを Nintendo Switch 上で動かすために WebAssembly に一度変換し、それを C++ に変換してコンパイルするということを行ってきました。今回、 Go の Nintendo Switch 向けネイティブコンパイルに成功し、実際に手元でゲームを動かすことができました。手法として、システムコール呼び出しを C の関数呼び出しに置き換えるように -overlay オプションを指定してビルドしました。また、 -overlay オプションに指定する JSON を生成するパッケージ Hitsumabushi を開

    Nintendo Switch™ ネイティブバイナリへの Go コンパイルを成功させた話
    Watson
    Watson 2021/12/25
  • 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 | フューチャー技術ブログ
    Watson
    Watson 2021/11/01
  • Hunting down a C memory leak in a Go program

    What it feels like when your app is leaking memoryIntroductionOver the last few years at Zendesk, both Go and Kafka have been increasingly growing in importance in our architecture. It was of course inevitable that they should meet, and so various teams have been writing Kafka consumers and producers in Go of late. There are a few different library options for building Kafka apps in Go, but we’ve

    Hunting down a C memory leak in a Go program
    Watson
    Watson 2021/10/16
  • Go言語が好きな理由

    はじめに 私はGoが好きなので、disられている場面に遭遇すると心が痛みます。残念ながらプログラミング言語について深く語れるほどの知識や経験は持ち合わせていないため、世界が平和になることを祈るくらいしかできません。 (元ネタ)Go言語を嫌う6個の理由 - さめたコーヒー それはそれとして、Goが好きな理由を語る人はあまり見かけない気がします。この記事ではGoが好きな理由を視覚に障害のあるユーザーの視点から語ります。読み終えたところで得るものは何もありませんし、長いので覚悟して読んでください。 あなたは誰? 4年ほど業務でサーバーサイドのGoを書いています。また、業務で使いはじめる前から趣味Goに触れていました。そのため無意識の内にひいきしているかもしれません。ただし、流行っているからといって理由もなくGoを勧めたりはしません。 視覚障害ならではのコーディング事情 Goが好きな理由と深く関

    Go言語が好きな理由
    Watson
    Watson 2021/09/24
  • Go言語を嫌う6個の理由 - さめたコーヒー

    ある仕事でそれまでRubyで書かれていたサーバーサイドをGo言語ですべて書き直すことになって、それまでRubyのコードを書いていた僕はそのままGo言語を書くことになった。その仕事そのものはお客様(僕は外部委託のエンジニアとして参画していた)との関係も良好で素晴らしい仕事をさせてもらうことができたと思っているが、Go言語だけは好きになれなかった。 はじめは流行っている言語だから何か素晴らしい魅力があるのではないかと期待していた。しかし書き始めるうちにどうも自分には合わないなと思うようになり、2年ほど書いて案件の契約が終わる頃にはGo言語でサーバーサイドを書くことは危険だとさえ思うようになった。 あれから数年がたちますますGo言語の案件は増えている。サーバーサイドを書く選択肢としてGo言語を選択する会社も増えている。しかし当にそれでいいのか?ただ流行っているからという理由だけで選択するにはあ

    Go言語を嫌う6個の理由 - さめたコーヒー
    Watson
    Watson 2021/09/18
  • 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するのか?
    Watson
    Watson 2021/07/21
  • ゲームエンジンはアートである - 8 年以上自作ゲームエンジンをメンテし続けている話|Hajime Hoshi

    自分は Ebiten という 2D ゲームエンジン (ゲームライブラリ) を趣味で開発しています。使用しているプログラミング言語は Go です。 2013 年 6 月に最初のコミットを行ったので、現在 8 周年の 9 年目です。 Ebiten は「くまのレストラン」などのモバイル及び Nintendo Switch 向けゲームで使われており、一定の実績があります。 ゲームエンジンの開発は一朝一夕では終わりません。UnityRPG ツクールといった既製品がある中、ゲームエンジンをわざわざ自作することは酔狂かもしれません。ではなぜそのようなことをしたのでしょうか。端的に言うと「ミニマムな API で実用的な 2D ゲームが作れるかどうか」ということを証明したかったのです。自分の美的感覚の追求です。この目的に気づいたのは割と最近のことです。やっていくうちに「自分がやりたかったのはこういうこ

    ゲームエンジンはアートである - 8 年以上自作ゲームエンジンをメンテし続けている話|Hajime Hoshi
    Watson
    Watson 2021/07/12
  • Reducing Memory Allocations in Golang

    Go’s place between C and Python in terms of abstraction and garbage collection memory management model has made it attractive to programmers looking for a fast but reasonably high level language. However, there is no free lunch. Go’s abstractions, especially with regards to allocation, come with a cost. This article will show ways to measure and reduce this cost. Measuring On posts about performan

    Watson
    Watson 2021/06/23
  • Goでの並行処理を徹底解剖!

    並行処理をうまく使うのは難易度が高めです。 それゆえに、go文とチャネルについて基的な文法書で知った後「並行処理ちゃんとできる!」の段階まで自力でたどり着くのは大変でしょう。 このは、 *「並行処理ってやって何が嬉しいの?」 *「ゴールーチンとかチャネルとかって一体何者?」 *「ゴールーチンやチャネルを使ったうまいコードの書き方が知りたい!」 *「Goランタイムで並行処理をどううまく処理しているか知りたい!」 といった要望にお答えする、「Goでの並行処理」に関連した事柄について網羅的・徹底的に書きまくったものです。

    Goでの並行処理を徹底解剖!
    Watson
    Watson 2021/06/19
  • Ebiten now supports Nintendo Switch™! - Ebitengine

    Thanks to the cooperation of Odencat Inc., Ebiten now officially supports Nintendo Switch™! Ebiten games written in Go will run on Nintendo Switch almost without modification. The tool is not open source. In order to develop for Nintendo Switch, you need to sign the developer agreement for Nintendo platform with Nintendo. For more information, please see Nintendo Developer Portal, the portal site

    Ebiten now supports Nintendo Switch™! - Ebitengine
    Watson
    Watson 2021/06/12
  • Go の最初の手順 - Training

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

    Go の最初の手順 - Training
    Watson
    Watson 2021/03/14
  • Go 1.16連載が始まります | フューチャー技術ブログ

    VSCodeも1.53でInsiderでない安定板もM1対応になりますし、GoLandもネイティブ版がリリースされました。Rosetta2でも快適だった環境はますます快適になっています。 それ以外だとlinux/riscv64対応が改良されていて、個人的には気になっています。 ランタイムの変化runtime/metricsパッケージが導入されました。runtimeとかdebugとかさまざまな場所に散っていったメトリックス収集機能が集約されました。今サポートしているのはGC関連のメトリックスと、メモリ関連のメトリックス、goroutine数ですね。 あとは、GODEBUG環境変数にinittrace=1を設定すると、各パッケージのinitで消費している時間やメモリの情報が標準出力に表示されます。Google App EngineやらCloud RunやらCloud FunctionsやらAW

    Go 1.16連載が始まります | フューチャー技術ブログ
    Watson
    Watson 2021/02/09
  • Goで開発した配信サーバーのメモリ使用量問題に向き合う - Mirrativ Tech Blog

    こんにちは。ストリーミングチームの松です。 Mirrativのストリーミングチームは、低遅延配信や、通知ぼかしというような機能を追加するため、配信のorigin serverの前段にtranscoder serverというものを導入してきました。 tech.mirrativ.stream tech.mirrativ.stream transcoder serverはGoによる内製のミドルウェアであり、主に映像の変換を行う目的で作られました。現在は配信プロトコルの変換(既存プロトコル -> 低遅延プロトコル)などを行っています。また、実際にはサーバー上のDockerコンテナ内で動作しています。 transcoder serverを展開していくにあたり、メモリ使用量が常に増え続ける問題が起きていたため、その際に直面したGoの実メモリ使用量に関する話を書きたいと思います。 メモリ使用量の増加問

    Goで開発した配信サーバーのメモリ使用量問題に向き合う - Mirrativ Tech Blog
    Watson
    Watson 2021/01/21
  • Go のGCのオーバーヘッドが高くなるケースと、その回避策 - Qiita

    Go のGCのオーバーヘッドについて GoのGarbage Collector (GC)の性能は非常に優秀で、オーバーヘッドが問題となることはあまりありません。ただヒープを非常に多く使っている場合、GCが多くのCPU時間を消費するケースがあります。 記事では、まずGoのGCの概要に触れ、その後GCオーバーヘッドが高くなるケース、そして回避策を検討します。 記事は下記記事を大きく参考にしています。素晴らしい記事に感謝いたします。 Avoiding high GC overhead with large heaps 注意点 単に pprof を取得し、GCが多くCPU時間を消費していた場合、必ずしも記事が扱う、ヒープの多さ依存の問題が原因とは限りません。 GoのGCは、直近のGCを行った結果生き残ったデータ量に対して、新たにアロケートしたデータの量が一定値を超えると実行されます。 1 こ

    Go のGCのオーバーヘッドが高くなるケースと、その回避策 - Qiita
    Watson
    Watson 2020/12/20
  • Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog

    すみません、ISUCONのアレに火がついてしまったので..。 Advent Calendarとはとくに関係がありません。 qiita.com qiita.com こちらの記事をみて、気になってしまったので interpolateParams の追加とMySQLチューニングをしてベンチマークを回してみました。 ベンチマークの環境が公開されているのは素晴らしいですね。 github.com 8vCPU/16GB Memのc5a.2xlargeなEC2のインスタンスを起動して、以下の手順にしたがってdockerdocker-composeをインストールしました。OSはUbuntu 20.04を使いました。 docs.docker.com docs.docker.com 上記のbenchmarkのrepositoryをgit cloneし、compose build && compose upし

    Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog
    Watson
    Watson 2020/12/17
    秘伝タレ
  • GoがApple Siliconにネイティブ対応したのでベンチマークをとってみました | フューチャー技術ブログ

    Goアドベントカレンダーその5です。 ARMなMacが出るとWWDCで発表されてから首を長くしてまっていて、発表と同時にMacBook Proを買って、アプリケーションのARMネイティブ対応がされているかいろいろインストールして試してみたりしています。まだ発売されて2週間足らずですが(といっても、みんな開発キットをつかって以前から準備したようですが)、動作しているアプリケーションは多いです。発売後にも、Erlang、Node.jsあたりはmasterブランチにパッチが入りました。Goも、昨日パッチがマージされました。 業務利用が多い言語のうちの一つということで、手元のPCで軽くベンチマークをとってみました。使った機種は3つです。 2020モデルのM1のMacBook Pro 2020モデルの10th Gen Core i5のMacBook Air Ryzen 9 4900HSのASUSのZ

    GoがApple Siliconにネイティブ対応したのでベンチマークをとってみました | フューチャー技術ブログ
    Watson
    Watson 2020/12/03
  • 他言語プログラマが最低限、気にすべきGoのネーミングルール

    概要 タイトルの通り、他言語から入門した人が最低限気にするべき、ネーミングルールをまとめました。 対象読者 Goの基構文を理解している人を対象読者としています。 この記事で説明すること、説明しないこと 説明すること Goのファイル名、変数名などの名前付けに関するルールや慣例などを説明します。 説明しないこと 名前付け以外で気をつけるべきGoの書き方[1] がいくつかあります。 しかし、それらに関してはこの記事では説明しません。 筆者のバックグラウンド プログラマ歴はもうすぐ8年程で、Goの他には以下のような言語の経験があります。 JavaScript TypeScript PHP Ruby Java Scala Goは少し前に書いて、一時期書かない時期が続いていましたが、最近また書いています。 トータルするとGoの経験は1年半程度です。 意識すべき名前付けルール package名 利用し

    他言語プログラマが最低限、気にすべきGoのネーミングルール
    Watson
    Watson 2020/11/16
  • 「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。稿は Merpay Tech Openness Month の11日目の記事です。 「プログラミング言語Go完全入門」の期間限定公開のお知らせでも書いたように、メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに8回開催し100人以上の方に参加していただきました。 また、Gopher道場の動画や資料はGopher道場 自習室として誰でも利用できるようになっており、現時点で300名以上の方が利用されています。 Gopher道場の資料のベースになっている「プログラミング言語Go完全入門」は、2020年7月31日までの限定公開になっていましたが、日より公開期限を撤廃し、完全公開することになりました。 また、日8月31日から始まる「Online Summer Int

    「プログラミング言語Go完全入門」の「完全」公開のお知らせ | メルカリエンジニアリング
    Watson
    Watson 2020/09/12
  • なぜDiscordはGoからRustへ移行するのか - MISONLN41's Blog

    DiscordGoで書かれていたコンポーネントをRustに移行しているらしい。Windowsの低レイヤ層の一部で採用されるなど、近年どんどん注目を集めているRustだが、DiscordはなぜRustを選んだのか。その最大の特徴である「パフォーマンスを妨げる要素であるGCを排した上でメモリセーフな言語」であることにクローズアップした面白い内容だったので、えっちらおっちら和訳してみた。英語が得意というわけでもなく、無理やり翻訳しているところも多いのであしからず。ほとんどGoogle翻訳のままというのは内緒。 追記: 7/31にはてブでいっぱいブックマークされたみたい。気になったブコメへの返信を末尾に追記した。 原文: Why Discord is switching from Go to Rust - Discord Blog Rustは様々な分野において第一級の言語になりつつあります。Di

    なぜDiscordはGoからRustへ移行するのか - MISONLN41's Blog
    Watson
    Watson 2020/08/01