タグ

ブックマーク / qiita.com/tenntenn (11)

  • gorenameをライブラリとして使う #golang - Qiita

    はじめに 皆さんはgorenameというツールをご存知でしょうか? golang.org/x/tools/cmd/gorenameで公開されている、Goのリファクタリングツールです。 ここでは、このツールを自分のコード上でライブラリとして使う方法と使いやすいリファクタリングツールの形について説明できればと思います。 なお、ここで扱う話はVimConf 2016において、エディタの壁を越えるGoの開発ツールの文化と作成法(ビデオ)というタイトルで話したものと、一部重複していますので、そちらもよかったら見て下さい。 gorenameを使ってみる まずは、gorenameをインストールして使ってみましょう。すでに使ったことある方はここは飛ばしてもらって構いません。 もしかすると、お使いのIDEやエディタによってすでにインストールされているかもしれません。 vim-goをお使いの方は、:GoRe

    gorenameをライブラリとして使う #golang - Qiita
    oinume
    oinume 2021/10/02
    ライブラリとして使うと一括で置換できるのでいいなぁ
  • goパッケージで簡単に静的解析して世界を広げよう #golang - Qiita

    はじめに Goの標準パッケージには、goパッケージというものがあり、Goのソースコードを静的解析するのに便利な機能が提供されています。 goパッケージを使うと、以下のようなツールが簡単に作れます。 ソースコードを自動生成するツール ソースコードに対してlintやフォーマットを行うツール リファクタリングツール ソースコードから特定の何かを検索するツール ミニ言語の処理系 また、goパッケージを学ぶとコンパイラや言語処理系の知識も学べるので、他の標準パッケージとはまた少し違った知識を得ることができ、プログラミングの知識の幅が広がります。 しかしながら、goパッケージに関する日語の文献は少なく、学習しづらいのが辛いところです。 私もこれまでgoパッケージについて、Qiita上でいくつか記事を書いてきましたが、どの記事が何をするときに役に立つのか分かりづらくなっていました。 そこでこの記事では

    goパッケージで簡単に静的解析して世界を広げよう #golang - Qiita
  • ASTを取得する方法を調べる #golang - Qiita

    はじめに みなさん、メリークリスマス! 22日の枠に欠員が出たので、go/parserパッケージを使ってAST(抽象構文木)を取得する方法についてまとめたいと思います。 goパッケージについては、簡単な式の評価機を作ってみるという記事も書いているので、そちらもぜひ読んで下さい。 なお、この記事を執筆時点のGoの最新バージョンは1.7.4です。 ノード go/parserパッケージでは、いくつかのParseと名前のついた関数でAST(抽象構文木)を取得することができます。ASTの各ノードを表す型は、go/astパッケージで提供されています。そしてそれらの型は、以下のast.Nodeインタフェースを実装するように定義されています。 type Node interface { Pos() token.Pos // position of first character belonging to

    ASTを取得する方法を調べる #golang - Qiita
  • 簡単な式の評価機を作ってみる #golang - Qiita

    はじめに 皆さんはgoパッケージを使ったことはありますか?私は、GoGo!言いながら、恥ずかしながら、あまりまともに使ったことがありませんでした。最近は、仕事でもAST(抽象構文木)を弄り倒すことがあるので、今回はgoパッケージに触れたいと思います。 ここでは、簡単な四則演算などを評価し、結果を返すREPLを作ってみます。一見難しそうですが、ほとんどgoパッケージの機能を使うので、非常に簡単です。 ASTへパースする まずは入力された文字列をパースし、ASTを生成してみます。ここでは、式の評価なので式単位でパースします。パースには、parser.ParseExprを用います。 たとえば、以下のように使用できます。 expr, err := parser.ParseExpr("1+1") if err != nil { panic(err) } ast.Inspect(expr, func

    簡単な式の評価機を作ってみる #golang - Qiita
  • 終了したことを他の複数のゴルーチンに伝えるのにチャネルのcloseを使う #golang - Qiita

    複数のゴルーチンに対して、何かしらの処理が終了したことを伝えるのにチャネルのcloseが使えます。 これはruiさんの以下の記事にも書かれていることですが、ここでは閉じれたチャネルの挙動を見つつ、例を挙げて説明していきます。 Goでチャネルにブロードキャストするにはcloseを使う 閉じられたチャネルの挙動 閉じられたチャネルは、受信したり送信したりした場合、どのような挙動をするのでしょうか? 実際に送信や受信を行ってみて挙動を確かめてみましょう。 送信 閉じられたチャネルに対して送信してみましょう。 Go Playgroundで見る package main func main() { ch := make(chan struct{}) close(ch) ch <- struct{}{} }

    終了したことを他の複数のゴルーチンに伝えるのにチャネルのcloseを使う #golang - Qiita
  • Goの初心者が見ると幸せになれる場所 #golang - Qiita

    公式サイト A Tour of Go Web上で実行しながら学ぶことができる公式のチュートリアルです。 チュートリアル 公式のチュートリアルです。初学者向けからジェネリクスのチュートリアルなども用意されています。 A Tour of Goが終わった後に取り組むと良いでしょう。 Go Wiki Go Code Review Commentsなどが掲載されているGitHub上のWikiです。 パッケージドキュメント 標準パッケージやサードパーティ製のパッケージのドキュメントが見れるサイトです。検索もできます。 入門 プログラミング言語Go完全入門 筆者が作っている巨大なGoの入門資料です。なぜGoが作られたのか、から最新のジェネリクスの情報、静的解析まで扱っています。 Gopher道場 Goを体系的に学べる場です。10時間くらいある動画教材(自習室から入手可)もあります。 Go の最初の手順

    Goの初心者が見ると幸せになれる場所 #golang - Qiita
  • Go言語における埋め込みによるインタフェースの部分実装パターン - Qiita

    構造体 Go言語には、クラスがない。そのため、代わりに構造体(struct)を使い、その型にメソッドを設けることで似たような振る舞いをさせる。 package main import "fmt" type Person struct { FirstName string LastName string } func (p *Person) Name() string { return p.FirstName + " " + p.LastName } func main() { person := &Person{"Taro", "Yamada"} fmt.Println(person.Name()) }

    Go言語における埋め込みによるインタフェースの部分実装パターン - Qiita
  • [Go言語] deferに関する実験 - Qiita

    package main import "fmt" func f() { i := 0 defer fmt.Printf("i is %d", i) i = 100 } func main() { f() } package main import "fmt" func f() (ret int) { defer func(n int) { fmt.Println(n) fmt.Println(ret) }(ret) // retはゼロ値で初期化されている return 100 } func main() { fmt.Println(f()) }

    [Go言語] deferに関する実験 - Qiita
  • インタフェースの実装パターン #golang - Qiita

    はじめに この記事は,以下の過去にQiitaに投稿したインタフェースの実装パターンの記事に,typeやメソッド,インタフェースの基的な説明を追加してわかりやすくしたものです. Go言語における埋め込みによるインタフェースの部分実装パターン structにinterfaceを埋め込んで,動的に入れ替えるパターン まずtypeとメソッド,基的なインタフェースの実装方法についておさらいすることで,さまざまなインタフェースの実装パターンを扱う準備をしましょう. typeで型を宣言する まずはじめに,Go言語における型の宣言方法をおさらいします.Go言語をはじめたばかりの方の中に,typeの使い方を限定的にしか理解していない方をよく見かけます.ご存知のとおり,typeは型を宣言するために使うキーワードです.以下のように,構造体型やインタフェース型の宣言の際に,使用することが多いでしょう. //

    インタフェースの実装パターン #golang - Qiita
    oinume
    oinume 2014/09/17
    構造体にもfmt.Stringer埋め込めるんだ
  • [Go言語]structにinterfaceを埋め込んで,動的に入れ替えるパターン - Qiita

    正直,何に使えるのよくわかりませんが,以下のようにすると動的にinterfaceの実装方法を変更できることに気づきました. structの匿名フィールド(埋め込み)として,interfaceを設定すると,そのstructも埋め込んだinterfaceを実装していることになります.埋め込んだinterfaceは匿名フィールドなので,型名でアクセスして入れ替えることができます. 以下の例では,fmt.Stringerインタフェースの実装を動的に変更しています. Go Playgroundで実行する package main import ( "fmt" "strings" ) type StringerFunc func() string func (sf StringerFunc) String() string { return sf() } type Person struct { fm

    [Go言語]structにinterfaceを埋め込んで,動的に入れ替えるパターン - Qiita
    oinume
    oinume 2014/08/13
    動的にメソッドを置き換えるって感じかなぁ
  • Go言語でWebAppの開発に必要なN個のこと - Qiita

    元ネタ あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずGo言語について知っていることを書いた。 パッケージマネージャ 標準でついてるgoツールを使おう。必要なライブラリはリポジトリから、go getで取ってこよう。 http://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies アプリケーションサーバ 標準パッケージのnet/httpパッケージを使えばhttpサーバを動かすことができる。apacheやnginxで動かしたかったら、標準パッケージのnet/http/cgiパッケージやnet/http/fcgiパッケージを使えばいい。 http://golang.or

    Go言語でWebAppの開発に必要なN個のこと - Qiita
  • 1