タグ

goに関するMonMonMonのブックマーク (157)

  • なぜ Go ではロガーをコンストラクタ DI してはならないのか

    問題のある実装パターン 共通実装 以下のような applog パッケージ上のロガー実装を考えましょう。ここでは Go 標準の log.Logger をラップしていますが,様々な実装に拡張できることを想定しています。 package applog import ( "fmt" "log" "os" ) type Logger interface { Info(message string) Error(message string) } func NewLogger() Logger { return &logger{ inner: log.New(os.Stdout, "", log.LstdFlags), } } var _ Logger = (*logger)(nil) type logger struct { inner *log.Logger } func (l *logger)

    なぜ Go ではロガーをコンストラクタ DI してはならないのか
  • Webサーバーアーキテクチャ進化論2023

    はじめに 最近プログラマーとしてのキャリアに一区切りつけようと思っており、これまでのプログラミングの勉強の集大成となるブログを書きたくなったので書く。初めてプログラミングをして、フロントエンド開発をして、サーバーから値が返ってきたときは「どういう仕組みで値が返ってきたんだ?」と疑問に思っていた。ずっと理解したくて理解できていなかった。だからずっと勉強していた。そして最近になってようやく自分の言葉で説明できるようになった気がしたのでブログを書きたい。 2015 年版が自分の原点であり、この記事を書くモチベーションになった このような記事は実は過去に存在している。 FYI: https://blog.yuuk.io/entry/2015-webserver-architecture その記事はサーバーがどういう仕組みで動いていて、どのように進化し、2015 年に至るかを解説してくれた記事だ。自

    Webサーバーアーキテクチャ進化論2023
  • Go言語プログラミングエッセンス

    このの概要 Go言語ユーザーとして,「もう一段レベルアップしたい」「開発に使いたい」と思っている方に向けた,Go言語の解説です。関数やパッケージの使い方,並行処理,テストといった基的なトピックにおいて,「こう書くと綺麗になる」「こう書くとパフォーマンスが上がる」といったエッセンスを紹介します。後半ではCLIアプリ/Webアプリの開発手順や,現場で使われている便利なパッケージなど,著者が業務やOSSの開発で培った技術をふんだんに紹介します。 こんな方におすすめ Go言語の入門を終え,さらに深く学びたい人 第1章 プログラミング言語Goとは 1.1 Goの簡単な歴史 1.2 Goの立ち位置 1.3 Goが利用される場面 標準でUTF-8をサポート マルチプラットフォーム 並行処理の扱いやすさ ストリーム指向 シングルバイナリ 1.4 教育用途としてのGo 1.5 なぜGoが使われるのか

    Go言語プログラミングエッセンス
  • Ubie は Go と Node.js の会社になります

    Ubie では、創業当初から Server-Side Kotlin を推進してきましたが、全社的な技術選定を再度行い、これからは Go と Node.js を中心とすることにしました。 記事では、Go と Node.js を選定した理由や、それを普及させる取り組み、そして選定の流れを紹介します。 経緯 これまで Ubie では技術スタックを発散させてきていて、現在は KotlinGo、Node.js、RubyPython のバックエンドサービスが動いています。以前は新規開発が多く、それぞれに携わるメンバーが技術選定をすることにより、最大瞬間風速を出せるなどのメリットがありました。しかし、現在では弊害が目立ってきています。 まず、事業成長に伴って運用の重要性が増しています。人材が潤沢とは言えないスタートアップにおいて、様々な技術スタックを安定運用することはコストが高すぎると感じています

    Ubie は Go と Node.js の会社になります
    MonMonMon
    MonMonMon 2022/12/14
  • 株式会社メルペイを退職します: 柴田 芳樹 (Yoshiki Shibata)

    2018年6月1日から働き始めた株式会社メルペイを9月30日付けで退職します。4年4か月勤務したことになります。1984年4月1日に社会人として富士ゼロックスで働き始めてから、7社目の会社でした。10月1日からは、新たな会社でソフトウェアエンジニアとして働き始めます。 週4日勤務「ソラミツ株式会社を退職します」でも書きましたが、リコーを退職してからは、基的に週4日勤務をしてきました。メルペイでも、金曜日は欠勤するか有給休暇を使うなどして、週4日勤務をしてきました(週4日勤務で働くことに関して、入社前に合意してもらっていました)。10月からの会社では、週4日勤務の雇用契約で働きます。 初めてのウェブサービス開発富士ゼロックス、富士ゼロックス情報システム、リコーの3社で合計31年7か月を過ごし、富士ゼロックスでのワークショテーション開発を除くと、その多くは、デジタル複合機のソフトウェア開発に

    株式会社メルペイを退職します: 柴田 芳樹 (Yoshiki Shibata)
    MonMonMon
    MonMonMon 2022/09/10
  • Big Sky :: unsafe.StringData、unsafe.String、unsafe.SliceData が入った。

    Go ではバイト列と文字列は異なる内部データとして扱っています。[]byte から string へ変換したり、またその逆を行う際にはキャストが必要になります。ですので string はイミュータブルになります。 しかしイミュータブルなのは理解しつつもバイト列を文字列にする為に無駄なアロケートをしたくない場合もあります。これまで Go ではドキュメントに明文化していなかった為に色々な作法が生まれてしまっていました。その代表的な物が以下です。 s := *(*string)(unsafe.Pointer(&b)) 来は、Go のバイト列の内部は SliceHeader という構造体により管理されています。 type SliceHeader struct { Data uintptr Len  int Cap  int } また string は以下の StringHeader で管理されて

    Big Sky :: unsafe.StringData、unsafe.String、unsafe.SliceData が入った。
  • APIを作りながら進むGo中級者への道:さきさん文庫

    このでは、実際に手を動かしてブログサービス用のAPIサーバーを作りながら ・net/httpやdatabase/sqlのような、動く「もの」を作るために必要なGoの標準パッケージ ・HTTP通信やレイヤーアーキテクチャ・テストの実行・エラー処理の概念といった、プロダクト開発には必要なIT基礎知識 ・チャネルやゴールーチン、といった中級者向けの文法とその使いどころ を学ぶことができます。 「Goの基的な文法はわかったぞ!次は何をやろうかな?何ができるかな?」という方におすすめです。 【もくじ】 イントロダクション 第1章 HTTPサーバー 第2章 構造体と json の扱い方 第3章 データベースの扱い方 第4章 ユニットテスト (基礎編) 第5章 サービス層の作成 第6章 アーキテクチャ大改装 第7章 エラー処理 第8章 ユニットテスト (応用編) 第9章 ミドルウェアによるロギング

    APIを作りながら進むGo中級者への道:さきさん文庫
  • Go Secure Coding Practice の日本語翻訳を公開します - Techtouch Developers Blog

    はじめに Go Secure Coding Practice とは コンテンツ一覧 良かったところ 注意すべきところ 最後に はじめに こんにちは。SRE の izzii です。 テックタッチのエンジニア規模もそれなりに拡大し、若手の採用も進んできたため、セキュアコーディングを徹底していきたいという思いがあり、まずは意識改革ということで勉強会を実施しました。セキュアコーディングを目的とした場合には教育だけでなく Static application security testing (SAST) の導入といった方法もあるのですが、まずは自分を含めた開発メンバーにノウハウをインストールすることにしました。セキュアコーディングへの意識が高まれば、いづれ SAST の導入の際に抵抗感も少ないだろうと考えています。いきなり SAST を導入しても、誤検知が煩くて浸透しないリスクもありうると考えてい

    Go Secure Coding Practice の日本語翻訳を公開します - Techtouch Developers Blog
  • Zigで簡単クロスコンパイル 2022 - k0kubun's blog

    僕は以下の3つのツールを複数プラットフォーム向けにクロスコンパイルしてバイナリ配布しており、以下のように全て異なる言語で開発している。 Go: sqldef Rust: xremap mruby: mitamae クロスコンパイルに苦労している話をするとZigを使ってみたらいいんじゃないかと言われることがあり、周りでもZigが何となく流行り始めた気がするので、これらのツールに実際自分で使ってみてどうだったかという事例を紹介したい。 Zigとは Zigはそもそもプログラミング言語なのだが、C/C++とのinteropがやりやすい言語なようで、おそらくそれに必要でLLVMベースのC/C++ツールチェインが同梱されていて、しかもそれをDrop-In Replacement for GCC/Clangとして売りにしている。 僕はZig言語そのものにはそれほど興味はないのだが、クロスコンパイラとして

    Zigで簡単クロスコンパイル 2022 - k0kubun's blog
  • Rob Pike's simple C regex matcher in Go

    Rob Pike’s simple C regex matcher in Go August 2022 Back in 1998, Rob Pike – of Go and Plan 9 fame – wrote a simple regular expression matcher in C for The Practice of Programming, a book he wrote with fellow Unix hacker Brian Kernighan. If you haven’t read Kernighan’s “exegesis” of this code, it’s definitely worth the 30-minute time investment it takes to go through that slowly. With Go’s C herit

  • Go 1.19 で os/exec パッケージの挙動が変わった話

    Go 1.19 のリリースノートを眺めてみると Command and LookPath no longer allow results from a PATH search to be found relative to the current directory. This removes a common source of security problems but may also break existing programs that depend on using, say, exec.Command("prog") to run a binary named prog (or, on Windows, prog.exe) in the current directory. See the os/exec package documentation for informat

    Go 1.19 で os/exec パッケージの挙動が変わった話
    MonMonMon
    MonMonMon 2022/08/04
  • GoのGC (garbage collector)について理解する

    プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping

    GoのGC (garbage collector)について理解する
  • 実用 Go言語

    業務プログラミングの現場でも採用されるようになってきたGo言語。文法はシンプルで学びやすいという特徴を持っていますが、複雑な要件を実現するには、プログラミング言語が提供する構成要素(文法やライブラリ)をさまざまに組み合わせる必要があります。 書は、そんなGoを使う上でのポイントを単なる文法詳解ではなく「よりGoらしく書くには」「実用的なアプリケーションを書くには」といった観点から紹介します。 構造体やインタフェースの使い方からJSON、CSVファイル、Excel、固定長ファイルの扱い方、またログやテスト、環境構築など現場に即した幅広いトピックについて、「Goらしいプログラムの書き方」をその背景と共に教えてくれる先輩のような書籍です。 まえがき 1章 「Goらしさ」に触れる 1.1 変数やパッケージ、メソッドなどに名前を付けるには 1.1.1 変数名 1.1.2 パッケージ名 1.1.3 

    実用 Go言語
    MonMonMon
    MonMonMon 2022/04/07
    “「よりGoらしく書くには」” ← のRust版の書籍ない?
  • 『Goならわかるシステムプログラミング 第2版』の発売を開始しました

    ご来店いただきありがとうございます。 日より『Goならわかるシステムプログラミング 第2版』が販売となりましたのでお知らせいたします。 書は、2017年10月に発行された『Goならわかるシステムプログラミング』の改訂版です。改訂にあたり改めて全体を見直し、加筆修正や古い情報の更新のほか、プロセスの実行に関する説明を中心に構成の見直しをしています。また、コンピュータシステムを扱う際に避けて通れないにもかかわらずまとまった説明があまりないシェルやデバッガに関する解説を追加しています。 なお、第1版を直販サイトでお買い上げいただいた方は、カートに入れてクーポンコード「Go2」を指定することで、第2版を15%オフでお求めいただけます(2022年3月末までを予定)。第1版の購入に利用されたメールアドレスでの購入が必要になります。 PDF(紙書籍にも付いてきます)は日よりダウンロード可能、紙書籍

    『Goならわかるシステムプログラミング 第2版』の発売を開始しました
  • プログラミングにおける「納得」と『Goならわかるシステムプログラミング 第2版』 - golden-luckyの日記

    「納得」欲 パソコンやブラウザ、あるいはスマホで使うアプリケーションを作っているとき、自分がやっている「プログラミング」という行為にどこまで「納得」できているでしょうか? 「プログラミングという行為への納得」、ちょっと耳慣れない概念ですよね。実をいうと、さっきこの記事を書き始めたときに思いつきました。プログラムを書いていると、エラーみたいな露骨な躓きがない場合でも、なんかもやもやすることがあります。このもやもや、少なくとも自分は、以下のような側面で一定の「納得」に至っていないことが原因であるような気がしています。 アプリケーションの仕組みをデータ構造やアルゴリズムの言葉で説明しきれるぞ、という側面での「納得」 意図通りの挙動になることに設計レビューやユニットテストや動作検証を通じて確信が持てるぞ、という側面での「納得」 コードがコンピュータやネットワークという物理的な装置の上でどう処理され

    プログラミングにおける「納得」と『Goならわかるシステムプログラミング 第2版』 - golden-luckyの日記
    MonMonMon
    MonMonMon 2022/03/23
  • 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言語のジェネリクス入門
    MonMonMon
    MonMonMon 2022/02/19
  • Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)

    動的型付けプログラミング言語や、class を持つようなプログラミング言語を使う場合、そのフィールドメンバの定義順などを意識する事は少ないかもしれません。 Go は struct という、C言語が持っている構造体と同じ様にメモリ配置され、構造体そのものをレシーバとして、メソッドを定義しつつプログラミングを行います。struct はデータ構造そのものを示し、それが大きくなるにつれ、当然ながらメモリ使用量も多くなります。 さて、例えば以下のコードを実行すると、struct 100 個分のサイズは幾らになるでしょうか。 package main import ( "fmt" "unsafe" ) type Account struct { TimeZone struct { Name       string `json:"name"` UtcOffset  int    `json:"utc_

    Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)
  • 2021/11/13 に実施した TinyGo ハンズオンの振り返り - sago35の日記

    2021/11/13 にオンラインで開催された Go Conference 2021 Autumn Online の中で TinyGo ハンズオン (Workshop) を開催しました。 13:10-14:10 と 14:20-15:20 の 2 コマで、各 5 名の参加者に対してハンズオンを実施、という形でした。 このページでは、 TinyGo ハンズオンの振り返りとして、企画段階、番に向けた準備、実際の番の様子などをまとめていきます。 gocon.connpass.com gocon.jp TinyGo ハンズオンの企画段階 私自身は umeda.go という関西 (主に大阪) の Go コミュニティの運営の一人だったわけですが、今回の Go Conference 2021 Autumn Online が kyoto.go を中心として準備が進む中 umeda.go もお誘いいただ

    2021/11/13 に実施した TinyGo ハンズオンの振り返り - sago35の日記
  • Go の sql.DB がコネクションプールを管理する仕組み

    Godatabase/sql パッケージ の DB 構造体 は、データベースへのコネクションプールを管理し、かつスレッドセーフ (goroutine セーフと言ったほうが良いのだろうか…?) にそれらの接続を使用できることを保証している。 ドキュメント にも次のように書かれている。 DB is a database handle representing a pool of zero or more underlying connections. It’s safe for concurrent use by multiple goroutines. こちらの基的な実装内容と、動作を制御するパラメータについて調べてみた。 基礎知識のおさらい database/sql パッケージはデータストアの実装によらない一般的な SQL のインタフェースを提供している。具体的なデータストアへの接

    Go の sql.DB がコネクションプールを管理する仕組み
  • Big Sky :: Go に Fuzz testing が入った。

    みなさん Fuzz testing ってご存じでしょうか。 人間が作る物は必ずといっていいほどバグが存在します。そしてそのコードをテストする人間も必ずバグを見逃します。 想定していなかった境界値テスト等、人間には先入観という物があり、それが邪魔をして簡単にバグを見逃します。昨今、この様な誰も気付かなかったバグの隙間を突く様な脆弱性が沢山見つかっています。 物によっては重大インシデントに発展する物まであります。 こういった人間では想定できない様なバグを見付けてくれるのが Fuzz testing です。Fuzz testing を実施する事で、ソフトウェアは頑丈になり安全にもなりえます。 日、Go の master ブランチに Fuzz testing の機能が入りました。 [dev.fuzz] Merge remote-tracking branch 'origin/dev.fuzz'

    Big Sky :: Go に Fuzz testing が入った。