タグ

goに関するyk5656のブックマーク (269)

  • Go言語で書かれたPHPアプリケーションサーバ「FrankenPHP 1.0」がリリース

    FrankenPHP 1.0には、Symphony、LaravelWordPressなどのネイティブサポートが含まれるほか、Caddyを搭載したプロダクショングレードのPHPサーバであり、PHPアプリのスタンドアロンで実行可能なバイナリとしてのパッケージ化が可能となっている。 さらに、PHP-FPMとNgnixを個別に実行する必要がなく、1つのサービスのみでPHPサーバを提供できるようになるとともに、PHP 8.2以降のほとんどのPHP機能拡張、およびすべてのCaddyモジュールと互換性がある。 ほかにも、アプリケーション起動してメモリに保持するワーカーモード、JavaScriptイベントとしてWebブラウザへ送信されるリアルタイムイベント、ZstandardおよびGzip圧縮、構造化されたログ、Prometheusメトリクスを使用したCaddyの監視、HTTPS・HTTP/2・HTTP

    Go言語で書かれたPHPアプリケーションサーバ「FrankenPHP 1.0」がリリース
    yk5656
    yk5656 2023/12/15
  • Makefile覚書: Goアプリ開発に役立ちそうな基礎知識 | フューチャー技術ブログ

    はじめにTIG真野です。育休明けです。 フューチャー社内のタスクランナーはmakeやTaskなど複数の流派があり、チームによって使い分けられています。個人的にはmakeで良いんじゃないかと思っていますが、Taskも良いですよね。 makeは細かい記法をいつも忘れる+調べるとC言語向けの情報が出てきて脳内変換に手間を感じたため、makeを用いてWebバックエンドアプリをGoで開発するということをテーマに、役立ちそうな情報をまとめます。 なお、今記事におけるmakeは、GNU Makeを指します。バージョンは以下で動かしています。 MakefileのためのEditorConfigMakefileのインデントはハードタブである必要があります。誤りを防ぐためにもEditorConfigを設定しておくと良いでしょう。 makeは通常、Makefileという名称をデフォルトで認識しますが、同一フォルダ

    Makefile覚書: Goアプリ開発に役立ちそうな基礎知識 | フューチャー技術ブログ
    yk5656
    yk5656 2023/10/13
  • 強い思想: Go を Web 開発に採用する上で

    Go は Web 開発に向いているか? 最も向いている領域は「CLI ツール」「ミドルウェア」「マイクロサービス」だと思っている。なぜならそれらはコードベースを比較的小さく抑えることを前提としているからだ。 Go は大きなコードベースを抱えやすい設計の言語になっていない。 ミドルウェアとマイクロサービスに関しては小さく作ることが正義。 CLI ツールに関しては単一責務なツールであれば小さくなるが,複数を束ねるツールであっても Web サービス開発に比べれば考えることは少なくて済む。 Web 業界における「一般的な Web 開発」,すなわちモノリスを基とした中規模以上の開発にははっきりと 向いていない と言うべきだろう。 フラットパッケージは正義か? 私が SNS で何度か言及した以下の記事がある。 フラットパッケージ戦略は,確かに Go文化圏においては一定の支持を集めている。Go

    強い思想: Go を Web 開発に採用する上で
    yk5656
    yk5656 2023/09/10
  • なぜ 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 してはならないのか
    yk5656
    yk5656 2023/09/07
  • Goでゼロから作る 自作TCP/IPプロトコル サーバー

    「マスタリングTCP/IP を読んだけど理解がイマイチ進まない。Goがどのようにサーバーを立てているのか気になる。」 そんなスキマを埋めるためのです。 Goの標準パッケージである net package を一切利用せずに、自作TCP/IPプロトコルでサーバーを作ります。 パケットをどのようにやり取りするかハンズオン形式で解説し、最後にToDoリストAPIを実装します。

    Goでゼロから作る 自作TCP/IPプロトコル サーバー
    yk5656
    yk5656 2023/07/02
  • 「Go Style Guide」から学んだ可読性の高いコードの書き方

    Go Conference 2023 ( 2023/06/02 Fri. ) https://gocon.jp/2023/ 登壇資料 株式会社アンドパッド プロダクトテックリード 小島 夏海 みなさん、Googleが公開したGo Style Guideは読みましたか? ソフトウェア開発は継続的な活動であり、一般的に複数人で行うことが多いです。 継続的に複数人で開発を行う場合、自分が書いたコードを他人が読んだり修正したりすることが非常に多いです。 そのため可読性の高いコードを書くことは開発効率やメンテナンス性の向上に役立ちます。 Goはシンプルな言語ですが、どのように書くべきか悩むことが全くないわけではなく、そのような時従来はEffective Go/Uber Go Style Guide/OSSコード等を参考にどのように書くか決めていたと思います。 これらに加え、昨年末にGoogleからG

    「Go Style Guide」から学んだ可読性の高いコードの書き方
    yk5656
    yk5656 2023/06/03
  • Goのメモリ管理 / Memory management in Go

    継続的プロファイルによる大規模アプリケーションの性能改善 / Improving massive application clusters with continuous profiling

    Goのメモリ管理 / Memory management in Go
    yk5656
    yk5656 2023/06/03
  • Goとエラーハンドリング慣習について

    エラー返値が無用な条件 関数ないしメソッドの実装がオンメモリ操作のみで完結 将来も(メモリ以外の)I/O操作は追加されることがない 逆にいうと上記の条件のいずれかが達成できない可能性がある関数やメソッドはエラー返値を付与すべき。 返値エラー型はerrorで統一する 返すエラーがerrorインターフェース型でなければそのエラーは正常にハンドリングできません。またerrorインターフェースを満たす別の返値型で返してerrorインターフェース型で受け取るのも後述のトラブルの元です。 Goの実装方針に「インターフェースで利用するものもコンストラクター相当では構造体ポインタで返す」というものがありますがコンストラクタを呼ぶ側は元型にアクセスすることが多いのでこういう方針になっています。が、エラー値に関しては元型を意識せずに利用可能にするという役割があって、この実装方針は当てはまりません。 エラーチェ

    Goとエラーハンドリング慣習について
    yk5656
    yk5656 2023/05/21
  • 改めて見直すGoの特徴

    極力Goならではな特徴をいくつか挙げていく。 依存解決が必要最低限で互換性を考慮しつつ決定的 モジュール単位で依存をダウンロード。コンパイル対象はサブパッケージ単位。 依存の明示方法はコードに埋め込まれ、かつ未参照のインポートはコンパイルエラー。 つまり動作するコードのすべては正確な依存ツリーが明示されていて余計な依存は引き込まれない。 そして持ち前のコンパイルの速さを含め、相当深い依存ツリーでも依存解決にかかる時間は既知の処理系の中でも最速レベル。(唯一勝てるのはプリビルドバイナリが配布されている場合くらい) また、コンパイルやリンクに必要な処理量そのものが比較的少ないため、開発環境負荷も小さい。 かなり巨大なプロジェクトであってもメモリ8GBで困るようなことが無い。つまり、CI環境の維持にもローコストで済む。 ライブラリの提供側では後方互換性が破壊されるような変更はV1->V2というよ

    改めて見直すGoの特徴
    yk5656
    yk5656 2023/04/26
  • Goのカバレッジツールを使いこなす | gihyo.jp

    はじめに テストでコード品質を担保していくことは、継続的インテグレーションの観点などで必要不可欠です。そして、十分なテストコードが書かれているかどうかの指標として、よく使われるものといえばテストカバレッジがあります。 Goではgo testコマンドと、go tool coverコマンドがカバレッジ計測の機能を担っています。今回は、これらのツールをより深く使い込んでいくために、既存機能の一歩進んだ使い方や最新機能について紹介します。 なお、記事で紹介しているコマンドなどはmacOSで実行した場合の例となります。 オリジナルのカバレッジ統計データを集計する まずは既存のカバレッジの統計データを取得する方法を振り返り、より詳細な情報を集計するアプローチについて紹介します。 Goのカバレッジツールで出力できる統計データ 既存のgo testコマンドおよびgo tool coverコマンドで出力で

    Goのカバレッジツールを使いこなす | gihyo.jp
    yk5656
    yk5656 2023/03/14
  • Goで学ぶGraphQLサーバーサイド入門

    GraphQLはリクエストクエリを書くことで、必要な分のデータを柔軟に取得することが可能なAPI形式です。 RESTとは違うその仕組みはクライアント目線ではとても便利なものですが、サーバーサイドに立ってみると無限の組み合わせがあるリクエストクエリに一体どう対処しているのか不思議に思う人もいるでしょう。 このでは、Goのgqlgenというライブラリを用いてGraphQLサーバーを作る過程を通して、サーバーサイドGraphQLを理解・開発するのに必要な知識を解説していきたいと思います。

    Goで学ぶGraphQLサーバーサイド入門
    yk5656
    yk5656 2023/03/11
  • Big Sky :: Go 言語プログラミングエッセンスという本を書きました。

    2023/3/12 発売です。 Go言語プログラミングエッセンス エンジニア選書 mattn 技術評論社 Kindle版 / ¥3,450 (2023年03月09日) 発送可能時間: Go が発表された当初から Go を見続けて来たので ずいぶん時間が経った気がします。僕なりにいろいろな活動をして来ました。Go 体や周辺ツールへのコントリビュート、イベント登壇、雑誌への記事の投稿や「みんなのGo言語」の共著など。 あらゆる活動が Go づくめで刺激的でした。Go で得たものも沢山あります。そして Go を使う人も想像していた以上に沢山増えました。Go に関して書かれたブログ、Go の求人、今では大学で Go を教えているところもあるくらいです。Go を知った事で僕のプログラミング人生はずいぶん変わりました。それまでは何を作るにしてもC言語をメイン言語として使ってきましたが、今や新しいアプ

    Big Sky :: Go 言語プログラミングエッセンスという本を書きました。
    yk5656
    yk5656 2023/02/21
  • 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言語プログラミングエッセンス
    yk5656
    yk5656 2023/02/16
  • Go言語の不満 - まめめも

    ちょっとバイナリ配布したいツール↓があったので、Go言語と戯れました。 zenn.dev ほぼはじめてGoを使ったので、にわかほど語りたがる法則に従って、Go言語の感想を書きます。 新しい言語にふれたときは、できることには気づきにくく、できないことに気づきやすいので、不満が多めです。主な比較対象はRuby、C言語、JS/TS、Rustあたりです。 よかったところ ひとことで言えば「便利になったC言語」という感じでした。結構低レベルなAPIも揃っていてよかった(デーモン化が素直にできなかったこと以外)。 Rustと比べたらストレスフリーです。思った通りに書くだけでとりあえず動いてくれる。すばらしい。 見た目はあきらかに長くてダサいですが、こだわりを捨てて割り切って書けると言えなくもない。 配布しやすいシングルバイナリが作れるのはやはりよい。今回Goを選んだ理由がこれ。 細かいカプセル化がむず

    Go言語の不満 - まめめも
    yk5656
    yk5656 2023/02/13
  • 言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)

    Twitterで "green thread" という単語をたまたま見かけたので、知っていることをつぶやいたよ。 Green thread 言語のスレッドとOSのスレッドの関係 N:1 mapping 言語のスレッドの全てがひとつのOSのスレッドの上で実行されるもの。その代表が上記のJavagreen thread。 OSのシステムコールを呼ぶときには必ずnonblockingモードを使い、EAGAIN または EWOULDBLOCKが返ってきたときには他のスレッドの実行権に譲るようにする必要がある。うっかりシステムコールでブロックされてしまうと、全部のスレッドが巻き添えになって動けなくなる。 スレッドの生成やコンテキストの切り替えは軽い。しかし、マルチコアを生かすことができないため、シングルコアの環境でのみ使用される。 1:1 mapping OSのスレッドと言語のスレッドが1対1対応

    言語のスレッド実装の雑な話(Green threadからGoのgoroutineまで)
    yk5656
    yk5656 2023/01/10
  • 業務アプリケーション開発にGoを採用する理由

    この記事は MICIN Advent Calendar 2022 の24日目の記事です。 前回は熊沢さんの2つの新規事業立ち上げで経験したタイプ別MVP検証の進め方でした。 はじめに 記事では、業務アプリケーションのバックエンドとしてGoを採用することによるメリットを、実際の業務経験を振り返りつつ考察してみます。 近年では多くの企業でGoが採用されています。その採用理由は、「並行処理をたくさん行いたいから」「学習コストが低いから」「フットプリントが小さくコンテナベースのプラットフォームに向いてるから」「Googleが使ってるから」「高速だから」といったところが挙げられるんじゃないでしょうか。 一方で、単なるモノリスなAPIとしてGoを選ぶ必要はないんじゃないのか、といった声もよく聞きます。「初期フェーズはスピード重視でRuby on Railsが最強だ」「枯れた技術であるJava + S

    業務アプリケーション開発にGoを採用する理由
    yk5656
    yk5656 2023/01/03
  • Ubie は Go と Node.js の会社になります

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

    Ubie は Go と Node.js の会社になります
    yk5656
    yk5656 2022/12/15
  • APIを作りながら進むGo中級者への道:さきさん文庫

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

    APIを作りながら進むGo中級者への道:さきさん文庫
    yk5656
    yk5656 2022/09/05
  • 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 で良い感じに動かすメモ
    yk5656
    yk5656 2022/08/22
  • 【悲報】ワイPythonプログラマー、Go言語が難しいすぎて咽び泣く : IT速報

    Go言語ってまじでゴミだよな 少しなにかしようとすると、馬鹿みたいに長ったらしいスペルで ライブラリインポート強要されるし

    【悲報】ワイPythonプログラマー、Go言語が難しいすぎて咽び泣く : IT速報
    yk5656
    yk5656 2022/08/14