タグ

Goに関するsatoshieのブックマーク (52)

  • 無料で楽しむ Go サーバー開発のススメ

    AWS Summit Japan 2024, AWS Game Day 振り返り - NIFTY Tech Talk #20

    無料で楽しむ Go サーバー開発のススメ
    satoshie
    satoshie 2024/08/09
  • MarkdownベースのGo製タスクランナー「xc」のススメ

    Goにおけるタスクランナーの歴史 npmならnpm run、denoならdeno taskなど言語ツールにタスクランナー機能が付属していることがありますが、Goではそのような機能は提供されていません。 そこでGoプロジェクトではMakefileがタスクランナーとして用いられることがしばしばありますが、独自の文法、.PHONYを大量に書く必要がある、Makefile警察が飛んでくる、などの問題があります。 Makefile警察「ぐぬぬぬ…」 #taskfile - Qiita タスクランナーとしてMakefileを使うことから脱却すべく、巷ではYAMLベースの「Task」やGoベースの「Mage」が用いられている印象です。 どちらも多少試したことはありますが、主に以下の点が気になりました。 Taskfile.ymlやmagefile.goといったツール独自のファイルを置く必要がある これは

    MarkdownベースのGo製タスクランナー「xc」のススメ
    satoshie
    satoshie 2024/07/24
  • 自社サービスのバックエンドを Go から TypeScript へ切り替えるための整理

    切り替える理由 自社の主力製品で利用している技術(WebRTC / WebTransport)がブラウザベースのため TypeScript を利用する Go を採用したのは sqlc が使いたかったという理由 sqlc-gen-typescript が出てきたのでもう Go を使う理由がなくなった 自社サービスチーム全員が Go にまったく興味が無い sqlc 自体は便利 そもそも自社に Go への興味がある人がいない 自社サービスの規模ではボトルネックになるのはデータベースであって言語ではない もしアプリでスケールが必要なときは Rust や Erlang/OTP に切り替えれば良い コネクションプールは PgBouncer を利用すればいい TypeScript からは 1 コネクション 1 接続で問題無い どうせフロントエンドでは TypeScript を書く 自社では React

    自社サービスのバックエンドを Go から TypeScript へ切り替えるための整理
  • チョットできるGoプログラマーになるための詳解GoDoc - Qiita

    わかりましたか?よくわかりませんよね?まあ、godocとgo docは同じドキュメントツールですが、別のツールです。家と元祖みたいなものとして、長らく平行で提供されてきました。ちょうどこの記事を書いている少し前にリリースされた1.11で、godocの方がウェブだけになるとリリースノートに書かれました。 また、godoc.orgのサーバーはローカルのgodocコマンドよりも機能が増えていたり、テンプレートが微妙に違ったりします。とはいえ、ドキュメントを書くときはこれらの違いはそこまで気にすることはありません。 2020/09/19追記: 現在はpkg.go.devが稼働を開始し、godoc.orgのページにアクセスするとこちらへのリダイレクトをするかどうかを問い合わせるバナーが出ます。将来的にはこちらに一化されると思います。開発者が行うべきこと、記述すべきことは差はありません。このドキュ

    チョットできるGoプログラマーになるための詳解GoDoc - Qiita
  • Goのパッケージ開発者が関数などのDeprecated(非推奨)を利用者に伝える & 利用者が検知する方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Goのパッケージ開発者が関数などのDeprecated(非推奨)を利用者に伝える & 利用者が検知する方法 - Qiita
  • Golangでの命名規則におけるベストプラクティス

    Golangの設計思想 Golangは、「単純さ」と「読みやすさ」を重視している言語です。そのため、ソースコードを保守のために、いくつかの単純な規則を採用しています。 この記事では、GoチュートリアルとEffectiveGoを参考にしています。 ファイル名 Goは、ソースファイルがすべて小文字で、複数の単語をアンダースコアで区切るという規則に従います。 複合ファイル名は_で区切られます。 「.」で始まるファイル名 または「_」はgoツールによって無視されます。 接尾辞「_test.go」が付いたファイルは、go testツールによってのみコンパイルおよび実行されます。

    Golangでの命名規則におけるベストプラクティス
  • goで「今日はなんの日?」をSlackに投稿する

    goの学習を進めたいんだけどなかなかテーマが決まらない…。 チュートリアルやを読んでいてもなかなか頭に入らず、手を動かさないと身につかないタイプ。 そこで、自身のTwitterアカウントで自動投稿している「今日はなんの日?」をgoを使ってSlackに投稿出来るようにしてみようと思ってやってみました。 Yahooキッズの中に「今日はなんの日?」というコンテンツがあるので、そのページからXPATHを使って「なんの日なのか?」と「記念日の説明」を取得し、Slackに投稿するというところまでを試してみる。 YahooのページにアクセスしてHTMLを取得する まずはページにアクセスすることが出来ないと始まらないので go を使ってHTTPアクセスを行い、ページを取得するところまでを実装してみる。 goでのHTTPアクセスは元々用意されている net/http を利用する。 そしてページのBodyの

    goで「今日はなんの日?」をSlackに投稿する
  • Go言語の例外処理がないってのは結局どういうこと? - Qiita

    はじめに はじめまして。インターンをしているイナです。 今回は初心者がGo言語の例外処理がないって当なの?という部分について概念を中心に調べたものをまとめました。 Q. 例外処理とは まずは兎にも角にも、例外処理とはなんぞやってところからです。 いくつかのサイトで例外処理の定義について調べてみましたが、サイトによって言ってることはバラバラでした。 例外とエラーは一緒です or 違います!例外は想定外 or 想定内&想定外のエラーのことです!など人によって言ってることが違いました。 最初から壁が高すぎ...?と戦々恐々としていましたが、IT用語辞典 e-Wordで気になる部分がありました。 例外は「エラー」(error)と同種の概念で、普遍的に成り立つ両者の明確な違いは無く、同義として扱われる場合が多い。ただし、プログラミング言語や処理系によっては両者に異なる意味合いが与えられている場合も

    Go言語の例外処理がないってのは結局どういうこと? - Qiita
  • 「例外」がないからGo言語はイケてないとかって言ってるヤツが本当にイケてない件 - Qiita

    この記事は、Go3 Advent Calendar 2018 の8日目の記事です。 7日目は @codehex さんによる「Go でアプリケーションとクライアントのミドルウェアを作成する方法知ってますか?」でした。 日はネタ全開でお送りいたします。 Disclaimer(免責事項) はじめに言い訳というか、これを書いた経緯というか。 プログラミング言語をdisる人をdisる芸を見たいですね! — yet another (@Maki_Daisuke) 2018年10月11日 というツイートをいたしまして、言った手前自分でやるか、と思い立った次第です。 なので、ネタとしてお楽しみください。 なお、炎上した場合にも、それすらもネタとして楽しむ所存ですのでアシカラズ。 それでは、いってみましょう。 Go言語がイケてない…だ…と……? Go言語はイケてない言語としてよくdisられているが、その中

    「例外」がないからGo言語はイケてないとかって言ってるヤツが本当にイケてない件 - Qiita
  • RURUK BLOG

    GoでS3にファイル送信を行う処理とテスト環境を作成したのでメモ書きします。 テスト環境にはlocalstack(Dockerで構築されたAWSの擬似環境)を利用します。 docker-compose.ymlで設定している環境変数(※)を番環境用に設定することで、実際のAWSにS3ファイルを送信することが可能です。 ※ S3_ENDPOINTなどGoコンテナで使用しているAWS関連の環境変数 gitに動作確認済みのコードをアップしています。 https://github.com/ruruyuki/localstack_s3_with_go ディレクトリ構成 ディレクトリ構成は次のようになります。 # ディレクトリ構成 . ├── docker-compose.yml ├── docker │   ├── golang │   │   └── Dockerfile │   └── loca

  • AWS SDK for Go v2のAPIをモックして単体テストを実行する | DevelopersIO

    しばたです。 前の記事でAWS SDK for Go v2を使ったツールを作った話をしましたが、このツールのテストを書くにあたり結構ハマったので共有したいと思います。 Developer Guide AWS SDK for Go v2のAPIをモックする方法自体は以下のDeveloper Guideにふつうに載っています。 後から改めて見る分には「せやな。」って感じで理解できるのですが、最初にこのドキュメントを見た際は 私のGo言語に対する理解が不足していた[1] AWS SDK for Go v1とv2でやり方が微妙に異なり、ネット上には両バージョンの手法が混在するため情報の取捨選択に手間取った という状態でかなり混乱し理解に手間取りました。 モックに必要なことを一つ一つ整理していけばそこまで難いことは無かったと今では思いますが、もう少し丁寧な説明があっても良いのかなと思うところでありま

    AWS SDK for Go v2のAPIをモックして単体テストを実行する | DevelopersIO
  • Goで学ぶポインタとアドレス - Qiita

    Goってシンプルで書きやすいですよね。 しかし、シンプルなGoでもいくつか躓きやすいポイントがあると思っています。 その最初のポイントがポインタではないでしょうか。特に、ポインタの概念が存在しない言語から始めた人にとっては、なかなかとっつきにくいものだと思います。そこで今回は、なんとなく使っていたポインタを、ちゃんと理解するためのエントリを書きました。ポインタをちゃんと理解しようとすると、その前提として知らなければならないことが多々あり、そこから説明するので、やや遠回りをした説明になっています。 「これちげえじゃねえか」とか、「ここわかりにくいぜ」っていうのがあったら、ご教授ください。 ※ 技術的な話は「です、ます」調よりも「である、だ」調の方が書きやすいので、以降は「である、だ」調で書きます。 前提知識Part 先ほど述べたとおり、ポインタを理解しようとすると、前提知識が必要になってくる

    Goで学ぶポインタとアドレス - Qiita
  • Goの定数の型宣言 - Qiita

    こうしておくと、intにもint64にも代入できる、不思議な状態を作ることができ、便利である。

    Goの定数の型宣言 - Qiita
  • moqを使ったGoのテスト

    はじめに 記事では matryer/moq というモックライブラリを利用したGoのテストのプラクティスについて紹介します。 moqはモック(狭義にはスパイ)・スタブの機能を持っており、その扱い方は非常にシンプルで直感的に扱えます。 その使い勝手に良さについて個人的にかなり気に入っており、実際にプロダクトのテストコードに利用しています。 一方で、moqはシンプルでユーティリティ的な側面が強いため、使い方を誤ると逆に管理しにくいテストコードになってしまいます。 記事では『単体テストの考え方/使い方』という書籍を参考にしつつ、モック・スタブとしての役割に注意してmoqの使い方を提案してみます。 前提 いわゆるGoらしさの追求はこだわらない方針とします。具体的には、テーブル駆動は一旦忘れ、stretchr/testify を積極的に使うこととします。応用すればそうしないパターンでもいい感じに書

    moqを使ったGoのテスト
  • Go言語のテンプレート機能について - Qiita

    概要 go言語に標準で搭載されているテンプレート機能について紹介します。 テンプレート機能を使うことで、ロジックとデザインを分離することが出来ます。 変数の埋め込み、ループ、条件分岐などが出来ます。 ただし、それほど多機能ではないため使い所は限られるでしょう。 例えばメールではJavascriptが使えないため使用に適しています。 複雑なことはできませんが独自関数を作成できるため、何かをやろうとする場合は逐次独自関数を作成していくことになります。 packageについて Go言語には組込みのテンプレート・パッケージとして、 text/template と html/template パッケージが搭載されています。 html/template パッケージはtext/template をラップしたもので、同じインターフェースを提供し、コードインジェクション対策を施した安全なHTMLを生成します

    Go言語のテンプレート機能について - Qiita
  • Go text/template で文字列作成 - Qiita

    みなさん、こんにちは! Go書いてますか? 今回は、text/template を使って ひな形 から 文字列 を生成する方法をご紹介します。 公式が作成している 標準package なので すぐに使えます。 template - The Go Programming Language https://golang.org/pkg/text/template/ 似たようなpackageで html/template というのがありますが、 これはコードインジェクションに対して安全なHTML出力を生成するものなので そういった目的がないときは、 text/template を使用しましょう。 template - The Go Programming Language https://golang.org/pkg/html/template/ ちなみにどちらも使い方は、同じです。 使ってみる

    Go text/template で文字列作成 - Qiita
  • GoとEnumについて

    これはGo Advent Calendar 2022の21日目の記事です。 たびたび「Enumイディオム」がGoに欲しいという要望が話題になるのでその話をまとめてみる。 議論の中心はここが詳しい。 「Enumイディオム」が解決する課題 文字列表現がつく 反復処理ができる 偽の列挙値を導入することを防ぐ 名前空間を分離する などがあるらしい。上にあげた課題がGo標準では解決しにくいという理由がよく上がるのですが、Enumイディオムの追加方法は何パターンかあります。 Enum型プリミティブを言語仕様に加える ライブラリとしてEnumオブジェクト実装を提供する 現状の推奨「iotaによる手法+go-generate」による方法 「Enum型プリミティブを言語仕様に加える」について 言語実装のアップデートが必要 reflectパッケージのアップデートが必要 後方互換のためiota式とEnum式の2

    GoとEnumについて
  • 【Go】aws-sdk-goでS3に画像をアップロードする

    はじめに AWSのコンソールから簡単にアップロード出来ますが、 今回はアプリなどから画像をアップロードする事を想定して、ソースコードでS3に画像をアップロードしてみます。 ゴール のコマンドでmain.goと同じ配下にいる画像ファイルをS3の test-bucket-0814という名前のバケットの中のimageフォルダ以下に画像をアップロードすること。 これを ここに保存 この状態にすることがゴールです。 環境 macOS 11.4 go 1.16 aws-sdk-go 1.40.17 準備 .awsの設定 credentialsやconfigの設定を行なってください。 今回はこちらでは説明致しません。 設定されている事を前提として話を進めます。 まだ設定できていない人は、こちらを参考に設定してみてください。 aws-sdk-goをインストールします。 //go mod を入れます。今回は

    【Go】aws-sdk-goでS3に画像をアップロードする
  • 鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 | gihyo.jp

    Go Conference 2014 Autumnレポート 鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 この記事では2人目の鵜飼文敏氏の基調講演についてレポートを書きたいと思います。この基調講演では「Goに入ってはGoに従え」というタイトルで、Go言語らしく書く方法について話がされました(スライド⁠)⁠。 写真1 鵜飼文敏氏の講演の様子 Go言語の可読性レビュー Go Readability Approver まずはじめに、「⁠Go Readability Approver」と呼ばれる、GoogleにおけるGo言語のReadability(可読性)をレビューするチームについて話がありました。このチームは、コードレビューを通じてGo言語の良いコードの書き方を教えることを目的としているそうです。メンバー

    鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 | gihyo.jp
  • つくってまなぶ静的解析のすすめ - LayerX エンジニアブログ

    はじめに こんにちは、LayerXの id:convto です。 そしてこれは LayerX アドベントカレンダー (概念) の1日目の記事です。 アドベントカレンダー盛り上げていくぞ〜ということで11月から始まるらしいです。だいぶフライングしてるけど枠もかなり埋まっててすごい。 せっかくなのでお祭り参加したいぞ〜ということで一発目です。よろしくお願いします。 静的解析つくろうとしたきっかけ ちょうどつい最近記事になった下記の輪読会がきっかけでした。 tech.layerx.co.jp このなかで、mapのrange accesssについて、元mapのcopyを取らないから破壊するとループ挙動が壊れる可能性がある旨が言及されていました。 そのときは雑談で「range accessしてるmapに再代入してたら怒る!みたいな考え方で整理したら静的解析できそうっすよね〜」みたいな話をしたんですが

    つくってまなぶ静的解析のすすめ - LayerX エンジニアブログ