0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Golang学習記録1日目 TodoCLIアプリの作成

Posted at

学んだこと

Golangの標準ライブラリflagを使って、コマンドライン引数を受け取る方法

flagの使いかた

flag.Boolの使い方に少し戸惑った。ブール型のフラグを定義する。コマンドラインでは、変数名だけの時はtrueになり、別途明示的に、=false,=trueと記述できる。文字列や数値はパースエラーとなった。

func main(){
 hoge := flag.Bool("hoge", false, "hoge argument")
 fuga := flag.Bool("fuga", false, "fuga argument")
 flag.Parse()
 fmt.Println("hoge3",*add)
 fmt.Println("hoge4",*list)
}

go run . -hoge=true -fuga
hoge true
fuga true

また、flag.Parse()は一度だけ呼び出す必要がある(自分は2回呼び出そうとして、エラーになりました)

deferの使いかた

deferはGoの制御構文の一つで、関数の実行を遅延するために使う。deferを使って指定した関数は、現在の関数が終了する直前に実行される。

jsonタグの使いかた

jsonタグは、Goの構造体フィールドに付けるタグで、JSONのエンコードやデコード時に使用されるキー名を指定するために使う。

json:"-"と指定すると、そのフィールドがJSONエンコード・デコードから除外される。
json:hoge,omitemmptyと指定すると、そのフィールドの値がゼロ値(空文字列、0,false,nilなど)の場合、そのフィールドをJSONに含めない。

エラーの中身を判定する方法

GOを勉強していると、以下のような記述をよく目にする。

if err != nil{
// 具体的な処理
}

もっと詳細にエラーハンドリングをしたいとき、osパッケージに以下のようなものがある。

// エラーが「ファイルやディレクトリが存在しない」ことを示すかどうか
os.IsNotExist(err)
// エラーが「許可されていない操作」や「アクセス権限がない」ことを示すかどうか
os.IsPermission(err)

必要に応じて、適切にエラーハンドリングをしていきたい。
また、fmt.Errorfでエラーメッセージを出力しようとしたときに、メッセージの末尾にピリオドを入れたら、警告が表示された。どうやら、Goのスタイルガイドでは、エラーメッセージの文字列は句読点で終わらないようにすることが推奨されているらしい。

スライスから要素を削除する方法

追加するときはappend()メソッドを使えばいいが、削除するときはremove()のようなメソッドはないらしい。

今回作成したコード
https://codesandbox.io/p/sandbox/github/codesandbox/sandbox-templates/tree/main/go

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?