タグ

関連タグで絞り込む (607)

タグの絞り込みを解除

goLangに関するclavierのブックマーク (1,617)

  • 2023年の Go での気づきに思いを馳せて構築するオレオレ Go サーバープロジェクトレイアウト

    2023 年は念願叶い業務でも趣味でも Go を触ることができました。 そんな 2023 年での Go での気づきに思いを馳せ、タスク管理をするような簡単なサーバーを構築しそのプロジェクトレイアウトをご紹介してみます。 気づきといっても読む方にとっては当たり前のことかもしれません。 また、プロジェクトレイアウトはこれが正義だとは思っていません。紹介するレイアウトは業務では使っていないです。運用などもまともにしたことはありません。私がそこそこの規模のサーバーを新規で構築するならこんな風にしようかなって記事です。 気づき interface を満たすためのコードって VSCode で自動生成できたんだ よくおまじないとかファクトリー関数の戻り値とかで構造体が interface を満たしているかどうかを確認することがあるかと思います。 package main import "context"

    2023年の Go での気づきに思いを馳せて構築するオレオレ Go サーバープロジェクトレイアウト
  • OpenTelemetry Go Deep Dive

    はじめに この記事はGo 言語 Advent Calendar 2023及びOpenTelemetry Advent Calendar 2023 8 日目の記事です。 今まで OpenTelemetry に関する記事をいくつか書いてきました(App Runner にデプロイしたアプリからトレースを X-Ray や Jaeger で可視化する記事やコンテナでデプロイした Lambda から X-Ray に OpenTelemetry でトレースを送る記事など)。今までの記事はどちらかというとインフラ観点のものが多く、アプリのサイドカーで OpenTelemetry Collector を動かしてマネージドサービスや OSS のツールにトレースを送る設定だったり、コンテナで動かして docker compose でローカルでも動かせるようにするだったりにフォーカスした内容が多かったです。一方で

    OpenTelemetry Go Deep Dive
  • 古典学派的テストとGoで考える持続可能なアーキテクチャ入門

    「単体テストの考え方/使い方」という書籍の中でテストの書き方により「古典学派」と「ロンドン学派」に分けられるということが書かれています。 現代の開発現場ではモックを使用したロンドン学派的なテストを書くためにも依存性の逆転を使用したクリーンアーキテクチャのようなアーキテクチャが採用されるケースが多くなってきたなと感じます。 このではモックを極力しようしない古典学派的なテストの書き方にこだわったアーキテクチャをGoを使用して再考していきたいと思います。

    古典学派的テストとGoで考える持続可能なアーキテクチャ入門
  • [Go] json.Unmarshal と json.Decoder の使い分け ~ json.Decoder に親しむ

    はじめに 今やあらゆるアプリケーションは Go で書かれていると言っても過言ではない(過言)。そして、今やあらゆるデータは json であると言っても過言ではない(過言)。 となると、Go で json を扱う頻度も必然的に多くなる。そして初めて Go で json をデコードするコードを書こうとした人は、必ずこの問題にぶち当たる。 「json.Unmarshal と json.Decoder は何が違うのか?そしてどちらを使えばいいのか?」 そしてググると大抵以下のような答えにたどり着く。 入力が文字列(string)やバイト列([]byte)の場合は json.Unmarshal() を使う 入力がストリーム(io.Reader)の場合は json.Decoder を使う なるほど、確かにパッと見はそれでいいように思える。思えるんだが、よく見ると実は他にもいくつか考慮すべき点がある。

    [Go] json.Unmarshal と json.Decoder の使い分け ~ json.Decoder に親しむ
  • research!rsc: Go Testing By Example

    I opened GopherCon Australia in early November with the talk “Go Testing By Example”. Being the first talk, there were some A/V issues, so I re-recorded it at home and have posted it here: Here are the 20 tips from the talk: Make it easy to add new test cases. Use test coverage to find untested code. Coverage is no substitute for thought. Write exhaustive tests. Separate test cases from test logic

  • Go言語によるクリーンアーキテクチャの実装例紹介

    はじめに CastingONEでバックエンドエンジニアをやっている清水です。 この記事ではクリーンアーキテクチャについて学んだけど具体的にどのように実装すれば良いのかという悩みがあったので実装例をまとめてみた記事になります。 クリーンアーキテクチャで実装されたサンプル実装のうちGitHubのスター数が多いリポジトリをピックアップして、設計内容を紹介していきます。 具体的にどこにどんな実装をするべきなのかも含めて紹介していきます。 処理を一部省略して紹介するため実際の処理内容を確認したい場合はGitHubでご確認お願いします。 クリーンアーキテクチャとは クリーンアーキテクチャは、ソフトウェア設計の原則を適用して、依存性の方向性を逆転させ、ビジネスロジックから詳細(フレームワークやデータベース)を分離するアーキテクチャパターンです。これにより、テストしやすく、メンテナンス性が高く、柔軟性のあ

    Go言語によるクリーンアーキテクチャの実装例紹介
  • Goroutineの使い方

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

    Goroutineの使い方
  • freeeカードチームの開発(Go)から得た学びベスト5 - freee Developers Hub

    この記事はfreeeアドベントカレンダー2023の19日目の記事です。 こんにちは!freeeカードチームのmattsunです。freeeカードUnlimitedの開発運用をしています。私は1年前にfreeeに入社しfreeeカードチームに所属しています。これまでの自分のエンジニアとしてのキャリア(10年強)を通してみても、今のチームではPRレビューやリファクタなどからの学びが多いなぁと感じます。個人的に学びがあったことやチームとしての知見が深まったもののうち、ベスト5(私の主観)をまとめます。 freeeカードシステムは、フロントエンド(TS,React)・BFF(RoR)・Backend(Go)で構成されており、Goでの開発比率が多いことから、記事はGoのコードに関する言及が多いです。freee社全体をみるとRailsで開発されたシステムも多いですが、Goで開発しているサービスもある

    freeeカードチームの開発(Go)から得た学びベスト5 - freee Developers Hub
  • GoエンジニアがReactにチャレンジして驚いた5つのこと

    はじめに こんにちは。Magic Momentでエンジニアをしている伊藤です。 いつもはMagic MomentのプロダクトであるMagic Moment Playbookの開発に携わっています。 元々はGo言語エンジニアとしてMagic Moment Playbookのバックエンド開発に参加し始めました。 ですが、今回フロントエンドエンジニアとしてフロント側の開発に参加することとなりました。 Go言語を使っていたエンジニアReactを使い始めて驚いたこと、理解しづらかった部分などを書いていこうと思います。 これからフロントをやってみたいと思うバックエンドエンジニアの方の参考になれば幸いです。 そもそもReact.jsとは Magic Moment PlaybookのフロントエンドReact.jsを使って構築されていますが、そもそもReactとはなんなのでしょうか。 ReactはFac

    GoエンジニアがReactにチャレンジして驚いた5つのこと
  • GoCLIツール職人のためのRust入門

    三連休中にこんなツールを作った。 普段はGoでCLIツールを書いているけど、このツールで初めてRust格的に使ったのでその際に得た知見を元にGoでCLIを作っている人向けにとりあえずRustでツールが作れる状態になれることを目指して、CLIツールを作るときによく使っている処理やRustならではの構文などを中心に書いてみた。 この記事を通して「なぁ~んだ。案外Rustでもサクッとツール作れそうじゃん」とか「Rustにも意外とツール向けのライブラリとかあるんだなぁ」とか思って貰えると嬉しい限り。

    GoCLIツール職人のためのRust入門
  • go vet に含まれないスタンドアロンな静的解析ツールたち | フューチャー技術ブログ

    はじめにTIG真野です。育休明けです。 Go言語の特徴の一つに、静的解析ツールがリッチということがあると思いますが、代表格である go vet と付随する(という表現が正しいか不明ですが)ツール群についてまとめます。知っておくと似たようなツールを作ってしまうことを防げるかなという点と、類似のチェックを行いたい場合に参考にしたいこと、ユースケースが合えばこれらを利用してハッピーになりたいという思いがあります。 go vetとはgo vet はGo言語に標準で組み込まれた静的解析ツールで、コンパイラによってキャッチされないエラーや懸念を検出し報告してくれます。Linter(リンター)の一種です。 チェック内容の一覧は go tool vet help コマンドで確認できます。デフォルトでは全て有効になっており(-asmdecl=false などで個別に無効化は可能)、Go1.21時点では30の

    go vet に含まれないスタンドアロンな静的解析ツールたち | フューチャー技術ブログ
  • テストケースの名前には条件と結果を含めた方が良い - 感情を込める

    という考えにたどり着いたので、考えのスナップショットをとっておく。 Go言語における、テスト関数名とサブテストのname引数の値を「テストケースの名前」・「テスト名」と呼ぶことにしている。 (*testing.T).Run(name string, f func(t *testing.T)) bool テスト名に近いものとして、(*testing.T).Errorや(*testing.T).Logの引数がある。これらはテスト実行時の出力に含まれるが、テストケースを分かつものではない。あくまで、特定のテストケース内の情報を増やすものだ。対するテスト名は、(通常は)テストケースを分割できる最小単位である。 テストケースがテスト名の単位で存在するということは、テスト名はそのテストケースを十分に表現できていたほうがよいということだ。さもなくば、検証・変更しようとする仕様に対応するテストケースや、実

    テストケースの名前には条件と結果を含めた方が良い - 感情を込める
  • 難しい問題をコンパイラレベルで弾くことができるRustの並行処理 データ共有の有無から見る、2つのサンプルコード

    GoPythonKotlinRustTypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Rust編では鈴木文太氏が登壇。Rustの並行処理について、データ共有がないパターン、データ共有があるパターンそれぞれのコードを紹介します。 鈴木氏の自己紹介と、今日話すこと 鈴木文太氏(以下、鈴木):よろしくお願いします。「Rustにおける並行処理」について発表していきたいと思います。私はGO株式会社の鈴木文太と申します。2021年6月に入社して、今はタクシー事業者向けの管理画面の開発などをやっています。 今回話すことについてですが、まずプロセスと並行・並列処理の基について少しお話ししたあとに、スレッド間でデータ共有がない場合のRustのコードと、スレッド

    難しい問題をコンパイラレベルで弾くことができるRustの並行処理 データ共有の有無から見る、2つのサンプルコード
  • Goルーチンとチャネルを使用した並行・並列処理 具体的なコードをよく起こるトラブルとともに紹介

    GoPythonKotlinRustTypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Go編では森下篤氏が登壇。Goの並列・並行処理のやり方を紹介します。 Goの並列・並行処理 森下篤氏(以下、森下):私のところでは、Golangについて説明します。弊社は会社名もGOなので非常にわかりにくいのですが、基的には大文字で「GO」と書くと会社を示すことが多いです。(スライドを示して)小文字の「Go」やスライドのアイコンを使った時には、言語のGoと思ってもらえると助かります。 まず、Goでの並列・並行処理について話します。独自の軽量スレッドであるGoルーチンというものがあって、Goルーチン同士の同期・非同期通信の仕組みであるチャネルが構文に含まれてい

    Goルーチンとチャネルを使用した並行・並列処理 具体的なコードをよく起こるトラブルとともに紹介
  • Goで複数の引数を取る関数やメソッドをどう書くのがいいのか - ぱいぱいにっき

    普段Go書いているときにそこまで気にしてなかったが、ふと気になったので色々パターンを挙げてみる。なおこの記事には「答え」が書かれてないので、みなさんの意見を聞かせてください。 複数の引数を取るパターン一覧 そのまま引数を羅列する 複数の引数をまとめたstructを取る Functional Options Pattern そのまま引数を羅列する 例えばHTTPリクエストを行うような関数があったとして、 func Request(ctx context.Context, method http.Method, _url string, query url.Values, formValues url.Values) error { // do something } というシグネチャが考えられる。 実際にnet/http.NewRequsetWithContext は func NewReq

    Goで複数の引数を取る関数やメソッドをどう書くのがいいのか - ぱいぱいにっき
  • Go言語で高速JSONライブラリをメモリ安全にしたらさらに速くなった話

    はじめに こんにちは。Sugawara Yuutaです。"Go言語で最速のJSONデコーダーを作った話", "それでも僕はGoで最速のJSONデコーダーを作りたかった"...以来の方はまた読んでいただきありがとうございます。まだの方は、経緯を伝えやすくなると思うので、そちらの方も読んでいただけたら幸いです。 その後 Go言語チームのメンバーが取り組んでいる新しいバージョンのJSONライブラリであるgo-json-experiment/jsonというレポジトリを発見しました。(厳密に言うと、知ってはいたのですが中身等は見ていない状態でした。) そこで学んだことが少しでも役に立てばとissueを提出したところ、そのときのJSONデコーダーに足りないものが見えてきたため、今回は僕の見つけた課題と、どのように解決しようとしたか・したかを話せればと思います。 見つけた課題 パフォーマンスも重要ですが

    Go言語で高速JSONライブラリをメモリ安全にしたらさらに速くなった話
  • 少しずつ育てるGo言語のプロジェクト構成

    23/9/21追記:この記事を読む前に ついにGoチームから、プロジェクト構成に関するガイドが公開されました! 記事を読んでくださることも大変嬉しいですが、ぜひこちらのガイドもご一読ください! この記事は何 Go言語を書いたことがある方も、興味はあるけど触ったことがない方もこんにちは。 Goに限った話ではないと思いますが、ガリガリコードを書いていて、あるタイミングで気になるのがプロジェクト構成(ここではディレクトリ構成の意図)ではないでしょうか? それを裏付けるかのように、Go界隈では以下のリポジトリが話題に上がることがあります。Star数すごいですね😇 リポジトリ名から公式感が漂いますが、そういう訳ではないのがミソです。 こちらのリポジトリ冒頭にも記載されていますが、次の点に留意する必要があるでしょう。 これは、Goアプリケーションプロジェクトの基的なレイアウトです。これは、コアと

    少しずつ育てるGo言語のプロジェクト構成
  • Go言語でsliceの重複排除 (slicesやsamber/loパッケージを使う場合) - stefafafan の fa は3つです

    Go言語でsliceの重複排除について書きます。Go 1.21前提です。 slices パッケージを使っての重複排除 Go 1.21から slices パッケージが増えました。ここに生えている関数を利用して重複削除のコードが書けます。 pkg.go.dev 例えば int の slice の重複排除は以下のように書けます。 integers := []int{1, 2, 2, 1} slices.Sort(integers) // [1 1 2 2] uniqValues := slices.Compact(integers) // [1 2] slices.Compact は連続する値を1つにまとめる関数なので、重複排除したい場合は slices.Sort で先にソートする必要があります。 User という struct の slice を id で重複排除したい場合はどうすればいいかと

    Go言語でsliceの重複排除 (slicesやsamber/loパッケージを使う場合) - stefafafan の fa は3つです
  • Go 言語が生成するバイナリについて

    Go 言語で実装されたツールを運用したり解析する側の視点から、Go 言語が生成するバイナリについて気になることを調べた。 $ cat /etc/os-release NAME="Amazon Linux" VERSION="2023" $ go version go version go1.20.6 linux/amd64 シングルバイナリ基的に Go 言語では、コンパイルするとシングルバイナリが生成される。たとえば次のようなファイルを用意し、 package main import "fmt" func main() { fmt.Println("hello world") } ビルドすると、次のようにスタティックリンクされたバイナリが生成される。 $ go build main.go $ file main main: ELF 64-bit LSB executable, x86-6

    Go 言語が生成するバイナリについて
  • 【Go】 Echo × Gorm を使用した JWT 認証の実装

    概要 記事では、Echo を使用して JWT 認証を実装する方法をご紹介します。 プロジェクトの作成 プロジェクトディレクトリを作成します。

    【Go】 Echo × Gorm を使用した JWT 認証の実装