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
はじめに 皆さんはgorenameというツールをご存知でしょうか? golang.org/x/tools/cmd/gorenameで公開されている、Goのリファクタリングツールです。 ここでは、このツールを自分のコード上でライブラリとして使う方法と使いやすいリファクタリングツールの形について説明できればと思います。 なお、ここで扱う話はVimConf 2016において、エディタの壁を越えるGoの開発ツールの文化と作成法(ビデオ)というタイトルで話したものと、一部重複していますので、そちらもよかったら見て下さい。 gorenameを使ってみる まずは、gorenameをインストールして使ってみましょう。すでに使ったことある方はここは飛ばしてもらって構いません。 もしかすると、お使いのIDEやエディタによってすでにインストールされているかもしれません。 vim-goをお使いの方は、:GoRe
はじめにGo言語では、標準パッケージであるgoパッケージが字句解析や構文解析を行う機能を提供しています。 go/astやgo/parserを使って構文解析のはじめの一歩を踏み出してみます。 参考Qiita | goパッケージで簡単に静的解析して世界を広げよう #golang 静的解析を学ぶ際に参考になる記事のまとめ(tenntennさん筆)用語説明静的解析とは静的コード解析、静的プログラム解析とも言います。 ソースコードを 実行することなく 解析を行うことを指します。 対義語は動的解析で、ソースコードを実行して解析を行うことを表します。 こちらはプログラマが普段行なっているような検証方法です。 抽象構文木(AST)とはabstract syntax tree. 構文解析の経過や結果から、言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出したツリー状(木)のデータ構造のことで
そうすると、以下のようにAからFまでの問題用のディレクトリが生成されます。 160 ├── a │ ├── go.mod │ ├── main.go │ ├── main_test.go │ └── testfiles │ └── 001 │ ├── stdin.txt │ └── stdout.txt ├── b │ ├── go.mod │ ├── main.go │ ├── main_test.go │ └── testfiles │ └── 001 │ ├── stdin.txt │ └── stdout.txt ... テストケースの追加 AtCoder でのテストケースの実行を、 main_test.go と testfiles/ 以下のファイルを使って簡単に手元で行えます。 stdin.txt には標準入力の例として書か
はじめに Type Sets Proposalとは何か interface/constraintに対して制限を追加する EBNFによる表現 なぜこのように制限するのか 具体例 unionsを標準形に変形する 標準形のunionsを1つにまとめる メソッドのインライン化 最終形 ある型が型制約を満たすかどうかの判定 ある型制約が別な型制約に含まれるかどうかの判定 この制限がないとどうなるか 最後に はじめに この記事は、https://github.com/golang/go/issues/45346 に加えられた修正内容とその意味について説明するもので、Goの"Type Sets" Proposalを読むの続編です。前編を読んでいない方は先に読んでからこの記事を読んだ方がわかりやすいと思います。 前提となる知識は次のようなものです。 Go言語についての初歩的な知識と実装経験(A Tour
Intro 読者の想定知識 この記事で出てくるGo言語仕様用語 サマリー Context Type Parameters Proposalの要点 Type listの必要性 暗黙的な"underlying type matching"の問題 type listからsum typeへ underlying type matchingと代入可能性 underlying type matchingと型switchステイトメント underlying type matchingの表現力の限界 Type Sets Proposal Type sets(型集合) 型Tがinterface ITを実装するための条件 要素を埋め込んだインタフェースのtype set interface elements(インタフェース要素) 任意の型(インタフェース型に限らない) approximation elemen
はじめに time.Now関数を用いたコードをテストする場合、テスト対象のコードに次のような変更を加える必要があります。 引数に現在時刻を渡す パッケージ変数やフィールドなどに現在時刻を返す関数やインタフェースを設定する context.WithValue関数でコンテキストに現在時刻を設ける どの方法を用いてもプロジェクトの初期から考慮する必要があります。途中で変更するとなると修正が箇所を漏れなく探し出す必要があります。また、パッケージ変数に現在時刻を返す関数を設定した場合、テストを並列に実行することを諦める必要が出てくるでしょう。 このような課題を解決するために、testtimeというライブラリを作成しました。 テストの並列実行と時刻の固定 次のようにパッケージ変数を使ってtime.Now関数のラッパーの挙動を変えてテストする手法があります。 var nowFunc func() tim
TIGの辻 (@d_tutuz) です。 アルゴリズムとデータ構造連載の2日目です。今回は身近なところに潜むグラフの例を紹介します。 はじめにデータ構造の一つに「グラフ」があります。グラフは対象物の関係性を数理的に表すものです。世の中の事象をグラフとして定式化することで、問題の見通しがよくなるなど、グラフの応用範囲はとても広く、かつ有用です。グラフそのものの説明については本記事で書ききれる内容ではないので割愛しますが、「グラフ理論」などで検索すればたくさん記事が見つかるでしょう。本記事では、グラフが活用されている例としてGoの標準パッケージにおける Context を紹介します。 グラフとして考えるGoの context パッケージGoの context パッケージは Context インターフェース(コンテキスト)を提供しています。コンテキストはAPIサーバ/クライアント、バッチ処理など
This topic describes how to install multiple versions of Go on the same machine, as well as how to uninstall Go. For other content on installing, you might be interested in: Download and install -- The simplest way to get installed and running. Installing Go from source -- How to check out the sources, build them on your own machine, and run them. Installing multiple Go versions You can install mu
Goでは○○env系のツールは不要 複数バージョンの処理系を混在させるために、○○env系のツールが広く普及している言語はたくさんあります。しかし、すべての言語で必ずしも必要であるわけではないと筆者は考えています。いままで使っていた言語で○○env系のツールを使っていたため、特に深く考えずに他の言語でも利用しているということはあるでしょう。 Goでも○○env系のツールはいくつか存在します。しかし、筆者はGoにおいて複数バージョンのツールチェイン(コンパイラや標準ライブラリ)を混在させる必要があるのは稀でしょう。また、混在させる必要あったとしても公式で方法を提供しているため○○env系のツールは不要です。 むしろ、goenvを使っていてうまく動かない。PATHの設定がうまくいかないなどのトラブルをよく見かけます。(そんな方が検索に引っ掛けてくれることを祈っています)。 Goの後方互換性 G
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く