質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

2764閲覧

golang: 標準入力でタブキー押下時に入力補完したい

cookieman

総合スコア128

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2017/10/05 14:30

###前提・実現したいこと
golangでコマンドラインツールを作成していますが、
そのツールの機能として入力補完機能を実現したいと思っています。
(入力補完機能とはタブキーを押下するたびに前方一致で該当するキーワードを自動表示するもののこと)
具体的には、標準入力(os.Stdin)で、タブキー押下時までに入力した文字列を取得したいのですが、
Enterキー押下した後でないと入力文字列を取得できない状態です。

###該当のソースコード

golang

1// bufio.NewScanner を使ったバージョン 2func main() { 3 stdin := bufio.NewScanner(os.Stdin) 4 for stdin.Scan() { // Enterキー押下しないと発動しない 5 if text := stdin.Text(); text != "" { 6 fmt.Fprint(os.Stdout, text+"\n") 7 } 8 } 9} 10 11// bufio.NewReader を使ったバージョン 12func main() { 13 delim := []byte("\t") 14 stdin := bufio.NewReader(os.Stdin) 15 for { 16 if bs, err := stdin.ReadBytes(delim[0]); err == nil { 17 // Enterキー押下しないと読み込めない 18 fmt.Fprint(os.Stdout, string(bs)+"\n") 19 } else { 20 println(fmt.Sprintf("err:%+v", err)) 21 } 22 } 23} 24

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

補完を行うには以下の様なパッケージを使う必要があります。

https://github.com/nemith/goline

https://github.com/chzyer/readline

https://github.com/mattn/go-rl

どれも Windows も対応しているのでマルチプラットフォームで使えると思います。

投稿2017/10/07 05:37

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cookieman

2017/10/07 11:38

便利なパッケージありがとうございます。参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問