20210604のGoに関する記事は3件です。

【Go】正規表現で文字列から数字だけを抽出する方法

実装例 import文に"regexp"を追加 toInt64()の引数にチェックしたい文字列を入れることで数字が抜き出されてint64型が返ってくる func toInt64(strVal string) int64 { rex := regexp.MustCompile("[0-9]+") strVal = rex.FindString(strVal) intVal, err := strconv.ParseInt(strVal, 10, 64) if err != nil { fmt.Println(err) } return intVal } 解説 rex := regexp.MustCompile("[0-9]+") MustCompileは正規表現が間違っていたらエラーを出力する。 ここで"[0-9]+"の部分が数字だけを抜き出すための表現。 strVal = rex.FindString(strVal) strVal(string型)の中に入っている数字だけを抜き出して文字列としてstrValに再代入している。 もしstrValが"str123and456"のようになっていて、全ての数字をリストで抜き出したいときにはFindAllStringを使う。 複数抜き出したい場合 submatchall := rex.FindAllString(str1, -1) for _, element := range submatchall { fmt.Println(element) } Output 123 456 参考 Regular expression to extract numbers from a string in Golang 公式ドキュメントから他の仕様も知りたい方
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

golangでtime.Parse()を使ってstring型をdate型に型変換する方法

環境 Go 1.15 やりたいこと Excelから日付をstring型で持ってきた時は2011/8/10のようになっている。 toDate()関数を使ってgolangのdate型にしたい 結論 ポイントはlayoutを狂いなく2006/1/2に設定すること。 例えばlayoutを2006/1/3とかにするとエラーになる。 parseDate.go strVal := 2011/8/10 layout := "2006/1/2" timeVal, err := time.Parse(layout, strVal) 詰まったポイント 2011/8/10を0埋めして2011/08/10にする処理が必要だと思ってた。 わざわざ0埋めする関数padNumberWithZeroを作った。 func padNumberWithZero(value string) string { i, _ := strconv.Atoi(value) return fmt.Sprintf("%02d", i) } しかしそれでもエラーが発生した エラー内容 2021/06/04 07:39:49 parsing time "2011/08/10" as "2011/09/01": cannot parse "/08/10" as "1"2011/8/10 まとめ golangでtime.Parse()を使いたい時は第一引数にはgolangが定めている日付や時間と全く同じlayoutを指定しないといけないから注意(分かりにくすぎるし面倒くさい、、、) 参考 https://golang.org/src/time/format.go
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Golang net/httpメソッド忘備録

Golang net/httpメソッド忘備録 Golangのnet/httpパッケージのメソット名と引数と軽い説明を随時、記録していきます。 サーバー起動 http.ListenAndServe("", nil) http.ListenAndServe(":8080", nil) 第1引数にはポート番号(string)を渡し 第2引数にはハンドラ(Handle型)を渡す 第1引数 を空に設定するとデフォルトでポート80が設定され、 第2引数は通常nilでデフォルトのDefaultServeMuxというハンドラが設定される。 ハンドラとハンドラ関数 ハンドラ ハンドラとは、クライアントから送られてきたHTTPリクエストを受け付け、処理をする。 また、HTMLテンプレートエンジンを呼び出し、HTTPレスポンスに組み込んでクライアントに返送できるようにする MVCパターンでいう、コントローラーとモデルの役割を果たす。 Go言語におけるハンドラはServeHTTPというメソッドを持つインターフェースのことである。 type Handler interface { ServeHTTP(http.ResponseWriter, *http.Request) } 全てServeHTTPのシグネチャ(関数やメソッドの名前、引数、データ型、返り値等の組み合わせ)を持つ。 ※インターフェースは型のメソッドを集めた塊のイメージ ハンドラ関数 ハンドラのように振る舞う関数のことであり、ハンドラと同じくServeHTTPのシグネチャを持つ。 単にハンドラを作成するのに便利な手段! 下記hello関数はHandlerFunc(hello)を通じてハンドラとしての振る舞いができるようになる。 HandlerFunc型にキャストするイメージが正しいのだろうか? //ServeHTTPのシグネチャを持つhello関数 func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello!") } HandlerFunc型に変換(ハンドラとして使える) helloHandler := HandlerFunc(hello) 混乱のもと、HandleFuncとHandlerFunc HandleFunc・・・ハンドラ関数をDefaultServerMuxに登録する HandlerFunc・・・型の名前 まだ途中です!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む