タグ

golangに関するshigo405のブックマーク (79)

  • Gophercises: 実践的な20種類のエクササイズで Go を学ぼう - kakakakakku blog

    もっと Go を学びたくて学習コンテンツを探しているぞー👀という人におすすめできる「Gophercises」を紹介する❗️計20種類あるエクササイズ(どれも楽しい🌸)をほぼ全て動画を観ながら写経して,とにかく楽しかったのでまとめることにした💡 動画を観ながらコードを写経できる エクササイズは計20種類もある どのエクササイズもすぐに使えそうなテーマで楽しい 無料で学べる A Tour of Go の次に取り組むのも良いし,構文を学ぶより実践的なテーマで実装しながら学びたいけどネタが思い付かないときに取り組むのも良いと思う👌 \( 'ω')/ Gophercises! Gophercises! gophercises.com エクササイズ一覧 Gophercises には「計20種類」のエクササイズがある❗️参考までに日語概要も載せておく. CLI 実装・API 実装・PDF 生成

    Gophercises: 実践的な20種類のエクササイズで Go を学ぼう - kakakakakku blog
  • Go公式のlinter、Golintが非推奨になった

    Goが公式で出していたGolintがdeprecated/frozenしました。 メンテがされていない 2018年から実質的な変更が加わってない Issueも放置されているものが多い golang orgに存在するlinterなのでGoが公式として推奨しているlinterに見える Go が実際には保守されていないプログラムを公式として推奨しているように見えてしまう 開発者は合理的に異なるスタイルを採用したい場合がある Golint単体で特定の警告を無視したりするなどの機能を持っていない ということからattractive nuisance(魅力的な迷惑者)になっているというProposalでした。 Issueの議論を見てもdeprecate/frozenすることに対して否定的な意見は少なく、一年ほど前にapproveされました。(なので「非推奨にしよう」なったの自体は少し前の話です) そし

    Go公式のlinter、Golintが非推奨になった
  • Go で使う Makefile の育て方

    Go を使ってプロダクトを作る時、Makefile を使ってビルドを指定することが多いです。 理由としては、 バージョン情報などを埋め込むのに都合がいい 複数のバイナリを吐き出す時に都合がいい Go のビルドオプションを指定するのにいろいろあって整理しておきたい 事前にコードジェネレータで書き出す部分があり、それを考えると Makefile などで整理したい などなどです。なので今回はプロジェクトが大きくなっていく中でどういう Makefile の書き方をしているか、というのをご紹介しようと思います。 サンプルとして、今回のプロジェクトでは gRPC を使ったチャットサービスのサーバーとクライアントを作ることにします。リポジトリは https://github.com/rosylilly/gochat に置いておきました。 Step 1. バージョン情報を埋める 今回はサーバーとクライアン

    Go で使う Makefile の育て方
  • gomockを完全に理解する

    この記事は 3/27 に開催されたCAMPHOR- DAY内で発表した内容を元にした記事です。 アーカイブはこちら(共有してるスライドの画面が黄色くなっていることは終わってから知りました🥺) この記事では gomock や mockgen の基的な使用方法から、 gomock の内部の動きまでを紹介します。この記事を読み終わったあなたは思わずgomock 完全に理解した と言っていることでしょう。 基的にGoの文法を知っていればgomock自体を知らなくても理解できるような説明にしているつもりです。 この記事ではv1.5.0の仕様をもとに話しています。 golang/mock(gomock) とは go 公式が出しているインターフェース定義からモックの生成を行うことができるライブラリです。 生成したモックを扱うパッケージも含まれます。 この先の説明では gomock と呼ぶことにしま

    gomockを完全に理解する
  • Goのテストに使える手作りモックパターン - Money Forward Developers Blog

    こんにちは。 京都開発拠点でGoエンジニアをしています @yoskeoka です。 Goを中心技術として性能改善やプロダクト間を横断するような機能の設計、実装を行うKTAチーム (京都開発部 テクニカルアーキテクトチーム) 所属です。 突然ですが、皆さんはGoでテストを書いているでしょうか。 我々はテストを書くことが中長期的なスピードアップに繋がると信じて日々テストを書くようにしています。 KTAではGoの実装をする際にClean Architectureの考えに基づいたpackage分けを行っていますが、packageを分けたり、インターフェースを定義したりとしていくと、テストを書くのが難しい部分というのが出てきます。 そんな場合に使えるモック作りテクニックを今回は紹介したいと思います。 Clean Architectureはテストしやすくなると言うが Clean Architectu

    Goのテストに使える手作りモックパターン - Money Forward Developers Blog
  • Goの言語仕様書精読のススメ & 英語彙集

    この記事について Go言語公式から提供されているThe Go Programming Language Specificationという文章があります。 実際のThe Go Programming Language Specificationのページ画面 この文章、個人的にはじっくり読んでみると結構得るものが大きいな、と感じるものです。記事では The Go Programming Language Specificationって何が書いてあるの? 読んだら何がわかるの? 読むときにはどういうところに注目したらいいの? 英語難しいから単語教えて! という疑問に答えながら、The Go Programming Language Specification精読の布教を行います。 The Go Programming Language Specification とは? The Go Prog

    Goの言語仕様書精読のススメ & 英語彙集
  • Goのプロジェクト構成の基本

    Goプロジェクトをどの様なファイル構成で配置すれば良いか読み物が少ないという指摘を見たのでまとめてみようと思う。 GOPATHについて Go1.16がリリースされたことでGo-Moduleによるプロジェクト構成が標準で推奨されることになりました。(Go1.11までさかのぼってGo-Moduleは使える様になってます) Go-Moduleモードでは「GOPATH配下にプロジェクトを置かなければならない」という制約からは解放されています。なので、実質GOPATHはどこを指していても構わないし設定されていなくても「ユーザーホーム/go」というデフォルトの場所が決まっているので開発できます。 おすすめの環境変数設定は以下の2つだけ。 「GOPATH=~/.go」(WindowsGOPATH=%USERPROFILE%\.go) 「PATH=$GOPATH/bin:$PATH」(Windows

    Goのプロジェクト構成の基本
  • Go 1.16連載が始まります | フューチャー技術ブログ

    VSCodeも1.53でInsiderでない安定板もM1対応になりますし、GoLandもネイティブ版がリリースされました。Rosetta2でも快適だった環境はますます快適になっています。 それ以外だとlinux/riscv64対応が改良されていて、個人的には気になっています。 ランタイムの変化runtime/metricsパッケージが導入されました。runtimeとかdebugとかさまざまな場所に散っていったメトリックス収集機能が集約されました。今サポートしているのはGC関連のメトリックスと、メモリ関連のメトリックス、goroutine数ですね。 あとは、GODEBUG環境変数にinittrace=1を設定すると、各パッケージのinitで消費している時間やメモリの情報が標準出力に表示されます。Google App EngineやらCloud RunやらCloud FunctionsやらAW

    Go 1.16連載が始まります | フューチャー技術ブログ
  • Goでのオススメエラーハンドリング手法

    この記事は「Eureka Advent Calendar 2020」の19日目の記事です。 こんにちは、2020年今年こそはとダイエットに意気込み、振り返ってみればジムへ行ったのは1回きり、出前を頼んだのは100回以上、見事に5kg体重を増やした山下です。 昨日は同じBackendチームのJamesさんによる「Understanding Allocations in Go」でした。 今回はこちらの記事にあるPairsエンゲージのエラー機構を詳しく説明していきたいと思います。 (当は面白Goクイズをたくさん出したかったのですが、playgroundをmedium上にうまく埋め込めず断念しました。泣) 概要errorsパッケージを作成して独自のエラー構造体を定義しましょうエラーは全ての箇所でラップして綺麗にスタックトレースを出力しましょうエラーレベルやエラーメッセージを付与して汎用性を高めて

    Goでのオススメエラーハンドリング手法
  • 【2021年版】GitHub × Go製ツールのリリースフロー

    はじめに GoでCLIをよく作る身として、 どのように素晴らしいリリースフローを構築するか に心を砕いています。 2019年末にリリースされたGitHub Actionsがすっかり成熟し、GitHub Container Repository(β)もお目見えとなった2020年も暮れを迎えたところで、新たなリリースフロー構築を検討し、一定の結論を得ましたので、少しでもGophersのたすけになることを願って、記事として公開します。 背景 実現したい「リリース」 クロスコンパイルしたバイナリでの配布 Goでツールを作ることで、クロスコンパイルの手軽さによって、様々な環境で、ダウンロードすればすぐに実行できるバイナリでの配布が可能です。 $ curl -O bin.tar.gz https://github.com/kyoh86/gogh/releases/download/v1.7.1/gog

    【2021年版】GitHub × Go製ツールのリリースフロー
  • Go 製 CLI にプラグイン機構を作る方法n選

    package main import "plugin" func main() { p, err := plugin.Open("plugin.so") // error handling f, err := p.Lookup("F") // error handling f.(func())() // prints "Hello, world" } この標準の plugin パッケージについて、先程あげた評価項目がどうかを考えてみます。 User Experience : いまいち プラグインをインストールの仕組みを考えないと難しそう 利用者は、ツール側が規定したルールに従って.soを配置する必要があるというのがポイント ありそうな仕組み ツールにプラグインの URL を渡すとダウンロードして適切な場所に配置してくれる プラグインのレジストリを提供する プラグインがいい感じにインストー

    Go 製 CLI にプラグイン機構を作る方法n選
  • goroutineを使った並行処理の基礎 - Qiita

    Goを使う利点の一つとして、goroutineを使った並行処理の書きやすさがあります。 具体的にどんな感じで書くのかサンプルを見ながら理解を深めます。 なんとなくGoだと並行処理書きやすそうだなと思ってもらえると良いかなと思います。 goroutineとは Goで並行処理を実現するための仕組みで、Goランタイムによって管理される軽量スレッドのことです。 並行処理として実行したい処理の前にgoキーワードをつけると並行処理として実行できます。 ちなみにgoroutineで実現できるのは並行処理(concurrent)であり、並列処理(parallel)ではありません。 (このコーヒーマシンの例が個人的にはわかりやすい気がします) 例えば以下のように使用します。 package main import ( "fmt" "time" ) func main() { // 呼び出す関数の前にgoキー

    goroutineを使った並行処理の基礎 - Qiita
  • 【Go】ポインタ徹底解説 - Qiita

    はじめに GOアドベントカレンダーの11日目です。 昨日の記事は@tutuzさんのGo言語を使ったTCPクライアントの作り方でした。 初日の記事「なんでGo?」を読んでとても共感を覚えましたが、Goの印象はシンプル、素朴な印象を受ける言語です。 モダンさの追求と、敢えてレガシーな要素を受け継ぐ匙加減の妙、のようなものを感じます。(Googleの看板があるから凄く見える感が無くもない。) さてそんなGoですが、レガシーな印象を与える特徴として、ポインタが登場するという特徴があります。 なんだかんだ雑な理解をしているので、記事としてアウトプットしつつしっかり勉強しようと思います。 ポインタへの雑な理解 変数にはその値が格納されたアドレス(メモリの番地)があるよ。 変数のアドレスを参照するためにポインタという機能があるよ。 アドレスが参照できることで嬉しい時があるよ。 変数の前に*や&をつける事

    【Go】ポインタ徹底解説 - Qiita
  • [発表資料] 今改めて読み直したい Go基礎情報 その1 #golangtokyo - My External Storage

    当日利用したスライドは以下になる。 Goの郷に入る前に 今回はgolang.tokyoメンバーがオススメする3年以上前に公開された記事・発売された書籍の優良情報をまとめた。 発表では各々の記事・書籍を紹介する前に、まず今回の発表の背景・Goの言語哲学について触れた。 Goらしいとは Goらしいとは一言で言うとSimplicity(簡潔性)だ。後述するRob Pike氏の「Simplicity is Complecated」と言う発表タイトルが一言で表している。 より詳細な解説については、私の言葉より@songmuさんの次の記事を読むといいだろう。 また、このSimplicityが何を目的としているかはBrand bookのGoが達成したいMissionやValueを確認することでわかる。 Go Brand Book https://storage.googleapis.com/golang

    [発表資料] 今改めて読み直したい Go基礎情報 その1 #golangtokyo - My External Storage
  • Goプロジェクトのはじめかたとおすすめライブラリ8.5選。ひな形にも使えるサンプルもあるよ。 - Qiita

    はじめに 最近イケイケなGo! でもベターなGoプロジェクトのはじめかたっていまいち調べてもわからないですよね。 自分は最初色々迷いました。。 まずパッケージ管理ツール。 godepだったりGo Modulesだったり、少し情報がとっちらかっている印象です。 後はどのディレクトリにプロジェクトを配置した方がいいのかもわかりづらい。 importの仕方も相対と絶対のどちらがいいのか迷う。 というわけで以下の4点に絞って解説していきたいと思います! パッケージ管理ツール プロジェクトの配置場所 自作パッケージのimportの仕方 おすすめライブラリ この記事を読めば正しくGoプロジェクトが作成できます!(たぶん) 【追記】 インストール方法とVSCodeの設定に関しても簡潔にまとめたので、良かったら参考にしてください。 【超簡単】GoのインストールとVSCode設定方法 いきなりまとめ プロジ

    Goプロジェクトのはじめかたとおすすめライブラリ8.5選。ひな形にも使えるサンプルもあるよ。 - Qiita
  • Go言語らしくGoコードを実装するための手法と思想 - かねしんショップ - BOOTH

    書は、実践的なGo言語の開発方法や設計思想を解説したです。対象読者は、Go言語でツールやライブラリの開発経験はあるが、「Go言語らしく実装するにはどのように記述したらいいんだろう」と悩んでいる初級者や中級者の方、Go言語のノウハウが貯まっていないチームを対象としています。 日では、Go言語のはあまり多く出版されておらず、また、「Go言語らしさ」という言葉を考えすぎて悩んでいる人も多いと思います。「Go言語らしさ」を意識している人はGo言語の公式の情報や設計思想から知識を得ていますが、世の中に拡散されている記事では、それらと紐づされてGoのコードを解説しているものは少ないです。Go言語で開発をしている方に「Go言語らしさ」を意識して開発をしてもらうためにはGo言語の設計思想や背景を深く理解することが重要です。書では、この「Go言語らしさ」について深く吟味してGoのコードを解説をして

    Go言語らしくGoコードを実装するための手法と思想 - かねしんショップ - BOOTH
  • あなたのGoアプリ/ライブラリのパッケージ構成もっとシンプルでよくない? | フューチャー技術ブログ

    2023.10.5追記: Goチームからプロジェクトの目的に応じたディレクトリ構造についてのドキュメントが公式に公開されています。 https://go.dev/doc/modules/layout Goプロジェクトのフォルダ構成どうしよう、とググると見つかるStandard Go Project Layout。とはいえ、これはかなりコード量を増やしてしまう恐れがありますので、導入する場合のデメリットも考えておく方が良いです。 特に、プログラマーは、最初にみたプログラミング言語のフォルダ構成を親だと思う特性があり、Javaや.NETに影響されるとかなり細かくフォルダを切りたくなったり、package privateなど細かく可視性を制御しようとしたりして、なおかつ「privateのテストってどうすべきなんですか?」とか議論を始めたりもしますが、Go先生によればこれぐらいは1パッケージにフ

    あなたのGoアプリ/ライブラリのパッケージ構成もっとシンプルでよくない? | フューチャー技術ブログ
  • GitHub - inancgumus/learngo: ❤️ 1000+ Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000+ tiny programs.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - inancgumus/learngo: ❤️ 1000+ Hand-Crafted Go Examples, Exercises, and Quizzes. 🚀 Learn Go by fixing 1000+ tiny programs.
  • Goとクリーンアーキテクチャとトランザクションと - Qiita

    はじめに アドベントカレンダー16日目、aptpodのしがないサーバーサイドエンジニアがお届けします。 弊社ではサーバーサイドのプログラミング言語としてGoを利用しています。 Goでアプリケーションを実装していく中で特に頭を悩ませた、Go x クリーンアーキテクチャ x トランザクションについて、学んだこと、どうやって対処したかを書きたいと思います。 題材について 解説するにあたり、クリーンアーキテクチャ1を意識したサンプルアプリケーションを作りました。 機能自体はしょうもない、CRD(Update無し!)です。 意識はしていますが、クリーンアーキテクチャの厳密さを言われるとそうでもないです。 しかし、その部分の議論は題とずれますので特に触れません。 まず全体の絵を。 ざっくりクラス関連図 ざっくりシーケンス図 ユースケースのアクティベートの部分はトランザクションを意味しています。そこだ

    Goとクリーンアーキテクチャとトランザクションと - Qiita
  • 「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。 メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに7回開催し100人以上の方に参加していただきました。 自社でもGoを基幹技術として使っている背景があり、今後もGoコミュニティへの貢献は継続していきます。しかしながら、新型コロナウイルス感染症の状況を踏まえて直近のGopher道場開催を見合わせています。 Goを学ぶ場を提供することでGoに触れる方を増やしたいと考えている筆者にとっては、 開催できないことが非常に残念です。そこでエキスパートチームでは違う形で学ぶ場を提供できないかと考え、Gopher道場で使用している資料のベースになっている「プログラミング言語Go完全入門」を期間限定で公開することにしました。 bit.ly bit.ly 追記 3/18:PDF

    「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング