【Go】go修行16日目time関数など

パッケージ メイン
インポート (
"fmt"
"time"
)
func main () {
t := time 。今()
fmt 。Println (t )
fmt 。println (トン。フォーマット(時間。RFC3339 ))
FMT 。println (トン。年()、 T 。月()、 T 。デイ()、
T 。アワー()、 T 。ミニッツ()、 T 。セカンド())
}
2020-07-05 13:33:12.5673789 +0900 JST m = + 0.002000201
2020-07-05T13:33:12 + 09:00
2020年7月5日13 33 12
パッケージ メイン
インポート (
"fmt"
"regexp"
)
func main () {
//プログラム内で1回だけ
とかならまとめて書く// aaaeなどがヒットする
match 、 _ := regexp 。MatchString ("a([az] +)e" 、 "apple" )
fmt 。Println (一致)
//何度も使いまわす場合、MustCompileで正規表現のみ宣言しておく
r := regexp 。MustCompile ("a([az] +)e" )
ms := r 。MatchString ("apple" )
fmt 。Println (ミリ秒)
// s:= "/ view / test"というようなURLをひっかけたい
r2 := regexp 。MustCompile ("^ /(edit | save | view)/([a-zA-Z0-9] +)$" )
fs := r2 。FindString ("/ view / test" )
fmt 。Println (fs )
//一部の文字だけ
取り出し たい場合fss := r2 。FindStringSubmatch ("/ view / test" )
fmt 。Println (fss 、 fss [ 0 ]、 fss [ 1 ]、 fss [2 ])
}
本当
本当
/ view / test
[/ view / testビューテスト] / view / testビューテスト
パッケージ メイン
インポート (
"fmt"
"sort"
)
FUNC メイン() {
I := [] INT { 5 、 3 、 2 、 8 、 7 }
S := [] ストリング{ "D" 、 "" 、 "F" }
P := [] 構造体 {
名前 ストリング
年齢 int
} {
{ "Nancy" 、 20 }、
{ "Vera" 、 30 }、
{ "Mike" 、 40 }、
{"Bob" 、 50 }、
}
fmt 。Println (i 、 s 、 p )
ソート。Ints (i )
ソート。Strings (s )
//名前順
ソート。スライス(P 、 FUNC (I 、 J INT ) BOOL { リターン P [ I ] 。名
< P [ J ] 。名 })
//年齢順
ソート。スライス(P 、 FUNC (I 、 J INT ) BOOL { 戻り P [ I ] 。年齢
< P [ J ] 。年齢 })
FMT 。Println (i 、 s 、 p )
}
パッケージ メイン
「fmt」をインポート
//自動的に連番を振ってくれるiotaを入れてあげなくても自動的にインクリメントされる
const (
c1 = iota
c2
c3
)
const (
// 0を使わない場合「_」
_ = iota
KB int = 1 << (10 * iota )
MB
GB
)
func main () {
fmt 。Println (c1 、 c2 、 c3 )
fmt 。Println (KB 、 MB 、 GB )
}
0 1 2
1024 1048576 1073741824
パッケージ メイン
インポート (
"context"
"fmt"
"time"
)
FUNC longProcess (CTX コンテキスト。コンテキスト、 CH ちゃん 列) {
FMT 。Println ("run" )
// 2秒の
時間。スリープ(2 * 時間。秒)
fmt 。Println ("finish" )
ch <- "result"
}
func main () {
ch := make (chan string )
// context timeoutを付け加えられる
ctx := context 。背景()
// 1秒
ctx 、 キャンセル := コンテキスト。WithTimeout (CTX 、 1 * 時間。第二)
延期 、キャンセルは()
に行く longProcessを(CTX 、 CH )
用 {
選択 {
場合を < - CTX 。完了():
fmt 。println (CTX 。のErr ())
リターン
ケース < - CH :
FMT 。Println ("success" )
return
}
}
}
走る
コンテキストの期限を超えました
パッケージ メイン
インポート (
"fmt"
"io / ioutil"
"log"
)
func main () {
//パケットやファイルを読み込む場合ioutilを使う
// osとは役割が違う
content 、 err := ioutil 。ReadFile ("main.go" )
if err != nil {
log 。致命的(エラー)
}
fmt 。Println (文字列(コンテンツ))
err := ioutilの場合。WriteFile ("ioutil_temp.go" 、 content 、 0666 );
err != nil {
log 。Fatalln (エラー)
}
}
127.0.0.1:17064でリッスンするAPIサーバー
パッケージメイン
インポート(
「fmt」
「io / ioutil」
"ログ"
)
func main(){
//パケットやファイルをプロキシ場合ioutilを使う
// osとは役割が違う
内容、エラー:= ioutil.ReadFile( "main.go")
if err!= nil {
log.Fatal(err)
}
fmt.Println(文字列(コンテンツ))
if err:= ioutil.WriteFile( "ioutil_temp.go"、content、0666); err!= nil {
log.Fatalln(err)
}
}
コードで終了するプロセス:0
ファイルが生成される
パッケージ メイン
インポート (
"bytes"
"fmt"
"io / ioutil"
)
func main () {
r := bytes 。NewBuffer ([] byte ("abc" ))
//
バッファはReadAllでコンテンツ、 _ := ioutil 。ReadAll (r )
fmt 。Println (string (content ))
}
ABC
パッケージ メイン
インポート (
「fmt」
「io / ioutil」
「net / http」
)
func main () {
resp 、 _ := http 。Get ("http://example.com" )
defer resp 。ボディ。close ()
body 、 _ := ioutil 。READALL (RESP 。ボディ)
FMT 。Println (string (body ))
}
127.0.0.1:37622でリッスンするAPIサーバー
<!doctype html>
<html>
<ヘッド>
<title>ドメインの例</ title>
<meta charset = "utf-8" />
<meta http-equiv = "Content-type" content = "text / html;
charset = utf-8" />
<meta name = "viewport" content = "width = device-width、
initial-scale = 1" />
<style type = "text / css">
体 {
background-color:#f0f0f2;
マージン:0;
パディング:0;
font-family:-apple-system、system-ui、BlinkMacSystemFont、
「Segoe UI」、「Open Sans」、「Helvetica Neue」、Helvetica、Arial、sans-serif;
}
div {
幅:600px;
マージン:5em auto;
パディング:2em;
background-color:#fdfdff;
border-radius:0.5em;
ボックスシャドウ:2px 3px 7px 2px rgba(0,0,0,0.02);
}
a:link、a:visited {
色:#38488f;
text-decoration:なし。
}
@media(最大幅:700px){
div {
マージン:0自動;
幅:自動;
}
}
</ style>
</ head>
<ボディ>
<div>
<h1>サンプルドメイン</ h1>
<p>このドメインは、ドキュメントの例示的な例で使用するためのものです。
あなたはこれを使うかもしれません
事前の調整や許可を求めることなく、文学の領域。</ p>
<p> <a href="https://www.iana.org/domains/example">詳細情報... </a> </ p>
</ div>
</ body>
</ html>
コードで終了するプロセス:0
パッケージ メイン
インポート (
"fmt"
"io / ioutil"
"net / http"
"net / url"
)
func main () {
// URLが正しいものかチェック
ベース、 _ := url 。Parse ("http://example.com" )
// example.comのあとのURLをつけることができる
参照、 _ := url 。解析("/ test?a = 1&n = 2" )
エンドポイント := ベース。ResolveReference (リファレンス)。文字列()
fmt 。Println (エンドポイント)
req 、 _ := http 。NewRequest ("GET" 、 endpoint 、 nil )
//
ヘッダーをつけることができるreq 。ヘッダー。Add ("If-None-Match" 、 "W / xxxx" )
q := req 。URL 。クエリ()
q 。("c" 、"3&%" )fmt を追加します。Println (q )fmt 。println
(Q 。エンコード())のreq 。URL 。
RawQuery = q 。エンコード()
var client * http 。クライアント = &http 。クライアント{}
応答、 _ := クライアント。ド(REQ )
ボディ、 _ := ioutil 。READALL (RESP 。ボディ)
FMT 。Println (string (body ))
}
127.0.0.1:36071でリッスンするAPIサーバー
http://example.com/test?a=1&n=2
map [a:[1] c:[3&%] n:[2]]
a = 1&c = 3%26%25&n = 2
<!doctype html>
<html>
<ヘッド>
パッケージ メイン
インポート (
"encoding / json"
"fmt"
)
タイプ Person struct {
// ``で
囲ってあげると変換してくれるName string `json:" name "`
Age int `json:" age "`
NickNames [] string `json:" nicknames "`
}
func main () {
b := [] byte (`{" name ":" mike "、" age ":20、" nicknames "
:[" a "、" b "、" c "]}` )
var p Person
//ネットワークから入ってきたjsonをStructに自動的に入れてくれる
if err := json 。非整列化(b 、 &p ); err != nil {
fmt 。Println (err )
}
fmt 。println (P 。名前、 P 。 p 。ニックネーム)
//再度変換をかける
v 、 _ := json 。元帥(p )
fmt 。Println (string (v ))
}
マイク20 [abc]
{"名前": "マイク"、 "年齢":20、 "ニックネーム":["a"、 "b"、 "c"]}