並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 ä»¶ / 128ä»¶

新着順 人気順

Go言語の検索結果1 - 40 件 / 128件

Go言語に関するエントリは128件あります。 go、 golang、 プログラミング などが関連タグです。 人気エントリには 『今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ』などがあります。
  • 今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ

    こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。 過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。 Go 言語公式のロゴもスピード感ありますね。 同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。 本記事がどなたかの一助になりますと幸いです。 なお本記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうりま

      今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ
    • Go言語を嫌う6個の理由 - さめたコーヒー

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

        Go言語を嫌う6個の理由 - さめたコーヒー
      • 結局、Go言語をやめる理由はなかった件 - Qiita

        この記事は Go 2 Advent Calendar 14日目の穴埋め記事です。 はじめに @okdyy75 さんによる Go 5 Advent Calendar 14日目の の記事「だから僕はGo言語を辞めた」 が「ベンチマークっていうのはこうやるんだよ」というのを説明するために反面教師的な意味で良い教材だと思ったので、反証記事を書きたいと思います。 ベンチマークを取りながらコードを改善して、最終的にGoは遅くないからやめる必要はないということ、そして、なぜ遅いという結論になってしまったのかを掘り下げていきたいと思います。 下準備 幸いなことに、ベンチマークのソースコードがGitHubにある ので、こちらを実行しながら問題点を改善していきましょう。 ちゃんとコードが上がっているのは素晴らしいですね! 一方で、元記事には測定環境が明記されていませんでしたので、同じ環境で測定することはできま

          結局、Go言語をやめる理由はなかった件 - Qiita
        • Goで解放したメモリが少しずつ戻ってくる現象 - knqyf263's blog

          情報を発信する人のところに情報が集まることを日々実感しているので、Linuxのメモリ管理に特に詳しいわけではないのですが最近遭遇した問題について自分の理解を書いておきます。ざっと調べても同じことを書いている人を見つけられなかったので、公開には意義があると考えています。識者の方がフィードバックをくださると嬉しいです。 ※ AIの出力をベースに書いているのでいつもと少し文体が違います。 背景 要約 調査 再現の難しさ Goアプリケーションの調査 pprofによる分析 GCログの調査 Linuxの調査 Goランタイムの調査 GoのGCとTHP khugepagedの問題 Goランタイムにおける回避策 回避策の削除 max_ptes_noneのデフォルト値について MADV_NOHUGEPAGEをやめた理由 調査内容まとめ 解決策 検証 C言語 Go言語 まとめ 背景 Go言語で書かれたOSSのア

            Goで解放したメモリが少しずつ戻ってくる現象 - knqyf263's blog
          • Goでの並行処理を徹底解剖!

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

              Goでの並行処理を徹底解剖!
            • よくわかるcontextの使い方

              Goの標準パッケージにはcontextパッケージというものが存在します。 このパッケージは、net/httpやdatabase/sqlのような現実の事象と対応している何かが存在するようなパッケージではないため、初学者にとっては使い道がわからない、となってしまいがちです。 しかしcontextパッケージは、複数のゴールーチンを跨いだ処理を実装する際には非常に強力な力を発揮する、とても便利なパッケージなのです。 この本では、「contextとは何か?」というところから「どのように使えばいいのかわかる」ところまでたどり着けるように、Goのcontextまわりのことを解説しました。

                よくわかるcontextの使い方
              • Go言語が好きな理由

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

                  Go言語が好きな理由
                • ミラティブのサーバサイドをGo + Clean Architectureに再設計した話 - Mirrativ Tech Blog

                  こんにちは、テックリードの夏です。 今年4月にCTOからテックリードに肩書が変わり、ガリガリコードを書くようになりました。 背景については、こちらをご覧ください。 www.wantedly.com 普段はプロダクト側の機能開発と、サーバ側の基盤開発を半々ぐらいの割合で仕事しています。 一口にサーバ側の基盤開発といっても定義が曖昧なのですが、基本的にはこんな感じのタスクをやっています。 インフラコストの最適化 不正なアクセスからの防御 障害の再発防止 新技術の導入やアーキテクチャの整備 今回はこのうち「新技術の導入やアーキテクチャの整備」の中で、サーバサイドをGo + Clean Architectureで再設計したことについてお話したいと思います。 背景 ミラティブは2015年春頃に開発が始まり、同年8月にサービスがリリースされ、2020年8月で5周年を迎えました。 その過程で組織やプロダ

                    ミラティブのサーバサイドをGo + Clean Architectureに再設計した話 - Mirrativ Tech Blog
                  • Go コンパイラのコードを読んでみよう - kosui

                    はじめに 本記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を理解しようとしても聞いたことのないような専門用語がずらりと並び、コードを読もうとしたらそれらをすべて完全に理解してないと一行も理解できないんじゃないか...。Go のコンパイラ gc のソースコードを読むまでは、私もそう思っていました。 しかし、あまりにも暇な休日のある日、思い立って gc のコードを読んでみました。すると、「コンパイル」という難解な響きの処理も、一つひとつを小さなタスクに分解することで、少しずつ読み進めることができると分かったのです! 何よりも感動したことは、 gc そのものが全て Go で書かれていて、

                      Go コンパイラのコードを読んでみよう - kosui
                    • Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog

                      すみません、ISUCONのアレに火がついてしまったので..。 Advent Calendarとはとくに関係がありません。 qiita.com qiita.com こちらの記事をみて、気になってしまったので interpolateParams の追加とMySQLチューニングをしてベンチマークを回してみました。 ベンチマークの環境が公開されているのは素晴らしいですね。 github.com 8vCPU/16GB Memのc5a.2xlargeなEC2のインスタンスを起動して、以下の手順にしたがってdockerとdocker-composeをインストールしました。OSはUbuntu 20.04を使いました。 docs.docker.com docs.docker.com 上記のbenchmarkのrepositoryをgit cloneし、compose build && compose upし

                        Re: 結局、Go言語をやめる理由はなかった件 - Hateburo: kazeburo hatenablog
                      • 開発用適当ツールはGoで作るのがオススメ - Qiita

                        開発用適当ツールとは? 開発していると、たまに何かしらプロジェクト内で開発者用や運用者用にテストデータを作成したり、DBやAPIに繋いでCSVやExcelを出したりする名もなきツールが大量に必要になってきますよね? 配布して他の人にも使ってもらったりしたくなりますよね? これが開発用適当ツール1です。 そういった開発用適当ツールをGoで作ってみたら案外体験が悪くなかったのでシェアしたいと思います。 どうやって開発用適当ツールを作るか? 既存プロジェクトにそのままGoのプロジェクトレイアウトを重ねていきます。 具体的には以下のような感じです。

                          開発用適当ツールはGoで作るのがオススメ - Qiita
                        • 強い思想: Go ã‚’ Web 開発に採用する上で

                          フラットパッケージは正義か? 私が SNS で何度か言及した以下の記事がある。 フラットパッケージ戦略は,確かに Go の文化圏においては一定の支持を集めている。Go の公式リポジトリや有名ライブラリなんかも,Java などの言語に比べたらずっとパッケージ階層が浅く,ネストしていないものが多いと思う。 しかし,それも 「コードベースを小さく保つ」 を大前提としていることを忘れてはならない。 DDD やクリーンアーキテクチャといった言葉が飛び交うぐらいの規模であれば,パッケージを切ることに関して後ろめたさを感じる必要はない。 むしろ,大きなコードベースが誕生することが開発初期から簡単に予見できるような状況で, YAGNI という言葉に甘んじて設計を放棄するのは極めて悪手であると私は断言する。身を以て失敗を経験した私の口から伝えたい。

                            強い思想: Go を Web 開発に採用する上で
                          • Go初学者へのコードレビューでよくあったコメント20選

                            はじめに こんにちは、ソーシャルベッティング事業本部 海外ベッティング事業部の山崎です。 本記事では、Effective GoやGoogle のスタイルガイド、Code Review Commentsといった公式資料、Future Architectの記事などを参考に、Go を初めて触る開発者を対象にした汎用的なレビューコメントの 20 選を紹介します。 大きく以下の4つのセクションに分けました 言語仕様に関わる内容 標準パッケージの使い方 エラーの扱い方 単体テスト Linter の活用について 可能な限り lint で自動化して人の手が加わる前に静的解析でできればベターです。 特にこの記事で紹介するような汎用的なコメントについてはいくつか反映できる lint もあると認知しております。 そのような設定の lint config サンプルをまとめようとも思いましたが、実際に運用まで至って

                              Go初学者へのコードレビューでよくあったコメント20選
                            • セキュアにGoを書くための「ガードレール」を置こう - 安全なGoプロダクト開発に向けた持続可能なアプローチ - GMO Flatt Security Blog

                              The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The design is licensed under the Creative Commons 3.0 Attributions license. 種々の linter が様々なプロダクトの品質を高めてきた、というのは疑う余地のない事実です。実装の初歩的な問題をエディタ内や CI/CD パイプライン中で機械的に検出できる環境を作れば、開発者はコーディングやコードレビューの邪魔になる些末な問題を早期に頭から追い出し、本質的な問題に集中できます。 また、そのような環境づくり(e.g. linter のルールセットの定義、組織独自のルールの作成、…)は、まさに開発組織のベースラインを定義する作業として捉えることができます。一度誰かが定義

                                セキュアにGoを書くための「ガードレール」を置こう - 安全なGoプロダクト開発に向けた持続可能なアプローチ - GMO Flatt Security Blog
                              • Makefile覚書: Goアプリ開発に役立ちそうな基礎知識 | フューチャー技術ブログ

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

                                  Makefile覚書: Goアプリ開発に役立ちそうな基礎知識 | フューチャー技術ブログ
                                • Goから学ぶI/O

                                  GoにはI/Oに関わるパッケージが数多く存在します。io, os, bufio, fmtなどなど……。これらの立ち位置や、I/O実行の裏で何が起こっているのか本当に理解していますか?この本では、この問への答えをまとめました。

                                    Goから学ぶI/O
                                  • 業務アプリケーション開発にGoを採用する理由

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

                                      業務アプリケーション開発にGoを採用する理由
                                    • 【Go言語】自作コンテナ沼。スクラッチでミニDockerを作ろう - カミナシ エンジニアブログ

                                      初めまして。株式会社カミナシPMの@gtongy1です。 Dockerというツール。SRE, Backend, Frontendどの領域のエンジニアも馴染みのあるツールではないでしょうか。 コンテナを利用することにより、インフラの環境を一つの空間に梱包し、その内部で柔軟に様々な環境を作ることが出来ます。 コンテナの実体とはなんなのでしょう? 叡智が詰め込まれたそんな一つの宝箱のように見えます。 「 コンテナ作ってみたくなりませんか? 」 僕と同じように知的好奇心をくすぐられたそこのあなた!コンテナ沼の一歩目を一緒に踏み出してみましょう! 検証環境 Ubuntu 18.04 golang 1.15 Dockerの機能おさらい docs.docker.com まず、ドキュメント内を読み進めてDockerに対する知識を整理します。 DockerはDocker daemonを基幹とし、その呼び出し

                                        【Go言語】自作コンテナ沼。スクラッチでミニDockerを作ろう - カミナシ エンジニアブログ
                                      • Go言語でゲームボーイアドバンスのエミュレータを作った話

                                        CPUはなんとARMのCPUを採用しています。(そのおかげでLLVMのターゲットに指定できる) ゲームボーイとの違い CPU 最大の違いはCPUです。ゲームボーイ(以降、GB)ではZ80を独自カスタムしたLR35902というCPUを使っていますが、このCPUは8bitで動作するCPUです。つまり命令のサイズが8bit(1byte)しかありません! しかも、LR35902は掛け算命令など現代のCPUでサポートしている基本的な命令をサポートしていません。 これに比べてGBAに搭載されているARM7TDMIは32bit CPUです。つまり命令のサイズが4byteとGBの命令の4倍の大きさになります! このおかげでCPUの命令セットがさまざまな命令をサポートできるようになりました。(まあ後述の理由で実質16bit CPUですが...) またクロック数もGBの4MHzから16MHzに伸びました。 B

                                          Go言語でゲームボーイアドバンスのエミュレータを作った話
                                        • ITエンジニア向けのトレンド情報 | Forkwell Press (フォークウェルプレス)

                                          まずはGo言語の基礎をおさらいしていきましょう。 Go言語は、Googleと世界的エンジニアが共同開発した言語 Go言語は、Googleによってプログラミング環境を改善する目的で開発されました。この開発には、C言語を設計した世界的なエンジニアが携わっています。 Kenneth Lane Thompson (Ken Thompson)…… UNIX開発者  / C言語 発案者 Robert C Pike(Rob Pike)…… UNIX開発者  / UTF-8 発案者 Robert Griesemer …… 高速 JavaScript エンジン V8 開発者

                                            ITエンジニア向けのトレンド情報 | Forkwell Press (フォークウェルプレス)
                                          • Go言語プログラミングエッセンス | 技術評論社

                                            概要 Go言語ユーザーとして、「もう一段レベルアップしたい」「開発に使いたい」と思っている方に向けた、Go言語の解説本です。関数やパッケージの使い方、並行処理、テストといった基本的なトピックにおいて、「こう書くと綺麗になる」「こう書くとパフォーマンスが上がる」といったエッセンスを紹介します。後半ではCLIアプリ/Webアプリの開発手順や、現場で使われている便利なパッケージなど、著者が業務やOSSの開発で培った技術をふんだんに紹介します。 目次 第1章 プログラミング言語Goとは 1.1 Goの簡単な歴史 1.2 Goの立ち位置 1.3 Goが利用される場面 標準でUTF-8をサポート マルチプラットフォーム 並行処理の扱いやすさ ストリーム指向 シングルバイナリ 1.4 教育用途としてのGo 1.5 なぜGoが使われるのか コンパイルの速さ レビューのしやすさ 周辺ツールの充実 パッケージ

                                              Go言語プログラミングエッセンス | 技術評論社
                                            • Goの苦手な領域

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

                                                Goの苦手な領域
                                              • GopherがRust入門したので違いをまとめてみた

                                                はじめに ウホウホ。 Rustを使い始めてちょうど2年くらい経って、すこしRustのことがわかってきたので、改めてGoとRustのそれぞれの違いを整理したいなと思いこの記事を書きました。 筆者はウェブ開発の経験しかないので、ウェブを中心にまとめています。 気づいたらかなりな量になってしまったのとGopher向けにRustを紹介するような記事になってしまいましたが、よければ読んでみてください。 筆者について Goを使い始めて7年ほど経っていて、これまでCLI/TUIツールをいくつか作ってきました。 スペシャリストではないですが、プロダクトでGoを書く分には特に問題ないレベルかなと思います。 Rustは2022年夏ころから使い始めてちょうど2年ほど経ちました。 なにかツールを作ったわけではないですが、勉強がてらにいくつか作ったもの・書いた本があります。 普通にRustを書く分には問題ないですが

                                                  GopherがRust入門したので違いをまとめてみた
                                                • どのレイヤー(層)でトランザクションを実装すべきか

                                                  このように、層ごとに関心事の分離を行うことで、保守性の高い(変更容易性や再利用性等)アプリケーションを実現できます。 しかし、「トランザクション」においてはどうでしょうか。 トランザクションはビジネス領域においても、技術領域においても関心事がある内容です。 そういう曖昧なものは「ひとまず usecase 層に入れてしまえ」という方針になりがちです。 ですが、DB 固有の知識を usecase 層の関心事にしてしまっては、関心事の分離をするメリットが得られません。 そのため、関心事の分離を実現しつつトランザクション実装をする方法を模索してみました。 前提 1. クリーンアーキテクチャを採用している(オニオンアーキテクチャやレイヤードアーキテクチャも含む) そもそもビジネス知識と技術知識を分離していないアーキテクチャを採用している場合、メリットは得られません。 そのため、オニオンアーキテクチャ

                                                    どのレイヤー(層)でトランザクションを実装すべきか
                                                  • Goで学ぶGraphQLサーバーサイド入門

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

                                                      Goで学ぶGraphQLサーバーサイド入門
                                                    • 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言語のジェネリクス入門
                                                      • golangで作るTCPIPプロトコル

                                                        はじめに とりあえずIT業界に入ったら読んでおけという名著はいろいろありますが、その中の1冊がマスタリングTCP/IP入門編でしょう。 僕も買ってはいたものの読むのを途中で挫折していたので、今回しっかり読んでTCP/IPを再勉強してみたいと思います。 マスタリングTCP/IPを読みながらその他わからんことはググりつつ、golangでTCPIPプロトコルそのものを自作してみます。 方針は以下のようにします。 ethernetから作る データのやり取りにnetパッケージは一切使わない (訂正、PCのIPやMacアドレスを取るのにだけ使用しますた) データのやり取りに使うのはsyscallのsendtoとrecvfromだけ socketはRAW_SOCKETを使う golangやネットワークについても初心者の駆け出しですので間違えや実装ミス、変なコードがあるかもですが、生暖かい目でよろしゅうお

                                                          golangで作るTCPIPプロトコル
                                                        • Go のエラーハンドリング

                                                          私が Go のエラーハンドリングについて最初に記事にしたのは2015年のことだが,あれから Go も少しずつ変わってるし,私も当時よりは多少なりと理解が進んだと思うので,今まで書いた駄文を「全部入り」で本の形にしてみようと思う。 主な内容: * エラー評価の基本 * エラーの階層化 * サードパーティのパッケージ * ぼくがかんがえたさいきょうのえらーろぐ * Panic と Recover 寄付(サポート)歓迎。ご笑覧のほどを。

                                                            Go のエラーハンドリング
                                                          • Nature Remoやその関連サービスで使われている技術と今後の展望 - Nature Engineering Blog

                                                            Nature株式会社VPoEのid:Songmuです。当社でもエンジニアリングブログを始めることにしました。 NatureはIoTスマートリモコン製品のNature Remo1を主力製品としていますが、家庭の電力マネジメントのためのIoT製品スマートエネルギーハブNature Remo E2や、電気小売事業のNatureスマート電気3も提供しています。目指すところはクリーンエネルギー100%の世界の実現で、お客様に利便性と同時にエコであるという、気持ちの良いライフスタイルを提供したいと考えています。 先日、Nature Remoは累積販売台数30万台を越えました4が、エンジニアはハードウェアエンジニアが2名、ソフトウェアエンジニアが8名の体制です。ハードウェアも含め、技術領域が多岐にわたっているため、まだまだエンジニアを募集中です。 さて、今回は最初のエントリということで、Natureで使

                                                              Nature Remoやその関連サービスで使われている技術と今後の展望 - Nature Engineering Blog
                                                            • アセンブラをゼロから作って自作コンパイラをアセンブルするまで(日記)

                                                              GNU Assembler互換(サブセット)のアセンブラをGo言語でフルスクラッチで作ってみました。 開発22日目で自作Goコンパイラ(をセルフホストしたときに出力される20万行のアセンブリ)をアセンブルすることに成功しました。 どうやって作ったかというと、小さいコードを GNU Assembler (以下 as) に食わせて出力されたバイナリを観察する、を繰り返して中のロジックを推定し再現しました。as の実装は見ていません。(一瞬見たけど巨大すぎて何もわからなかった) アセンブラ自作は、やってみるとコンパイラ自作よりだいぶ簡単でハマりポイントも少ないので、学習テーマとしてはおすすめです。2箇所ほど難所(命令エンコーディングのルールを理解するのと、ジャンプ命令の最適化)がありましたがそれ以外はさくさく楽しく作れました。 作ってみた結果、アセンブリ言語の理解が深まったのはもちろんのこと、E

                                                                アセンブラをゼロから作って自作コンパイラをアセンブルするまで(日記)
                                                              • 少しずつ育てるGo言語のプロジェクト構成

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

                                                                  少しずつ育てるGo言語のプロジェクト構成
                                                                • Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)

                                                                  このブラウザ バージョンのサポートは終了しました。サポートされているブラウザにアップグレードしてください。

                                                                    Go言語低レイヤー入門 Hello world が 画面に表示されるまで (GoConforenceTokyo2021)
                                                                  • 実用 Go言語

                                                                    業務プログラミングの現場でも採用されるようになってきたGo言語。文法はシンプルで学びやすいという特徴を持っていますが、複雑な要件を実現するには、プログラミング言語が提供する構成要素(文法やライブラリ)をさまざまに組み合わせる必要があります。 本書は、そんなGoを使う上でのポイントを単なる文法詳解ではなく「よりGoらしく書くには」「実用的なアプリケーションを書くには」といった観点から紹介します。 構造体やインタフェースの使い方からJSON、CSVファイル、Excel、固定長ファイルの扱い方、またログやテスト、環境構築など現場に即した幅広いトピックについて、「Goらしいプログラムの書き方」をその背景と共に教えてくれる先輩のような書籍です。 まえがき 1章 「Goらしさ」に触れる 1.1 変数やパッケージ、メソッドなどに名前を付けるには 1.1.1 変数名 1.1.2 パッケージ名 1.1.3 

                                                                      実用 Go言語
                                                                    • Golang開発者のためのクリーンアーキテクチャ

                                                                      はじめに クリーンアーキテクチャは、ソフトウェア設計の分野で非常に重要な概念です。 しかし、その理解は容易ではなく、明確な正解が存在するわけではありません。 多くの人が異なる解釈を持ち、他の設計思想と混在していることもあります。 この記事では、自分なりの視点からクリーンアーキテクチャを解釈し、その整理した内容を共有します。 このアーキテクチャの目的は、システムの各層を独立させ、変更に強く、テストしやすい設計を実現することです。 この記事では、クリーンアーキテクチャの基本概念、Golangでの実装方法、およびディレクトリ構成について詳しく説明します。 なお、この記事では個人的な見解を述べており、必ずしも正解を書いているわけではありません。もし誤りがあれば、ぜひご指摘いただけると幸いです。 クリーンアーキテクチャの基本概念 クリーンアーキテクチャの元となったのは、ロバート・C・マーチン(通称「

                                                                        Golang開発者のためのクリーンアーキテクチャ
                                                                      • Goのプロジェクト構成について

                                                                        Go のコミュニティーで昔から話題になっているテーマだと思いますので、自分なりの考えを共有したいと思います。プロジェクトの内容によって構成などはかなり違ってくると思いますが、ここでは DDD を使ったWebサーバーについて紹介します。よくあるユースケースではないかと思います。 フィードバックやコメントなど大歓迎です!意見交換もしていきたいです! ファイルとネームスペース Go ではプロジェクト構成がそのままネームスペースになります。不便だと思う方もいるかも知れませんが、僕は非常に使いやすいと思っています。他の言語ではしばしば、プロジェクトの構成をすでに大まかに決めているか、もしくはコードを書く前に決めるようにすることが基本だったりします。しかし、Go ではコードを書きながらプロジェクトの構成、パッケージの追加・削除を行うことが一般的です。 よくインターネットで Go の初心者が、「プロジェ

                                                                          Goのプロジェクト構成について
                                                                        • Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ

                                                                          技術記事です。今日は Go の golang.org/x/sync/errgroup についてです。 TL; DR Go が並行処理を得意とするのは事実だけど、とはいえ正しく使うのは難しい(特に channel)。 errgroup なら「並行でダウンロードする」のような頻出パターンをとても簡単かつ安全に使えるので、まずはこれで美味しいところだけ頂いてしまおう。 重い処理を並行にすればあなたのプログラムはカジュアルに数倍速くなる。 多分 errgroup だけで現実の要件の85%くらいはカバーできるはず。 channel も含めてちゃんと使いこなしたいと思ったら、Go 言語による並行処理 がおすすめです。 errgroup とは ドキュメントはここを参照してください。説明を読むよりコード例で見たほうが早いと思うのでこちらをどうぞ。 package main import ( "fmt" "

                                                                            Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ
                                                                          • ぼくのかんがえたさいきょうのGo HTTPサーバー起動方法

                                                                            これまで何度か HTTP Server の Graceful Shutdown について記事を書きました。 Go 言語で Graceful Restart をする Go 言語で Graceful Restart をするときに取りこぼしを少なくする Go1.8 の Graceful Shutdown と go-gracedown の対応 最終的に Go 1.8 で Server.Shutdown が導入され、この件は解決を見ました。 しかし、最近「あれ?本当に正しく Server.Shutdown 使えている?」と疑問に思い、少し考えてみました。 というか ↑ の記事もまだ考慮が足りない気がする。 ぼくのかんがえたさいきょうの Go HTTP サーバー起動方法 とりあえず完成形のコード。 package main import ( "context" "log" "net/http" "os

                                                                            • とってもやさしいGo言語入門

                                                                              Web用語を100秒で解説するチャンネルを作りました! よかったらチェックしてみてください! はじめに この記事は、Go言語を学び始めたばかりの人や、チュートリアルを読んで途中で挫折してしまったという人に向けて、Go言語の基礎的な文法を解説した記事です。といっても全てをカバーするのは大変だと思ったので、私自身が A Tour of Go を読んで難しいと感じた点をいくつかピックアップして書きました。今回の記事では、ポインタ・構造体・メソッド・インターフェースについて解説していこうと思います。 ポインタ A Tour of Go では、ポインタについて次のような説明をしています。 Go has pointers. A pointer holds the memory address of a value. (訳) Goはポインタを扱います。 ポインタは値のメモリアドレスを指します。 この「メ

                                                                                とってもやさしいGo言語入門
                                                                              • 【海外記事紹介】Go言語から離れる開発者が増えている?その理由とは

                                                                                5月14日、海外の技術メディアAIMが「Why Developers are Quietly Quitting Golang」と題した記事を公開した。この記事では、Go開発者が同言語を静かに離れつつあるという現状について述べられている。以下に、その内容を簡単に紹介する。 Go に今逆風が吹いている 記事の冒頭では、フィンテック系スタートアップのエンジニア Yash Batra が半年で Go から Kotlin へ全面移行した体験を取り上げている。Batra は「 私たちはツールを作るためにツールを作っていた 」と述べ、Go の最小主義がプロダクト開発の速度を著しく低下させたと回顧する。 また、長年 Google で Go を率いてきた Ian Lance Taylor が 2025 年 4 月に退職したことも、コミュニティに衝撃を与えた。Taylor は「Go は“単なる一言語”の段階に

                                                                                  【海外記事紹介】Go言語から離れる開発者が増えている?その理由とは
                                                                                • Go言語でポータブルなCI/CDパイプラインが定義可能に。「Dagger」がGo SDKを発表

                                                                                  CI/CDパイプラインをポータブルにする「Dagger」をGo言語に対応させる「Go SDK」が発表されました。これによりGo言語でどこでも動くポータブルなCI/CDパイプラインの定義が可能になります。 Introducing the Dagger Go SDK: a new way to develop your CI/CD pipelines as code, and run them in containers anywhere. https://t.co/7riHAwUSMO pic.twitter.com/mEwrZySbLp — dagger (@dagger_io) October 25, 2022 CI/CDがローカルPCでもGitHubでもCircleCIでも実行可能 Daggerはソフトウェアのビルド、テスト、デプロイを行う一連のCI/CDパイプラインをポータブルにする

                                                                                    Go言語でポータブルなCI/CDパイプラインが定義可能に。「Dagger」がGo SDKを発表

                                                                                  新着記事