タグ

Goに関するmasudaKのブックマーク (61)

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

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

    「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング
    masudaK
    masudaK 2020/03/18
    素晴らしい!ぜひご活用ください!
  • Goによる静的解析入門 - BASEプロダクトチームブログ

    この記事は「BASE Advent Calendar 2018」24日目の記事です。 devblog.thebase.in はじめに BASEでエンジニアとしてインターンをしている池田です。今日はクリスマスイブということで、以前から気になっていたグリューワイン(ドイツのクリスマスに欠かせないホットワイン)をクリスマスマーケットに飲みに来ています。 普段はBASE BANKというBASEの100%子会社にて金融事業の立ち上げを行っています。BASE BANKのプロダクトのAPIGoを使って書かれているのですが、BASEでのGoの使用はこのプロジェクトが初だったので、開発基盤整備の一貫で様々なlinterの導入を行いました。その際にlinterの内部がどうなっているかに興味を持ち、すごく簡単なlinterの仕組みを実際に作ってみたので、今回はその知見をお話しします。 Goと静的解析 Goには

    Goによる静的解析入門 - BASEプロダクトチームブログ
    masudaK
    masudaK 2018/12/27
  • Goのエラー処理とpkg/errorsの使い方 - Qiita

    やっぱり自分なりにまとめないと理解した気になれないので、まとめてみることにする。 https://godoc.org/github.com/pkg/errors Golangにおけるエラー処理(おさらい) Goは言語仕様として例外機構(Exception)がない。例外ではなく、複数の戻り値を返せるという特徴を利用し、最後の戻り値をエラーに割り当てるということをする。throwを書きたくなったら代わりにreturnを書くわけだ。 import "fmt" // helloはnameが空だったらエラー扱いにする func hello(name string) (string, error) { if name == "" { return nil, fmt.Errorf("name is invalid") } return fmt.Sprint("hello %v", name) }

    Goのエラー処理とpkg/errorsの使い方 - Qiita
    masudaK
    masudaK 2018/11/13
  • Go の並行処理 - Block Rockin’ Codes

    intro 先日の Go のカンファレンス GoCon で、 Go の並行処理周りについて発表させて頂きました。 Go Conference 2013 spring - connpass 具体的には Goroutine や Channel の話ですが、これらの機能は結構面白くて、いじって遊んでるだけでもわくわくします。 Go の並行処理は、設計方針がわりと特殊だと思うのですが、設計がシンプルなので分かるとそこまで難しくはないです。 (使いこなすのは、経験が必要そうですが) 今回話すにあたって色々調べましたが、発表時間の都合上省いたものもあるし、質疑応答で聞かれて応えられなかったこともあるので、 ここでまとめて置こうと思います。 発表資料 今回の発表資料はこちらです。 このブログの内容は、これをベースにします。 http://jxck.node-ninja.com/slides/gocon-

    Go の並行処理 - Block Rockin’ Codes
    masudaK
    masudaK 2018/09/30
  • golang で汎用的な任意数のオプションを取るメソッドの作り方 | Hori Blog

    grpc の DialOption のオプション設定方法が上手いなーと感心したのですが、初見で理解するのが難しかったので備忘録がてら解説してみます。 やりたいこと golang にはオーバーロード(同名メソッドでも引数によって呼び出されるメソッドが変わるやつ)がないので、任意のオプションを取るメソッドを作るのに工夫が必要です。 可変引数の仕組みはあるので任意数の値をメソッドに渡したり、オプション用の struct を引数に取ることで実装できなくはないのですがデメリットがあります(後述)。 DialOption がそのへんの葛藤を上手いこと解決していたのでご紹介。 ダメだった例 はじめに検討したのですがよろしく無かった例です。 可変引数でオプションを渡す オプション用の struct を渡す 可変引数でオプションを渡す golang では可変引数の仕組みがあるので、任意数のオプションを渡すこ

    golang で汎用的な任意数のオプションを取るメソッドの作り方 | Hori Blog
    masudaK
    masudaK 2018/09/29
  • 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
    masudaK
    masudaK 2018/09/24
  • Go net/httpパッケージの概要とHTTPクライアント実装例 - Qiita

    Goは標準パッケージが充実しているのが特徴の1つだが、net/httpも例外ではなくHTTPクライアントの処理が簡単に書ける GET 例えばGETでHTTPリクエストを行う処理を実装したい場合、3通りの方法がある http.Get 関数を実行する Client 型の Get(url) メソッドを実行する Client 型の Do(request) メソッドを実行する 単純なアクセスなら1で良い 一番単純な http.Get(url)によるGET url.Values でクエリを組み立てて、Get関数で指定したURLの末尾にEncode結果をパラメータとして付加すればOK url.Valuesはクエリパラメータをkey-value形式で保持する型。ペアを追加するAddや上書きするSet等のメソッドが提供されている 組み立てたクエリはEncodeメソッドを呼び出す事で?key1=value1&

    Go net/httpパッケージの概要とHTTPクライアント実装例 - Qiita
    masudaK
    masudaK 2018/04/15
  • Go http.RoundTripper 実装ガイド - Qiita

    こんにちわ、ワカルのアドベントカレンダー2日目を担当する包です。 最近はGoばかり書いているので、Goネタです。 外部への http アクセスをする時に構造を理解しておくと便利な、http.RoundTripper について書きます。 http.RoundTripper とは Go で、外部にhttpアクセスするときには、 net/http パッケージにある、 http.Client を使います。 また、いろいろなAPIのクライアントライブラリの中でも殆どの場合 http.Client が使われていて、定義は以下のようになっています。(一部コメント省略) type Client struct { // Transport specifies the mechanism by which individual // HTTP requests are made. // If nil, Def

    Go http.RoundTripper 実装ガイド - Qiita
    masudaK
    masudaK 2018/04/15
  • `dep ensure -vendor-only=true` の使い所 - Qiita

    TL;DR docker buildの高速化。 Gopkg.tomlとGopkg.lockに変更がない場合はキャッシュが利用されてビルドの時間を短縮できる。 FROM golang:1.10 WORKDIR /go/src/github.com/munisystem/test COPY Gopkg.toml Gopkg.lock ./ RUN dep ensure -v -vendor-only=true COPY . . RUN dep ensure -v RUN go build 解説 docker buildのCOPY及びADDのレイヤでキャッシュが効くか否かは対象のfileのhash値によって決まる。 例えばRailsアプリケーションのDockerfileでは以下のような記述が多く見受けられる。 こういったDockerfileを書くことにより、コードベースに変更を加えてもGemfi

    `dep ensure -vendor-only=true` の使い所 - Qiita
    masudaK
    masudaK 2018/04/11
  • go tool traceでgoroutineの実行状況を可視化する - ( ꒪⌓꒪) ゆるよろ日記

    こんにちわ。しいたけです。今日はgoroutineの実行状況をいいかんじに可視化するツールの話です。 goのプロファイリングツールと言えば、 runtime/pprof や net/http/pprof ですよね。これらの使い方はググればすぐに出てくるのですが、 詳細なtraceを取得して可視化できる runtime/trace については、日語の情報が殆ど無いので書いてみましいたけ。 runtime/trace はgoroutineの実行状況やsystem callのイベント、Heapやnetworkの状況をこんな感じに可視化してくれるので便利です。 これは自作のクローラーを動かしている際のtraceを可視化したもので、横軸がタイムラインになっており、上段に Heapの使用状況やgoroutineとos threadの数が, 下段はnetworkやProccesor(GOMAXPROC

    go tool traceでgoroutineの実行状況を可視化する - ( ꒪⌓꒪) ゆるよろ日記
    masudaK
    masudaK 2018/04/11
  • Go言語のスタックとヒープ

    GoCon 2013 Autumn で「Go言語のスタックとヒープ」という発表をしました。 資料はこちら: http://goo.gl/s6at62 スライドだけでは分かりにくい部分もあるので、ブロク記事として以下にも記しておきます。(この記事を読めば、スライドは読まなくてOKなはず) スタックとヒープについて 実行時に動的にメモリを確保する領域として、スタックとヒープがある。 スタックメモリは関数のコールスタックを格納していて、ローカル変数、引数、戻り値もここに置かれる。 スタックのPushとPopは高速なので、オブジェクトをスタックメモリに確保するコストは小さい。ただし関数を抜けてスタックがPopされると解放されるので、関数の寿命を超えてオブジェクトは生存できない。 一方のヒープメモリは、コールスタックとは関係ないので、関数スコープに縛られずにオブジェクトを確保しておける。ただし空き領

    Go言語のスタックとヒープ
  • GitHub - kylelemons/godebug: Debugging helper utilities for 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. Dismiss alert

    GitHub - kylelemons/godebug: Debugging helper utilities for Go
    masudaK
    masudaK 2018/02/28
    良さそう
  • AWS LambdaにGoサポートが入ったので使ってみた - blog::wnotes.net

    ついにサポートされた(嬉しい) 急にリリースされたようなので早速使ってみた。 Hello, Lambda Go ドキュメントにもあるように、公式のSDKが配布されているので、それをimportして使えばいい。 package main import ( "fmt" "context" "github.com/aws/aws-lambda-go/lambda" ) func HelloWorld(ctx context.Context) (stringundefined error) { return "Helloundefined Lambda Go!"undefined nil } func main() { lambda.Start(HelloWorld) } これだけ。後はバイナリを生成してアップロードすればinvokeしてくれるんだけど、ちょっとだけ注意点が。 ハンドラ名とバイナリ

    masudaK
    masudaK 2018/01/16
  • GitHub - google/skylark: Skylark in Go: the Skylark configuration language, implemented in Go [MOVED to go.starlark.net]

    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 - google/skylark: Skylark in Go: the Skylark configuration language, implemented in Go [MOVED to go.starlark.net]
  • Goでテストを書く(テストの実装パターン集) - Qiita

    Goでテストを書くお話です。 基的なところから、応用的なテストの書き方(パターン?)をまとめておくことにしました。 ポイントを先に列挙します: テストのエラーメッセージは丁寧に書こう テーブルテストを活用してパターンを整理しながら網羅しよう t.Runをつかって大きなテストを分割しよう t.Helperをつかってテストエラーの箇所をわかりやすくしよう テスト用のデータは testdata ディレクトリに置こう Setup/Teardownをうまく書いてテストの見通しをよくしよう 等 では、見ていきましょう。

    Goでテストを書く(テストの実装パターン集) - Qiita
    masudaK
    masudaK 2017/12/20
  • ええっ!? 文字列で書くの!? ログレベル付きロガーhashicorp/logutilsのご紹介 - Qiita

    全世界100万人のコンパイルエラーラバーの皆さんこんばんは、この記事はGo Advent Calendar 2017の18日目の記事です。 標準パッケージのlog Goで作るものはミドルウェアだったり、Webアプリケーションだったり、CLIツールだったり様々だと思いますが、ちょっと凝ったことをするとついてくるものといえばロギングですよね。Goにはlogという標準のログライブラリがありますが、 標準パッケージなのでimport "log"だけで使える インターフェイスがシンプル。だいたいfmt 複数goroutineから扱っても混ざらない そのまま使っても時間が出る などなど、最低限の実用性があります。ただ、他の言語のロガーと比べると、 ログレベル 構造付きログ などの機能が不足していると言えます。 よく使われているロガー そもそもこの記事を書くきっかけとなったのが、Go Conferenc

    ええっ!? 文字列で書くの!? ログレベル付きロガーhashicorp/logutilsのご紹介 - Qiita
    masudaK
    masudaK 2017/12/19
    こういうのもあるのか。でも、自前で頑張らなくてもいいんじゃないかと思う派。
  • Goのパッケージ構成の失敗遍歴と現状確認

    この記事は Gunosy Advent Calendar 2017の5日目の記事です。前回の記事はGunosyのパーソナライズを支える技術 -ワークフロー編-でした。 GoAPIを書くときの問題僕の在籍するGunosyはGoを昔(?)から番採用しておりまして、ノウハウも潤沢に溜まっている企業だと言えます。 しかし、contextの扱いやベストなパッケージ構成、テスト、net/httpでAPIを書くノウハウなどなど、迷うことは多々あります。 これは弊社特有の事情ではなく、Goのサーバーサイドエンジニア全員にとっての問題です。中でも、パッケージ構成をどうすればいいのか(相互参照せずに快適に開発を進められるパッケージ構成とは)を見つけるのは結構難しく、各々のチームにお任せ、という状況です。 今回は上記の問題のうち、パッケージ構成に踏みこんで見たいとおもいます。会社でもよくパッケージ構成をどう

    Goのパッケージ構成の失敗遍歴と現状確認
    masudaK
    masudaK 2017/12/07
    悩んだところとかも書かれててすごく参考になるけど、結局何が最強かは分からない
  • GOのORM sqlboiler 使ってみた  - Qiita

    この記事はGo2 Advent Calendar 2017の3日目の記事です。 良い機会だったので初投稿してみました。 普段ORMgormを使用しているのだがsqlboilerはパフォーマンスがgormに比べてパフォーマンスがよいという話を聞いて実際に使ってみたのでまとめを記事にしました。 sqlboilerとは データベーススキーマに合わせたGOORMを生成ツールです。 gormとかとは違い、コードファーストではなくデータベースファーストのORMとなってます。 つまりどういうことかというと、データベーススキーマを先に作成しそこからgoのコードを生成してくれます。 準備編 今回Migrationツールのgooseを使用してデータベーススキーマを管理していきます。 依存解決ツールはdepを使います。(説明はしませんが) sqlboilerとgooseをインストール # sqlboiler

    GOのORM sqlboiler 使ってみた  - Qiita
    masudaK
    masudaK 2017/12/03
    ぱっと見良さそう。次なんか作るときこれでもよいかも。
  • go言語初心者が図を書きながらgoroutineやgo channelを理解する(Part1) - Qiita

    自分の理解を深めるために、図を書いて少しずつ(baby stepsで)goroutineやgo channelを理解していきたいと思います。 並行と並列の違い まずは混同しやすい並行(concurrent)と並列(parallel)の違いを意識しておきたいと思います。(英語の方がわかりやすい気がするのは気のせいでしょうか) 検索すると色々と定義に違いがあって、私ごときがいい加減なことを書くと、すぐにマサカリで頭を真っ二つにされてしまうことがわかりました。 Erlangを作ったJoe Armstrongの5歳児にも分かる例えの図がわかりやすいので引用します。 ざっくりいうと、並行処理では共通のリソース(例えばCPUやメモリ)をやりくりしながら複数のタスクをさばいています。 並列処理は、それぞれ独立したリソースを使って複数のタスクをさばいています。 ちなみにRob Pike先生の有名なスライド

    go言語初心者が図を書きながらgoroutineやgo channelを理解する(Part1) - Qiita
    masudaK
    masudaK 2017/10/24
  • Treasure 2017 の研修資料は Go を学ぶのに最高だった - kakakakakku blog

    Go 関連のを読んだり,サンプルコードを写経するだけではなく,もっと実践的に勉強したいなと思って調べていたら,VOYAGE GROUP の Treasure 2017 と言うインターンシップの研修資料GitHub に公開されていることを知って,さっそく挑戦してみた.数日間取り組んでみて,とにかく素晴らしかったので,紹介したいと思う.suzuken 先生,素晴らしすぎます! Go入門 GitHub - voyagegroup/talks 学べるテーマ Go研修資料とは言え,幅広いテーマで Go を学ぶことができる点が素晴らしかった.ザッと挙げるとすると以下のようになる.テーマを見るだけで,もうワクワクしてくるのではないだろうか? アルゴリズム実装とテストコード フィボナッチ数 スタック CLI net/http curl 実装 スクレイピング実装 コンカレンシー goroutine

    Treasure 2017 の研修資料は Go を学ぶのに最高だった - kakakakakku blog