時間関数

  • RFC3339がよく使われるPostgresqlなどで
パッケージ メイン

インポート (
    "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

正規表現

  • WebサーバのバックエンドでURLによって処理を検出する場合などに使う
パッケージ メイン

インポート (
    "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

環境

  • Webアプリなどでユーザーリクエストの処理が長い場合の続き設定などに使う
パッケージ メイン

インポート (
    "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 
        } 
    } 
}
走る
コンテキストの期限を超えました

ioutil

パッケージ メイン

インポート (
    "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

ファイルが生成される

image.png

パッケージ メイン

インポート (
    "bytes" 
    "fmt" 
    "io / ioutil" 
)

func  main () { 
    r  :=  bytes 。NewBuffer ([] byte ("abc" ))
    // 
    バッファはReadAllでコンテンツ、 _  :=  ioutil 。ReadAll (r )
    fmt 。Println (string (content ))
}

ABC

ネットワーク系パッケージ

  • URLを読む
パッケージ メイン

インポート (
    「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>
<ヘッド>

アンマーシャル

  • jsonデータをネットワークから受け取る場合などに利用
パッケージ メイン

インポート (
    "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"]}

<スポンサーリンク>

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)