タグ

Goに関するatm_09_tdのブックマーク (329)

  • 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言語のジェネリクス入門
  • Goのテーブル駆動テストをわかりやすく書きたい

    Goでテーブル駆動テストを書いていると、書いているときは「すげー読みやすくテスト書けてるぞ!」と思っていても、落ち着いてから見てみると「なんだこれ...訳がわからん...」となることがあると思います。(自分はよくあります。) この記事は、このようなことを解決するのに役立つtipsについてまとめています。主にテストケースについて焦点を当てています。 テストしやすいコード設計に興味がある方は や を参考にしてください。 はじめに この記事はパーソナライズGopher道場で学んだことを元に書いています。 そして、この記事で紹介するテーブル駆動テストの書き方は主観に基づいており、 あくまでテストの1つの書き方にすぎないです。 なので、「この書き方をしないとダメ!」というものではないので、みなさんの考え方やプロダクトに合わせて、柔軟にこの記事で紹介するtipsを取り入れていただけると幸いです。 結論

    Goのテーブル駆動テストをわかりやすく書きたい
  • Goを学ぶときに参照した学習リソースまとめ

    皆さん、新しいプログラミング言語を学ぶ時、どのように学習しているでしょうか? 私は4月に新卒でエンジニアになり、業務でGoを使うことになりました。その際、とりあえず公式チュートリアルであるTour of Goをやりましたが、その後にどうやって学習を進めれば良いか迷ってしまいました。 考えてみると、新しい言語を学ぶ際、毎回学習方法に困っている気がします。ネットでサンプルを探す、動画を見る、書籍を読む、などさまざまな学習方法があると思いますが、私は手を動かしながらいろいろなパターンを学んでいくのが好きです。 そこで今回Goを学ぶ際も、手を動かしてさまざまなコーディングのパターンを学習するために、ネットや書籍でサンプルを探して実践しました。 この学習方法は私にとっては楽しみながら続けることができて、他の言語を学ぶ際も今回実装したサンプルを使って学習しようと考えています! そこで自分と同じ様な悩み

    Goを学ぶときに参照した学習リソースまとめ
    atm_09_td
    atm_09_td 2021/12/21
  • Goのロギングライブラリ 2021年冬 - moriyoshiの日記

    この記事はPySpa Advent Calendar 2021の14日目のエントリーとして書かれました。昨日のエントリーは冷凍品でウキウキ引きこもり生活 でした。ちなみに私も70ℓの冷凍庫を購入しましたが当にライフチェンジングでした。 総論: なぜログが必要か 可観測性 たとえ目的は自明でも、その動作までが自明なアプリケーションというものはほぼ存在しません。現実の世界のアプリケーションというものは、動作パラメータだったり実行環境だったり、起動時点でのさまざまな要因によって挙動を変えるものだからです。そして、そうしたアプリケーションにはライフサイクルというものがあります。ここでいうライフサイクルは、アプリケーションの処理が実行されるにつれ、アプリケーションの内外との情報のやりとりで生じる大局的な状態の変化のことです。アプリケーションが並行処理を行うようなものであれば、個々の並行処理の単位

    Goのロギングライブラリ 2021年冬 - moriyoshiの日記
  • Goで軽量なデスクトップアプリ作成

    Lorca+SvelteKitでやってみる! https://github.com/zserge/lorca https://github.com/sveltejs/kit あらかじめ必要なもの go(version 1.17.2以降) nodejs(16.9.0以降),npm(7.21.1以降) Chrome/Chromium/Edgeのいずれか プロジェクトの開始 mkdir sample-gui cd sample-gui go mod init sample-gui npm init svelte@next frontend // Choice "Svelte app template" is "Skelton Project". // Choice "Use TypeScript" is No. // Choice "ESLint" is No. // Choice "Prett

    Goで軽量なデスクトップアプリ作成
    atm_09_td
    atm_09_td 2021/10/25
  • Go言語で簡単なgRPCサーバーを作成 | DevelopersIO

    この記事はGo言語でgRPCサーバーを作る上で学んだことをまとめています。サンプルプロジェクトとしてシンプルな単行RPC(Unary RPC)サーバーとそれを呼び出すコマンドラインのクライアントを作成していきます。 はじめに この記事はGo言語でgRPCサーバーを作る上で学んだことをまとめています。 サンプルプロジェクトとしてシンプルな単行RPC(Unary RPC)サーバーとそれを呼び出すコマンドラインのクライアントを作成していきます。 ※この記事は既にGo言語の開発環境をセットアップ済みで基的な文法を学習済みの方を想定しています。 動作環境 今回使用した動作環境は以下のとおりです。 PC : Mac M1(Apple Silicon)チップ OS : macOS Big Sir 11.5.2 Go : 1.17.1 gRPCとは gRPCGoogleの作ったRPCのフレームワークで

    Go言語で簡単なgRPCサーバーを作成 | DevelopersIO
    atm_09_td
    atm_09_td 2021/09/28
  • Go言語が好きな理由

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

    Go言語が好きな理由
    atm_09_td
    atm_09_td 2021/09/23
  • 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 が入った。
  • Goの苦手な領域

    Goの利点を使って実装するコツやノウハウを書くことがコミュニティにとってプラスになると思っているのでそれに専念したいという考えはありますが、Goの苦手な領域にGoを採用してしまってヘイトを溜め込んでしまう事例を見かけたりします。 こういう悲劇の起こる可能性を少しでも減らせたらという思いで、Goの現状の苦手な領域について解説しようと思います。Goを学び始めにこれらの領域に手を出すのは避けましょう。 Cgo is not Go GoCGO連携でC/C++資産を利用することができますが、メモリアロケータの異なる処理系を繋ぐ関係上、お互いに呼び合う際のパラメータや戻り値はほとんどのケースでコピーが必要になります(Cの型でメモリ確保しCの型のまま受け渡しする場合はOK)。なので高頻度に呼び合うような用途には不向きであるというのはSWIGなどのような複数の処理系を連携させる仕組みと同様です。 また、

    Goの苦手な領域
    atm_09_td
    atm_09_td 2021/09/20
  • Goへのヘイトに対する考え方

    https://www.kbaba1001.com/entry/2021/09/17/073149 (該当記事が削除されました) RubyのサービスをGoで置き換えるのは3倍人手がかかる 何するにも機能不足 JSONの読み書きにわざわざ構造体書くの面倒 同僚がGoを選ぼうとしたら愚かな選択ですねと答える サーバーサイド開発にGoを使うのは危険 っぽい内容だったかと。 だいぶGoの特徴や既存の言語との考え方の違いが広まってきてるのかなぁと思っていた矢先だったので十年くらい前のような指摘をあえて今されていてびっくりした。 正直、ここに書かれたようなヘイト項目は既出すぎるので、もし影響の大きい項目を多くの人が同様に嫌っているならばGoはここまでの人気のある処理系になることはなかったと思う。(もしくは多くの人が嫌ってはいるが影響の小さい項目ということ) Goは出た当初、こういうヘイトが世界中のブロ

    Goへのヘイトに対する考え方
    atm_09_td
    atm_09_td 2021/09/18
  • Go言語を嫌う6個の理由 - さめたコーヒー

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

    Go言語を嫌う6個の理由 - さめたコーヒー
    atm_09_td
    atm_09_td 2021/09/17
  • Go言語の開発環境セットアップとサンプルプロジェクト作成 | DevelopersIO

    Javaエンジニアだった私がGo言語を始める上で学んだ開発環境のセットアップ方法についてまとめていきたいと思います。 Go言語をインストール後サンプルプロジェクトを作成し、Goのプロブラムの実行/ビルド方法や各種周辺ツールをご紹介していきます。 はじめに Javaエンジニアだった私がGo言語を始める上で学んだ開発環境のセットアップ方法についてまとめていきたいと思います。 Go言語をインストール後サンプルプロジェクトを作成し、Goのプロブラムの実行/ビルド方法や各種周辺ツールをご紹介していきます。 この記事がこれからGo言語で開発を始めたい方のとっかかりになれば幸いです。 ※他言語で開発経験がある方を想定しております。 動作環境 今回使用した動作環境は以下のとおりです。 PC : Mac M1(Apple Silicon)チップ OS : macOS Big Sir 11.5.2 Go

    Go言語の開発環境セットアップとサンプルプロジェクト作成 | DevelopersIO
  • はじめに|よくわかるcontextの使い方

    はじめに|よくわかるcontextの使い方
    atm_09_td
    atm_09_td 2021/08/29
  • @aws-cdk/aws-lambda-goを使ってGoのLambdaをCDKでサクッとビルドする | DevelopersIO

    ちょっと前になりますが、aws-cdk v1.103.0 (2021/05/11) で @aws-cdk/aws-lambda-go というモジュールがリリースされていたので紹介したいと思います。 @aws-cdk/aws-lambda-go とは @aws-cdk/aws-lambda よりさらにhigher levelなモジュールで、 Goで書いたLambdaを簡単にAWSにデプロイしてくれるモジュールです。 v1.11以上のGo、または、Dockerがローカルにインストールされていれば、 それを使ってローカルビルドして、バイナリをAWSにデプロイしてくれます。 やってみた TypeScriptのCDKで実際にデプロイしてみます。 (CDKもGoを使いたかったのですが、まだデベロッパープレビューだったので...) コード 作成したファイルはこちら test-lambda-go ├──

    @aws-cdk/aws-lambda-goを使ってGoのLambdaをCDKでサクッとビルドする | DevelopersIO
  • 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するのか?
  • GoFPDF - GoでPDFを出力するならば使おう

    MOONGIFTはオープンソース・ソフトウェアを紹介するブログです。2021年07月16日で更新停止しました システム開発でPDFを生成する場面は少なくありません。特に業務システムに関わっていると避けては通れないでしょう。最近ではWebブラウザのPDF印刷機能を使ったりもしますが、描画を細かく制御するならサーバ側で出力すべきです。 今回紹介するGoFPDFGo製のPDF生成ライブラリです。多機能なのが特徴となっています。 GoFPDFの使い方 生成したPDFです。一例としてウォーターマークをサポートしています。 グラフ。温度を表示しています。 別なグラフ。 テンプレートを用意して、文字を置き換えながら出力できます。 インターネット上の画像も埋め込めます。 SVGを描画できます。 画像と段組。 GoFPDFは多言語に対応し、ドローや画像の埋め込みにも対応したPDFライブラリです。パスワード

    GoFPDF - GoでPDFを出力するならば使おう
  • Goでの並行処理を徹底解剖!

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

    Goでの並行処理を徹底解剖!
    atm_09_td
    atm_09_td 2021/06/19
  • API Gateway Websocket を Golang でためしてみる | DevelopersIO

    タイトルの通りです。 既出かと思いますが、terraformaws-sdk-go-v2を使っているので特定の人には需要あるかと思いブログ化しました。 参考にしたサイト aws-samples/apigateway-websockets-golang rtomchinsky/aws-chat aws-sdk-go-v2 aws-sdk-go-v2 code example Amazon DynamoDBAWS Lambda、および Go を使用してエンタープライズアプリケーションを構築する wscat を使用した WebSocket API への接続とメッセージの送信 GitHub seiichi1101/apigw-websocket-golang 構成図 解説 ベーシックなパターンで実装しました。 いちおうクリーンアーキテクチャを意識した構成になっています。 ただ、時間がなく認可処理

    API Gateway Websocket を Golang でためしてみる | DevelopersIO
  • Big Sky :: unsafe.Add と unsafe.Slice が入った。

    Go ではポインタは扱えるけれど、ポインタ演算は扱えないというのが共通認識でした。もちろん unsafe.Pointer と uintptr を使う事で、出来なくはなかったのですが簡単ではありませんでした。 package main import ( "unsafe" ) type foo struct { k int64 v int64 } func main() { f := &foo{3,4} // unsafe.Pointer() で匿名ポインタにして // uintptr() で演算可能にして // +8 バイト(64bit)足して // unsafe.Pointer で匿名ポインタに戻して // そこにはフィールド v があるはずなので *int64 にキャストして // デリファレンスすれば出来上がり *(*int64)(unsafe.Pointer((uintptr(uns

    Big Sky :: unsafe.Add と unsafe.Slice が入った。
    atm_09_td
    atm_09_td 2021/05/04
  • Common Anti-Patterns in Go - DZone

    atm_09_td
    atm_09_td 2021/03/24