タグ

goに関するtakashabeのブックマーク (55)

  • Goroutineの使い方

    この記事はGo 言語 Advent Calendar 2023のシリーズ2の4日目の記事です(穴があったので入りました!)。 goroutineの特徴 コルーチンをベースにコルーチンの以下の点を改良 言語組み込みワード「go」にて起動できる M:Nスレッドシステム採用によりマルチコア分散処理が可能 ブロッキングを検出したらネイティブスレッドが独立 プリエンプティブ性を追加(Go1.14以降) 以上により、goroutineスレッドシステムはコードを書く人にとって「ネイティブスレッド」の感覚で実装を書くことができ、「コルーチン」のようにメモリやタスクスイッチ負荷が小さく、「コルーチン」のような面倒な制約(期待するレイテンシ以上にCPUビジーにしてはいけないなど)も無いといういいとこどりのスレッドシステムになりました。 ネイティブスレッドライクによる特性 ネイティブスレッドを使ったプログラミン

    Goroutineの使い方
    takashabe
    takashabe 2023/12/06
  • Organizing a Go module - The Go Programming Language

    A common question developers new to Go have is “How do I organize my Go project?”, in terms of the layout of files and folders. The goal of this document is to provide some guidelines that will help answer this question. To make the most of this document, make sure you’re familiar with the basics of Go modules by reading the tutorial and managing module source. Go projects can include packages, co

    Organizing a Go module - The Go Programming Language
    takashabe
    takashabe 2023/09/22
  • 「Goらしさ」を追求するなら“タグ”を使え ライブラリを使って開発効率を上げる

    Go Conferenceは半年に1回行われるプログラミング言語Goに関するカンファレンスです。渋川氏は、タグを使ったGo開発について発表しました。全2回。後半は、実際にタグを使ってライブラリを実装する方法を紹介しました。前回はこちら。 タグを使うライブラリの実装する 渋川よしき氏(以下、渋川):タグを使うライブラリを実装するとGoのパワーを引き出せると思うので、ぜひみなさんにもやってもらいたいんですが、ここからはタグを使うライブラリを実際に実装してみます。 細かくするとけっこう退屈なセッションになってしまうので、実装のコードは飛ばしめに説明してきたんですが、実装となるとつまずきポイントもけっこうあると思うので、一応ひととおり動くサンプルコードを用意しました。実装するときはぜひ参考にしてもらえればと思います。 うちの会社が作った、「future-architect」というorganizat

    「Goらしさ」を追求するなら“タグ”を使え ライブラリを使って開発効率を上げる
    takashabe
    takashabe 2023/08/31
  • 無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ

    KanmuでPoolを開発しているhataです。最近、ロボット掃除機を買いました。ロボとがじゃれている景色はいいですね。 今回はGoのユニットテストの並行化についての記事です。 TL;DR Goのテストは、並行化することでテスト実行時間の短縮やテスト対象の脆弱性の発見などのメリットがある 基的にはそのままでも最適化されているが、テストコードにt.parallelを記述することでよりきめ細やかな最適化を施すことができる ただし、一定規模以上のアプリケーションへの導入・運用は大変 テストコードを一気に並行化するtparagenというツールや、並行化忘れを防ぐ静的解析ツールがあり、これらを使うことで無理なくテスト並行化の導入・運用ができる はじめに ユニットテスト並行化とは 記事では、「並行」「並列」という用語を使用します。記事におけるこれらの用語を定義します。 並行:複数の処理を独立に

    無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ
  • Goの単一メソッドインターフェースと関数型について - YAMAGUCHI::weblog

    はじめに こんにちは!!Google Cloudでオブザーバビリティを担当しているものです。年に一度のGoアドベントカレンダーの時期がやってきましたね!記事は Goアドベントカレンダー 2022 の12日目の記事です。昨日は @Maki_Daisuke さんの担当でした。 Goアドベントカレンダーもついに今年で10年目です!これまでに書いた記事を見るとなかなか懐かしいトピックがあったりしますね。 Go製アプリケーションのコンテナ化にはkoを推したい - YAMAGUCHI::weblog gopterでステートフルなPBT - YAMAGUCHI::weblog Goのハンズオン環境としてGlitchを使う - YAMAGUCHI::weblog golang.org/x/text/messageでI18N - YAMAGUCHI::weblog or-done-channelでコードの

    Goの単一メソッドインターフェースと関数型について - YAMAGUCHI::weblog
    takashabe
    takashabe 2022/12/21
  • A Guide to the Go Garbage Collector - The Go Programming Language

    Introduction This guide is intended to aid advanced Go users in better understanding their application costs by providing insights into the Go garbage collector. It also provides guidance on how Go users may use these insights to improve their applications' resource utilization. It does not assume any knowledge of garbage collection, but does assume familiarity with the Go programming language. Th

    A Guide to the Go Garbage Collector - The Go Programming Language
    takashabe
    takashabe 2022/07/13
  • An Introduction To Generics - The Go Programming Language

    The Go 1.18 release adds support for generics. Generics are the biggest change we’ve made to Go since the first open source release. In this article we’ll introduce the new language features. We won’t try to cover all the details, but we will hit all the important points. For a more detailed and much longer description, including many examples, see the proposal document. For a more precise descrip

    An Introduction To Generics - The Go Programming Language
    takashabe
    takashabe 2022/03/25
  • go/typesでgo moduleを有効にするまでの旅路 - 技術備忘記

    はじめに この記事はGo2 Advent Calendar 2021 23日目の記事です。 TL; DR; go/types で go moduleを有効にするためには golang.org/x/tools/go/packages を使う。以上。 pkg.go.dev godoc.org 旅のはじまり 日頃仕事DX(Developer Experienceの方)おじさんをやっている関係上、Code Generate ツールを書くことが結構ありまして、その際に go/types が便利なのでよく使っています。 AST は生で触ると結構大変ですが、このgo/typesパッケージを利用することで、あたかも reflection のような感覚で扱うことが出来ます。 例えば embedded は AST の鬼門ですが、go/types を使うと非常に楽ちんです。go/typesサイコー! 例えばこ

    go/typesでgo moduleを有効にするまでの旅路 - 技術備忘記
    takashabe
    takashabe 2021/12/23
  • Goのリリースプロセスとブランチ戦略 - YAMAGUCHI::weblog

    はじめに こんにちは!Google Cloudでオブザーバビリティの担当をしているものです。CVE-2021-44228のおかげでバタバタしていますがみなさんはお元気ですか? このエントリーはpyspa Advent Calendar 2021の15日目の記事です。昨日は @moriyoshit さんの「Goのロギングライブラリ 2021年冬」でした。めちゃめちゃ調べてあって良い記事でした。Goでログライブラリの選定をする際にはこちらをまず読むと良さそうです。 2021.12.21 追記: 穴が空いていたのでGo Advent Calendar 2021 その1の14日目の記事にもしました。 さて、今日は当は「Goならわかる確定申告第三表」という記事を書こうと思ったのですが、まだ確定申告の時期ではないのでそれは辞めにします。そのかわり、今日はGo 1.18がめでたくベータ版リリースとなっ

    Goのリリースプロセスとブランチ戦略 - YAMAGUCHI::weblog
  • OWASP/Go-SCPを読んでセキュアプログラミングとGoを学ぶ - My External Storage

    この記事はGo Advent Calendar 2019の4日目の記事になる。 3日目は@ikawahaさんの「Goa v3 のテストをシュッとする]」だった。 記事ではOpen Web Application Security Project(OWASP)が公開しているGo-SCPリポジトリを紹介する。 Webアプリケーションにはクロスサイトスクリプティング(XSS)やクロスサイトリクエストフォージェリ(CSRF)など、様々な脆弱性が潜む可能性がある。 脆弱性対策の書籍としては、体系的に学ぶ 安全なWebアプリケーションの作り方(徳丸)などが有名だろう。 Go-SCPリポジトリにはWebアプリケーションを実装する際に必要な脆弱性の知識と、Goを使った脆弱性対策の実装方法が含まれている。 https://github.com/OWASP/Go-SCP TL;DR OWASPというWEB

    OWASP/Go-SCPを読んでセキュアプログラミングとGoを学ぶ - My External Storage
  • gorp の クエリはテンプレートに書いたほうがわかりやすいと思いました。

    最近は主に TypeScript を書いてます。楽しいです。 という話は置いておきまして、gorpを使ったバックエンドのコードレビューしていたときに、 SQLがあちこちに散らばってしまい可読性が悪くなってるのを見かけました。 gorpでは生SQLをかけるのでSQLが短ければ直感的にわかりやすいというメリットはありますが、 結合や検索条件が複雑になるに連れコードは関数やファイルで分割されSQLはどんどん散り散りになっていきます。 私は十行足らずのSQLを表現するために数十行の Goのコードを書きたくありませんし、保守できる自信もありません。 前置きが長くなりましたが、表題の通り Go の標準テンプレート機能を使ってSQLを書いたほうが 直感的にわかりやすいだろうと思ったので、期待通りに動作するか検証してみます。 検証環境を作ったので手元で試したい人は Clone してください。 使い方は後述

    gorp の クエリはテンプレートに書いたほうがわかりやすいと思いました。
  • Goのioパッケージのメソッドを図示 - Carpe Diem

    概要 Goのioパッケージにはio.Reader、io.Writerのインタフェースを有効活用するため以下のような便利なメソッドが用意されています。 io.Copy io.Pipe io.MultiReader io.MultiWriter io.TeeReader しかし普段から使っていないと、これらメソッドの方が簡単にかけるのに忘れて遠回りな書き方をしがちです。 なのでイメージ化して覚えやすいようにします。 図示してみる ASCII.jp:低レベルアクセスへの入り口(3):io.Reader後編 (2/2) こちらを参考に図示します。 ポイントは以下です。 丸いコネクタが io.Reader の送受信 三角形のコネクタが io.Writer の送受信 データはすべて左から右に流れる 例えばos.Stdin、os.Stdoutはこうなります。 io.Copy io.Copyはio.Rea

  • research!rsc: Updating the Go Memory Model (Memory Models, Part 3)

    The current Go language memory model was written in 2009, with minor updates since. It is clear that there are at least a few details that we should add to the current memory model, among them an explicit endorsement of race detectors and a clear statement of how the APIs in sync/atomic synchronize programs. This post restates Go's overall philosophy and the current memory model and then outlines

    takashabe
    takashabe 2021/07/13
  • Go 1.16のsignal.NotifyContext() | フューチャー技術ブログ

    Go 1.16リリース記念連載の最終回はsignal.NotifyContext()です。 ご存知のように、Go 1.7でcontext.Contextが入ってから、少しずついろいろなAPIがContext対応になりました。 1.7 netのDialerがDialContext()メソッドを追加 net/httpのhttp.RequestがContext()とWithContext()メソッドを追加。 os/execがCommandContextを追加 1.8 database/sqlが大幅にcontext.Context対応を追加 net/httpのhttp.ServerがShutdown()を追加 netにcontext.Contextに対応したリゾルバーを追加 1.13 net/httpのNewRequestWithContextと、Request.Clone()が追加 外部へのネッ

    Go 1.16のsignal.NotifyContext() | フューチャー技術ブログ
  • GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々

    アプリケーションが発行するSQLにコメントが埋め込めると便利です。例えば、 /* path/to/logic.go:334 */ SELECT ... のようにSQLに発行元の情報をコメントとして埋め込んでからExecすれば、DB側のログ(general log等)にも記録されるため、SREやDREサイドからも、負荷の高いSQLがアプリケーションのどこから発行されているかが分かりやすくなります。 Goには github.com/shogo82148/go-sql-proxy という、SQL実行をトレースし、フック処理を差し込める便利なライブラリがありますが、今回それにpull requestを送って、SQL実行前にクエリの書き換えができるようにしました。 https://github.com/shogo82148/go-sql-proxy/pull/61 https://github.co

    GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々
    takashabe
    takashabe 2021/02/03
  • Go Language at 13 Years: Ecosystem, Evolution, and Future in Conversation with Steve Francia

    How to Use Multiple GitHub Accounts Git is a popular tool for version control in software development. It is not uncommon to use multiple Git accounts. Correctly configuring and switching Git accounts is challenging. In this article, we show what Git provides for account configuration, its limitations, and the solution to switch accounts automatically based on a project parent directory location.

    Go Language at 13 Years: Ecosystem, Evolution, and Future in Conversation with Steve Francia
    takashabe
    takashabe 2021/01/12
  • Goでひたすら運用を楽にするためのコード生成をする

    この記事は Go 2 Advent Calendar 2020 の25日目の記事です。 こんにちは、こんばんは。久しぶりにGoの記事を書いている kaneshin です。今年はフロントエンドをコーディングする機会が多かったためGoに触れる機会があまりありませんでしたが、人間がやるべきでない運用タスクを見掛けるとすぐにGoを用いてコード生成をしたくなります。 今までの経験では筋の悪いコード生成もふんだんに負債として残してきましたが、無かったら困ることも多かっただろうとポジティブに考えることにしています。 さて、今回はそのコード生成について難しく考えないでとりあえず書いてみようと思えるレベルで紹介しようと思います。 TL;DR記事中盤にGo公式のコード生成を一例にした画像があるので参照してください記事後半に簡易的なサンプルコードを作成したリンクを貼っているので参照してくださいこの記事のモチベー

    Goでひたすら運用を楽にするためのコード生成をする
    takashabe
    takashabe 2020/12/25
  • 今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ

    こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。 過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。 Go 言語公式のロゴもスピード感ありますね。 同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。 記事がどなたかの一助になりますと幸いです。 なお記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうりま

    今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ
    takashabe
    takashabe 2020/12/25
  • 【解説】開発ライブ実況 #1 (Vim / Go) 編 by メルペイ Architect チーム Backend エンジニア #mercari_codecast | メルカリエンジニアリング

    【解説】開発ライブ実況 #1 (Vim / Go) 編 by メルペイ Architect チーム Backend エンジニア #mercari_codecast Merpay Architect / Mercari Microservices Platform チームの伊藤です。この記事は Merpay Tech Openness Month の3日目の投稿となります。稿では、先日開催した開発ライブ実況のイベントで紹介した筆者の開発環境(Vim / Go)について、言語に依存しない「全般的な設定」と「Goの設定」の2つに大別して解説します。Vim に関する話題が多いですが、Go のために自作したツールについての解説はエディタに依存しないので、他のエディタを利用している方々もぜひご一読ください。 開発ライブ実況とは 「他人の開発風景を覗いてみよう!」というコンセプトのもとに弊社が開催して

    【解説】開発ライブ実況 #1 (Vim / Go) 編 by メルペイ Architect チーム Backend エンジニア #mercari_codecast | メルカリエンジニアリング
  • Dockerで最小のGoのイメージを作成する(cgo編) - Qiita

    「最小のNode.jsのDockerイメージを目指すスレ」、「JavaでもDockerでマルチステージビルド」というエントリーでは、Node.jsとJavaを使ったアプリケーションのイメージをなるべく小さくするトライアルをしました。 今度はGoでやってみます。ただし、Pure Goで最小というのはすでに方法があって、scratchという何も含まれないイメージを元に、静的リンクしたバイナリを配置するという方法です。 Building Minimal Docker Containers for Go Applications Goを使う場合に、一部cgoで使われたパッケージを利用したいこともあるでしょうし、雑にコマンドラインを利用することもあるだろう、ということで、今回も、できることを減らさずに(やりたいことにしたがって細かく作戦を微調整する必要がない)、なるべく小さく、という方針でいきたいと

    Dockerで最小のGoのイメージを作成する(cgo編) - Qiita