golangに関するtakehirohattoriのブックマーク (693)

  • Goで構造体の非公開フィールドにアクセスする方法 - stop-the-world

    Go の 構造体 (struct) におけるフィールドは、フィールド名が小文字始まりであれば 非公開フィールド (unexported field) となり、パッケージ外からアクセスすることができません(参考: Exported identifiers - The Go Programming Language Specification)。 組織内で管理しているソースコードなら単に修正してしまえばよいのですが、外部のライブラリなどの場合、変更してもらうのは大変です。 このような、やむを得ない理由で非公開フィールドを参照したい場合、ちょっとした工夫が必要になります。 試してみたところ、以下の2つの方法で非公開フィールドを取り出すことができました。 reflect.ValueOf と unsafe.Pointer を使う方法 go.mod でモジュールを replace する方法 1. re

    Goで構造体の非公開フィールドにアクセスする方法 - stop-the-world
  • 【Go】errorsパッケージを使ってエラーハンドリングをうまくやる - Qiita

    最近は1からGoでサービスを開発する機会があり、その際にGo1.13から追加された新機能を導入して使ってみたりしています。 例えばerrorsパッケージのAs関数やIs関数などです。 https://golang.org/pkg/errors/ 上記のerrorsパッケージはエラーハンドリングを実装する際によく利用しています。 記事ではerrorsパッケージを使った効果的なエラーハンドリング実装についてまとめます。 記事の構成は最初にエラーハンドリングの設計で目指す要件を簡単に説明したあと、 その要件を満たすようなシンプルなWebアプリケーションの実装を提示します。 実装するエラーハンドリングの設計について 記事で示すアプリケーションのコードでは、下記の項目を満たすようなエラーハンドリングを実装していきます。 エラーの発生箇所がログから確認できる 発生したエラーの原因を推測するためにコ

    【Go】errorsパッケージを使ってエラーハンドリングをうまくやる - Qiita
  • time.Timer#Reset() の正しい使い方 — KaoriYa

    time.Timer は使ってますか? とても基的な要素なのですが意外と正しい使い方は難しいのです。 つい先日ハマった事例とともにその正しい使い方を紹介します。 この記事は Go Advent Calendar 2019 の21日目の記事です。 皆さんは time.Timer は使ってますか? Timer は指定時間経過後に C <-chan Time に現在時刻が 1回だけ投入されるという極めてシンプルな型です。 メソッドも Stop() と Reset() の2つだけと少なくシンプルです。 そう…シンプルなのですが正しく使うには2つほど大事な注意事項があります。 この記事ではそれらを解説します。 TL;DR time.Timer#Stop() 後に time.Timer.C を読み捨てなければいけない場合がある

  • Goのハンズオン環境としてGlitchを使う - YAMAGUCHI::weblog

    はじめに こんにちは、Stackdriver担当者です。この記事はGo Advent Calendar 2019の24日目の記事です。昨日は@fist0さんでした。 私は職業柄「コードラボ」「ハンズオン」「ワークショップ」と呼ばれるような、参加者に実際に手を動かして課題を解いてもらうことで特定の技術や製品を理解してもらうイベントを開催したり講師をしたりすることがあります。その場合にこちらがコントロールしづらいものの一つが実行環境です。諸々のバージョンを固定したり、コンテナを用意したり、などいろいろな方法がありますが、今回はglitchを使ってGoでのハンズオン環境を用意する方法とその使い方を紹介します。 TL;DR Glitchを使ってGo用のハンズオン環境を容易に提供できる。サンプルプロジェクトはこれ。 glitch.com Glitchとは glitch.com ウェブアプリケーション

    Goのハンズオン環境としてGlitchを使う - YAMAGUCHI::weblog
  • GoのDBライブラリと俺たち、それからsqlla - KAYAC engineers' blog

    年末ですね。カヤックでは360度評価の時期でもあるので、みんな振り返りだとか内省などの言葉がいたるところで飛んでいます。この記事でも今年の出来事を振り返りしてみたいと思います。どうも、ソーシャルゲーム事業部ゲーム技研の谷脇です。 この記事はTech KAYAC Advent Calendar 2019 Migration Trackの20日目の記事です。19日目はAWS Lambda Node.js runtime の EoL に疲れたので Go にしていっている話でした。 この記事のあらまし あるWebサービスを作るプロジェクトORMを切り替えた 開発言語はGo言語 DBライブラリ/ORMgithub.com/xo/xoを使っていました ですが開発途中から、私が作成したライブラリであるgithub.com/mackee/go-sqllaに乗り換えました どっちもコード生成系だけれど、

    GoのDBライブラリと俺たち、それからsqlla - KAYAC engineers' blog
  • Go初心者が気を付けること

    Go初心者がやってしまいがちなやらない方がいいことを書き出してみました。 情報検索や環境構築 golang.jpを見に行ってしまう Golang(ごーらんぐ)と呼んでしまう(by hogedigo) depが最新推奨のパッケージマネージャだと勘違いする(Go標準の「go mod」を使おう) 「GO???」環境変数を理解せずに設定しまくる(わからない場合は一切設定しないのが正しい) しょっぱなからgvm,gobrew,goenvなどのマルチバージョンのマネージャを入れようとしてエディタ連携環境構築に失敗する (複数バージョンのGoの運用は既に標準のGoだけでできるようになっている) エディタにgoimportsやgolintを設定し忘れる OSのパッケージマネージャまかせで古いGoやgccgoをインストールしてしまう エラーハンドリング周り err変数名のバリエーションを増やしすぎる(ほとん

  • Go言語で扱えるデータフレーム厳選4つ - Qiita

    はじめに データサイエンティストでなかったとしても、数値データを使って様々な解析をする際には CSV ファイル等ファイルを読み込み、数値の配列としてメモリに保持して、それらをループ等で利用して解析を行っておられると思います。 その際、配列は1次元目に行、2次元目に列、を格納するのが一般的です。多くのケースではこの方法で事足りるのですが、解析を行ううちに「列としてデータの固まりを扱いたい」「ラベル付けされた列を扱いたい」と感じる事が出てくると思います。 これを簡単にしてくれるのが「データフレーム」です。 データフレーム4種 記事では Go 言語から扱えるデータフレームを4つご紹介します。 QFrame https://github.com/tobgu/qframe QFrame は、フィルタリング、集計、およびデータ操作をサポートするイミュータブルなデータフレームです。 QFrame での

    Go言語で扱えるデータフレーム厳選4つ - Qiita
  • Go の命名規則 | micnncim

    記事は Go Advent Calendar 2019 11 日目の記事です。 Go はシンプルな言語機能・シンタックスが特徴であり、命名規則にもそのシンプルさが表れています。 記事では、公式や著名な Go エンジニア、OSS などから見られる Go らしい命名規則を紹介します。 今更なテーマかもしれませんが、意外にも公私共々で命名規則が意識されていないコードを時折見かけるので、自戒も込めて記します。 誤った内容があれば Twitter でご指摘いただければと思います。 パッケージ名簡潔にするEffective Go では、short, concise, evocative なパッケージ名が望ましいとされます。 これはパッケージ名に限らずほとんどあらゆる命名において役立つ指針だと思います。 また、「パッケージ名は一言で何をするかを表すエレベーターピッチだ」という Dave Cheney

    Go の命名規則 | micnncim
    takehirohattori
    takehirohattori 2019/12/14
    読み返す
  • goによるOCRエンジン実行のまとめ - freee Developers Hub

    会計フリー周りのエンジニアをしているよーだ(@rtryoda)です。この記事は freee Developers Advent Calendar 2019 の11日目です。最近各ベンダーやOSSのOCRエンジンをgoで触る機会があったので、実行方法と結果をまとめました。 OCRとは OCRとは光学的文字認識(Optical Character Recognition)のことで、画像などに記されている文字を読み取りテキストデータに変換することです。例えば以下のような画像に対してOCRを実行すると"あいうえお 12345"と認識されることを期待します。 ※各OCRの実行にはこちらの画像を使用します。 今回試すOCRエンジン一覧 OCRエンジン 日語対応 クライアントライブラリ(go) Google Cloud Vision APIgoogleapis/google-cloud-go A

    goによるOCRエンジン実行のまとめ - freee Developers Hub
  • Go言語で「embedded で継承ができる」と思わないほうがいいのはなぜか? - Qiita

    この記事は Go7 Advent Calendar 2019 11日目の穴埋め記事です。 背景 以前、 @mattn さんが↓のようなツイートをされていまして、 embedded と継承は(似てる様な気がするのは分かりますが)一緒にしない方がいいと思います。https://t.co/zalv2y5TVG — mattn (@mattn_jp) August 15, 2019 その際に「ほんそれ!」と激しく同意しながらも、ではなぜ「embeddedを継承と思うべきではないのか」が自分の中でうまく言語化できていませんでした。この機会に整理しておこうと思った次第です。 復習:Embedded Field とは 次の Mom という struct を例に考えてみましょう: type Mom struct { name string } func newMom(n string) *Mom { m

    Go言語で「embedded で継承ができる」と思わないほうがいいのはなぜか? - Qiita
  • GOPATHを掃除してGo Modulesに移行しよう - KAYAC engineers' blog

    こんにちは! ソーシャルゲーム事業部の川添 (@acidlemon) です。 この記事は Tech KAYAC Advent Calendar Migration Trackの8日目です。 今年はみなさまどんな一年だったでしょうか。私もいろいろありましたが、最近ちょっと私がやってたマイグレーションというと自分の開発環境のGOPATHの掃除がありますので、今日はその話を書こうと思います。 2018年までのGOPATH GOPATHというと、昔からGo言語をゴリゴリ書いていた人にはおなじみの、 GOPATH=$HOME/go みたいなのを設定して、go get github.com/kayac/ecspresso すると $GOPATH/src の下に $GOPATH/src/github.com/kayac/ecspresso みたいなディレクトリができてそこにソースコードがcloneされる

    GOPATHを掃除してGo Modulesに移行しよう - KAYAC engineers' blog
  • Go 1.13時代のエラー実装者のお作法 - Qiita

    Goアドベントカレンダーその2の3日目のエントリーです。 Goではエラー処理の方法としてはプリミティブな方法しか提供しておらず、他の言語のユーザーからやいのやいの言われてきました。Go2でそれを改善するぞからプロポーザル募集でいろいろ意見を募っては二転三転みたいな感じで、Go 1.13ではだいぶおとなしい感じに機能拡張されました。基的な方向性としてはgithub.com/pkg/errorsから少し機能を取り込んだ感じです。 すでに、数多くのエントリーやらプレゼンテーションやらでGo 1.13の利用者視点でのerrorsの変更点については触れられてきましたので詳しくはそちらをご覧ください。サマリーとしては下請けのパッケージで出てきた詳細なエラーをラップして扱うための便利な機構がいろいろ追加された感じです。 これらでは主にアプリケーションコードの実装者というかライブラリの利用者向けの説明が

    Go 1.13時代のエラー実装者のお作法 - Qiita
  • golang.org/x/tools/go/analysis を使ってコードを自動修正する - tchsskのブログ

    これは Go3 Advent Calendar 2019 の 3 日目の記事です。 今年 2 月にリリースされた Go 1.12 において、 公式の静的解析ツールである go vet が golang.org/x/tools/go/analysis を使う形に書き直されました。 Analyzer golang.org/x/tools/go/analysis は Analyzer (静的解析モジュール) を作るためのパッケージで、 go vet が行う様々な処理は個別の Analyzer として分離されこのパッケージ配下に格納されています。これらは外部からも参照できるようになっており、サードパーティの Analyzer から参照することもできます。 Diagnostic Analyzer は、解析して見つかった問題を Diagnostic (診断) として報告します。 Diagnostic

    golang.org/x/tools/go/analysis を使ってコードを自動修正する - tchsskのブログ
  • ぼくのかんがえたさいきょうのシングルバイナリ生成ツール - Qiita

    皆さん、シングルバイナリ サイコーですかー!(挨拶) この記事は Go4 Advent Calendar 2019 の3日目の記事です。 今日は「ぼくのかんがえたさいきょうのシングルバイナリ生成ツール」を紹介したいと思います。 ことの発端 毎回言ってるのでもうご存知かもしれませんが、自分はシングルバイナリ大好きな人です。そして、コマンドをパイプでつなげるのが大好きな人でもあります。 そんな私が、あいも変わらずアクセスログの分析をしていました。 全体の処理はこの↓シェルスクリプトのようなかんじです: #!/usr/bin/env bash xz -cd "$@" \ | jsonize \ | jq -c 'select(.method == "GET") | select(.user_agent != "-")' \ | paw-ua \ | insert-db 圧縮されたログを受け取って

    ぼくのかんがえたさいきょうのシングルバイナリ生成ツール - Qiita
  • 状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理

    はじめに マルチスレッドで動作するプログラムの設計は難しい問題です。個々のスレッドの動作は単純に見えても、複数が並行して動作する場合の動作は組み合わせ論的に複雑になります。また、タイミングに依存する不具合は狙って再現することが難しく、通常の単体テストによる検出にも限界があります。 そんなとき、有効な手法がモデル検査です。システムの取りうる状態をあらかじめ網羅的に探索することで、「実際に動作させた際にごく低い確率で踏むバグ」であっても、動作させることなく設計段階で発見することが可能になります。 ところでちょうど先日、デッドロック発見器を自作するハンズオンに参加する機会がありました。内容は非常にシンプルなモデル検査器を実装するというもので、せっかくなのでそのときの成果物を Go のパッケージとしてまとめたものを以下に公開しました。 github.com 以下、このパッケージで何ができるのかを具

    状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理
  • Kubernetes上でのGoによるシンプルなAPIの開発と、その効率化のためのcookiecutter templateを作った話 - エムスリーテックブログ

    エンジニアリンググループ AI機械学習チームの笹川です。 これはエムスリー Advent Calendar 2019の12月4日の記事です。 前日は、CTO 矢崎による 1つの terraform で複数 AWS Account をまとめて構築・管理する でした。 今回は、AIチームでのAPI開発で利用している技術の紹介と、開発の効率化のため、プロジェクトの雛形を自動的に生成するcookiecutterのプロジェクトテンプレートを作成した件について紹介します。 qiita.com 背景 プロジェクトテンプレートの実装 APIとリポジトリの構成 プロジェクトの内容 GoaのDSLファイル Dockerfile Kubernetesの設定ファイル各種 負荷試験用のシナリオファイル まとめ We're hiring! 背景 エムスリーでは、早くからマイクロサービス化に取り組んでおり、m3.co

    Kubernetes上でのGoによるシンプルなAPIの開発と、その効率化のためのcookiecutter templateを作った話 - エムスリーテックブログ
  • 継続的にベンチマークを取るための GitHub Action をつくった - はやくプログラムになりたい

    今年9月に GitHub Action v2 がリリースされました.GitHub Action は GitHub が提供する CI/CD サービスです. 既存のサービスと大きく違う点は,処理を汎用的に Action として切り出して再利用できることです. 例えば,GitHub からのリポジトリのクローン actions/fetch や Node.js のセットアップ actions/setup-node などの基的な実行ステップも Action として実装されています. 今回はこの GitHub Action を利用して,前々からあると良いなと思っていたベンチマークを継続的に取るための Action をつくりました. github.com github-action-benchmark はベンチマークの実行の出力からベンチマーク結果を抽出し,GitHub pages のブランチに JSO

    継続的にベンチマークを取るための GitHub Action をつくった - はやくプログラムになりたい
  • VS Codeのコンテナ拡張機能でGolang勉強環境を構築してみた

    ◆初めに Visual Studio Code Remote – Containersという拡張機能を使って、前から気になってたGo言語の勉強用環境を構築しました。 ◆やってみる 使うものをダウンロードしていきましょう。 ・Visual Studio Code https://azure.microsoft.com/ja-jp/products/visual-studio-code/ ・Visual Studio Code Remote – Containers https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack ・docker https://www.docker.com/ VS Codeでフォルダーを開いて、F1 や Ctrl + Shift +

    VS Codeのコンテナ拡張機能でGolang勉強環境を構築してみた
  • App Engine を布教したくて Go + Datastore の開発環境を Docker Compose でシュッと立ち上げた話 - Qiita

    App Engine を布教したくて Go + Datastore の開発環境を Docker Compose でシュッと立ち上げた話GoAppEnginedatastoredocker-compose 最新1の Google App Engine Goランタイムの開発環境を Docker Compose で簡単に構築してみた話。 あるいはリーズナブルにサーバーを運用できる App Engine を布教する話。 TR;DR; 環境構築 https://github.com/pistatium/appgengine-go112-datastore-docker-compose 動くサンプルはこちら。 docker-compose up -d で開発環境が立ち上がります。 プロジェクトのテンプレートにするなりご自由に。 App Engine + Datastore の構成 非常に安価でのサーバ

    App Engine を布教したくて Go + Datastore の開発環境を Docker Compose でシュッと立ち上げた話 - Qiita
  • 【第9回】Go言語(Golang)入門~ObjectBox導入編~ – 株式会社ライトコード

    ObjectBoxとは ObjectBox とは、GreenRobot のデータベースになります。 GreenRobot は、ネイティブモバイルアプリケーションのライブラリで、馴染みがある人も多いのではないでしょうか? ObjextBox 自体は、笹川の個人開発アプリでも利用経験があり、他のメジャーな DB と比較しても扱いやすい印象を受けたので愛用しています。 前回導入した、Firestore と同様で、NoSQL のデータベースとなります。 Firestore では、Firebaseへの認証が必要でした。 しかし、ObjectBox はローカルに置かれるデータベースになりますので、認証の手間が減るのは嬉しいですね。 ObjectBoxを導入してみよう!それでは、以下のドキュメントを参考に進めていきましょう! 【ドキュメント】 https://golang.objectbox.io/ O

    【第9回】Go言語(Golang)入門~ObjectBox導入編~ – 株式会社ライトコード