タグ

golangに関するtri-starのブックマーク (50)

  • Goの苦手な領域

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

    Goの苦手な領域
  • GitHub - EngoEngine/engo: Engo is an open-source 2D game engine written in Go.

    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.

    GitHub - EngoEngine/engo: Engo is an open-source 2D game engine written in Go.
  • スクリプト言語としてのGo

    原文(投稿日:2020/04/23)へのリンク ハイパフォーマンスなネットワークシステムや並列システムを開発するプログラム言語として、Goの採用が拡大していることから、開発者たちはこれをスクリプト言語として使用することに熱意を持ち始めている。ただし現在のGoは、そのままではbashやpythonの代用としては使えないため、これには多少の努力が必要だ。 CodelangのElton Minetto氏が説明しているように、そのパワーや簡潔さ、goroutineのサポートなど、スクリプト言語として使用する上でのGoには多くのアピールポイントがある。GoogleのソフトウェアエンジニアであるEyal Posener氏は、Goをスクリプト言語として使用するさらなる理由として、豊富なライブラリが使用可能であることと、言語自体が簡潔であるためスクリプトのメンテナンスが容易であることを挙げている。やや違う

    スクリプト言語としてのGo
    tri-star
    tri-star 2020/06/09
    Goはスクリプトにも便利な面がある一方で、エラー処理など向いていない面もあるという話。
  • Goで開発していたが、途中でPythonに切り替えた件を振り返る。 - Qiita

    イントロダクション 目下、開発中のプロダクトなので詳しいことは書けないのですが、いろいろと気付きの多い出来事だったので、 少し自分自信の振り返りも兼ねて、投稿してみたいと思います。 これは、決してGoよりPythonのほうが優れているとかそういった話ではないです。 今回、自分は開発者というよりプロジェクトマネージャー(以降、PM)という立場になります。 Goの採用 当社のコア技術Pythonなのですが、今回、開発にあたってGoを採用していました。 主な採用理由としては、「プロトコルとしてgRPCを採用するにあたって、gRPCとの組み合わせ事例が多い」からでした。 gRPCの採用理由は、「同時に企画されていた別プロダクト(Python)との連携が想定されており、異なるプログラミング言語間でも型を維持したままデータ交換が可能」なことからでした。 当初は、プロダクトのリリース時期も未定でプロト

    Goで開発していたが、途中でPythonに切り替えた件を振り返る。 - Qiita
  • Goの環境構築方法 - Qiita

    はじめに 最近、仕事Go触り始めたので、改めて環境構築の手順の確認と、今後Goを触りたいっていう人の参考になればなぁと思います。 ちなみに、自分の手元の環境は以下。 OS : macOS Catalina 10.15.2 → 好奇心でzshにも切り替えてます。 以下の2つをまとめていこうかな、と思います。 どちらも簡単なので、パーっと終わるかと。 あとPATH通したりの作業は必要ですが、Homebrewでインストールもできます。 公式からDLしてインストール goenvを使ってインストール 公式からダウンロード インストール インストーラに従って進めるのみ。 PATHを通す // bash使ってる人は、.bash_profileとかに置き換えてくださいー。 % echo 'export PATH="$PATH:/usr/local/go/bin"' >> ~/.zshenv

    Goの環境構築方法 - Qiita
    tri-star
    tri-star 2020/04/10
    golangの環境構築方法。どんどん変わると思うが2020版。
  • Dependabotを使ってGoプロジェクトの依存を更新するノウハウ | おそらくはそれさえも平凡な日々

    システムを運用していく以上、ライブラリは常に最新を使いたい。最近は依存ライブラリの更新を検知してくれる便利なサービスがいくつかあって、Nature社ではDependabotを使っている。 https://dependabot.com/ Renovateの方が便利そう、という話も聞くのだが、とりあえずDependabotはGitHubが買収して、privateリポジトリでも無料で使えるので利用している。 導入自体は簡単で、画面のガイドどおりに進んでいけば、良い感じに言語や依存管理ツールも自動検出してくれる。設定ファイルは特に置いていない。慣れてきたり、設定を横展開したくなった場合に置くと便利そう。 参考: Dependabotの設定ファイルを置くようにした 動作の様子 前提としてGo Modulesで依存管理をしているが、依存ライブラリの更新があると以下のようにpull requestを上げ

    Dependabotを使ってGoプロジェクトの依存を更新するノウハウ | おそらくはそれさえも平凡な日々
  • Goでテスト中に現在時刻を差し替えたりするflextimeというのを作った | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/flextime flextimeはテストコードの中で現在時刻を切り替えるためのライブラリです。Sleep時に実際に時間を止めずに時間が経過したように見せかける機能もあります。 つまり、PerlのTest::MockTimeやRubyのtimecop的なことをしたいわけですが、Goだとグローバルに関数の挙動を切り替えるといったことはできないため、利用にあたってはtimeパッケージで使っている関数を、flextimeパッケージに切り替える必要があります。 具体的には、flextimeはtimeパッケージと同様のインターフェースを備える以下の9つの関数を提供しています。 now := flextime.Now() flextime.Sleep() d := flextime.Until(date) d := flextime.Since(da

    Goでテスト中に現在時刻を差し替えたりするflextimeというのを作った | おそらくはそれさえも平凡な日々
  • GitHubのprivate repositoryを含んだ場合のGo Modules管理 | おそらくはそれさえも平凡な日々

    tl;dr CI/CD環境から複数のGitHubのprivate repositoryにアクセスさせたい場合にはmachine account(machine user)を使うと良い SSH KeyでもAPI tokenでもどちらでも良いけどSSH方式がGo公式repoでも紹介されている CircleCIだとSSH Keyの設定(User Key)が簡単でその他の設定がほとんど不要 Goに限った話ではありませんが、プロジェクトで使っているprivate repositoryからまた別のprivate repositoryを参照している場合、CI/CDなどの外部環境からどのようにそれらにアクセスさせるか困ることがあります。 例えば、git submoduleを使っている場合や、Goの場合ですとGo Modulesで指定しているパッケージがprivate repositoryである場合な

    GitHubのprivate repositoryを含んだ場合のGo Modules管理 | おそらくはそれさえも平凡な日々
  • なぜGo言語の正規表現は遅いと言われるの? - Qiita

    はじめに Goの正規表現は遅いと言われていることが以前から疑問だったので調査してみました。 こちらの記事やこちらの記事を拝見する限り ① 現実的なユースケース(例えばURLのパースなど)ではGo言語の正規表現は使うべきではなく、stringsパッケージの標準の関数を利用した方がパフォーマンスとしては良い。 ② Go言語で正規表現を利用するために必要な"正規表現オブジェクト"を並行にアクセスするにはパフォーマンスが問題になるので注意が必要。 とあります。その理由は、それぞれ以下に集約できるようです。 ① Go言語標準の正規表現ライブラリは、正規表現と検査文字列の長さに対して常に$O(n^2)$のオーダーで計算量が増加する安定したアルゴリズムを採用している。 ② "正規表現オブジェクト"を用いたマッチング処理には排他制御が行われている。 調べてみる Go言語のpkg/regexpの公式ドキュメ

    なぜGo言語の正規表現は遅いと言われるの? - Qiita
  • Go製のCHANGELOGジェネレータを作った - wadackel.me

    はじめにタイトルにある通り、git-chglog という Go 製の CHANGELOG ジェネレータを作りました。 git-chglog/git-chglog https://github.com/git-chglog/git-chglog Git を使用したコミットとタグからなる情報を元に CHANGELOG を作成するためのツールです。 まだまともなサンプルが用意出来ていないのですが、以下は Angular のリポジトリで試しに作ってみたイメージです。 2018/02/20 時点の Angular のコミット数がおよそ 9600 程度で、生成までの時間が 2.5〜3.5s なので、まぁストレスなく使えるレベルの速度かなと思います。 僕が普段仕事としている Web Front-End 界隈では、conventional-changelog というツールが存在し、恐らく最も使われています

    Go製のCHANGELOGジェネレータを作った - wadackel.me
  • Go言語で作るマリオ風2Dゲーム - Qiita

    概要 Go言語で2Dのゲームアプリの作り方を調べたので、簡単なゲームをサンプルとして作りました。 こちらにソースコード一式があります。 作成したもの 以下の画像のように、マリオのようなゲームを作りました。 緑の玉がプレーヤーで、青いお化けが敵です。 ステージ上にランダムに配置された落とし穴に落ちたり、ふわふわ動くお化けに当たったりしたら、ゲームオーバーです。 ゲームのステージは2種類あり、上のものの他にも、雪のステージもあります。 使用するライブラリについて engoというライブラリを用いることで、クロスプラットフォームなデスクトップゲームアプリができます。 このライブラリを使用する上で必要となる基的な概念を、以下で説明します。 ライブラリの基的な概念 Entityとは スクリーンに描画をされて、毎フレームごとに移動や当たり判定などの何らかの処理を行いたいものがある場合は、それらをEn

    Go言語で作るマリオ風2Dゲーム - Qiita
  • Go言語でServer作る時に必要な知識メモ - Qiita

    http.Handle("/foo", fooHandler) http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) }) log.Fatal(http.ListenAndServe(":8080", nil)) ここで、http.Handle, http.HandleFuncすると、DefaultServerMuxと言うものにマッピングが登録される。 ServeMux ServeMux = HTTP request multiplexer リクエストを登録済みのURLパターンリストと照合して、マッチしたHandlerを呼び出す 複数マッチする場合はマッチが長いほうが優先される e.g

    Go言語でServer作る時に必要な知識メモ - Qiita
  • GitHub - golang-standards/project-layout: Standard Go Project Layout

    Standard Go Project Layout Translations: 한국어 문서 简体中文 正體中文 简体中文 - ??? Français 日語 Português Español Română Русский Türkçe Italiano Vietnamese Українська Indonesian Overview This is a basic layout for Go application projects. It's not an official standard defined by the core Go dev team; however, it is a set of common historical and emerging project layout patterns in the Go ecosystem. Some of thes

    GitHub - golang-standards/project-layout: Standard Go Project Layout
  • pkg/errors はもう外すことができないライブラリ - 理系学生日記

    ここ 2 ヶ月くらいずっと golang でバックエンドを書いています。 その中で、絶対に外せないなと思っているものの1つが pkg/errors です。 ぼくがこのライブラリを知ったのは、以下の記事でした。 Golangのエラー処理とpkg/errors Don’t just check errors, handle them gracefully 当時は Golang とは無縁の生活を送っていたので、まさか自分が使うことになるとは思いませんでしたが…。 問題 Golang におけるエラーハンドリングの問題 コンテキスト情報 pkg/errors が解決するもの エラーを取り出す 問題 Golang におけるエラーハンドリングの問題 Golang においては、以下のようなイディオムが多数登場してきます。 if err != nil { return err } 処理でエラーが発生している

    pkg/errors はもう外すことができないライブラリ - 理系学生日記
  • Go言語のInterfaceの考え方、Accept interfaces,return structs - Qiita

    Go言語のInterfaceの考え方、Accept interfaces,return structsGo言語interface Go言語の優れた特徴の一つとして、Interfaceが挙げられることがあります。 Interfaceを持つJavaやC#のような他言語と比べ、GoのInterfaceの言語機能における主な違いは 静的言語のように静的にチェックされるメソッドの羅列を宣言できるinterfaceでありながら ダックタイピングや型アサーションによって動的言語のように柔軟な使い方ができることです。 しかしこれだけでは単に、ケースに合わせて使い分けることができる選択肢を得ただけのように聞こえます。 実際にはGo言語のパッケージ、型システム、そして文化的特徴によってGo言語特有の軽量でシンプル、そして有機的なInterfaceを表現できます。 Go特有でGoらしいGoのInterfaceで

    Go言語のInterfaceの考え方、Accept interfaces,return structs - Qiita
  • Goらしいコードを業務でも書くために

    DevFest18 session6 roomA+B

    Goらしいコードを業務でも書くために
  • Goのpackage構成と開発のベタープラクティス

    (images: github.com/egonelbre/gophers) こんにちは。 データエンジニアリンググループ(CETチーム)の寺下です。 自分の所属するCETチームでは今まで主にScalaPythonなどを使ってAPIや基盤を実装してきましたが、最近では徐々にGoによる実装も増えてきており、GAE/GKE上で番運用を行っています。 記事ではGoのプロダクトにおいてDDDライクなpackage構成で実装する際の注意点や、汎用的に通用するであろう実装のTipsについて書いていきます。 記事で紹介する例がベストプラクティスだというわけではありませんので、あくまで実装の一例程度に捉えて頂けると幸いです。 Goのアーキテクチャ Goは言語仕様がシンプルかつフォーマッタが強力なため、syntaxレベルでは開発者によってコードの品質がブレにくいというメリットがあります。 しかしなが

    Goのpackage構成と開発のベタープラクティス
  • GitHub - jmartin82/mmock: Mmock is an HTTP mocking application for testing and fast prototyping

    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 - jmartin82/mmock: Mmock is an HTTP mocking application for testing and fast prototyping
  • Goはオブジェクト指向言語だろうか? | POSTD

    “オブジェクト指向”の意味を当に理解するには、この概念の始まりを振り返ることが必要です。最初のオブジェクト指向言語はSimulaという言語で、1960年代に登場しました。オブジェクト、クラス、継承とサブクラス、仮想メソッド、コルーチンやその他多くの概念を導入した言語です。おそらく最も重要なのは、データとロジックが完全に独立したものであるとする、当時では全く新しい考え方をもたらしたことでしょう。 Simula自体には馴染みがない方も多いかもしれませんが、Simulaからインスピレーションを得たとされるJavaC++、C#、Smalltalkといった言語は皆さんよくご存知でしょう。さらにそこからインスピレーションを得たものとしてObjective-CやPythonRubyJavaScriptScalaPHPPerlなど様々な言語があり、Simulaは現在使用されているポピュラーな

    Goはオブジェクト指向言語だろうか? | POSTD
  • Go at Cybozu

    Go Conference 2018 Spring, 2018-04-15 at Tokyo, Japan https://gocon.connpass.com/event/82515/

    Go at Cybozu