Go言語の標準ライブラリは、ネットワーク、システム、暗号化、コーディング、グラフィックスなどのすべての側面をカバーしています。標準ライブラリのhttpパッケージを直接使用して、HTTPプロトコルを送受信できます。ネットワークライブラリは、高-パフォーマンスオペレーティングシステム通信モデル(Linuxのepoll、Windows IOCP);すべての暗号化とエンコードは組み込みのサポートであり、サードパーティの開発者から入手する必要はありません。
Go言語コンパイラも標準ライブラリの一部であり、レクサーを介してソースコードをスキャンし、構文ツリーを使用してソースロジックブランチを取得します。Go言語の周辺ツールも、これらの標準ライブラリに基づいて構築されています。ほとんどの要件は、標準ライブラリで完了することができます
Go言語の標準ライブラリは、パッケージの形式でサポートを提供します。次の表に、Go言語の標準ライブラリでの一般的なパッケージとその機能を示します。
言語標準ライブラリパッケージ名関数
bufioバッファリングされたI / O操作
バイトに移動してバイト操作を実現
コンテナパッケージヒープ、リストおよびリングリストコンテナ
暗号化アルゴリズム
データベースデータベースドライバおよびインターフェイス
デバッグさまざまなデバッグファイル形式アクセスおよび
JSONなどの一般的なアルゴリズムをエンコードするデバッグ関数、XML、Base64およびその他の
フラグコマンドライン解析
fmt形式の操作
Go Go言語の字句、構文ツリー、タイプなど。このパッケージを使用して、コード情報を抽出および変更し、
html HTMLエスケープおよびテンプレートシステム
イメージアクセスを一般的なグラフィック形式に変更し、
ioを生成して、I / Oオリジナルアクセスインターフェイスおよびアクセスパッケージ
数学数学ライブラリ
ネットネットワークライブラリを実現し、ソケット、HTTPをサポートします。 、メール、RPCやSMTPなどの
osオペレーティングシステムプラットフォーム
は、パスをカプセル化するためにプラットフォーム操作に依存しません。各オペレーティング
システムのパス操作ユーティリティ関数プラグインGo1.7と互換性があります。コードをプラグインにコンパイルし、オンデマンドで
リフレクト言語リフレクションサポートをロードするためのサポート。コード内の型情報を動的に取得し、変数の値を取得および変更できます
regexp正規表現カプセル化
ランタイムインターフェイス
ソートソートインターフェイス
文字列文字列変換、分析、およびユーティリティ関数
時間時間インターフェイス
テキストテキストテンプレートとトークンレクサー
fmt(フォーマット操作)
文字列フォーマットで一般的に使用される動詞と関数動詞
関数
%vは元の値を値で出力します
%+ v%vに基づいて構造フィールドの名前と値を展開します
%#v出力Go言語構文フォーマット値
% Tおよび出力値Go言語構文のタイプ
%%%出力本体
%bバイナリ整数が表示されます
%O整数が8進数で表示されます
%d 10
進整数%x 16進整数
%X整数が16進および大文字で表示されます。
%Uユニフォーム文字
%f浮動小数点数の全精度出力;%。2f 2桁の精度出力
%pポインター、16進表示
文字列(文字列操作)
package main
import (
"fmt"
"strings"
"strconv"
)
func main(){
var strTest string = " http://www.cnblog.com/kaichenkai "
// 是否以 http:// 开头
ret1 := strings.HasPrefix(strTest, "http://")
fmt.Println("HasPrefix result:", ret1) // HasPrefix result: false
// 是否以 .com 结尾
ret2 := strings.HasSuffix(strTest, ".com")
fmt.Println("HasSuffix result:", ret2) // HasSuffix result: false
// 返回 k 在字符串中首次出现的位置,没有则返回 -1
ret3 := strings.Index(strTest, "k")
fmt.Println("Index is:", ret3) // Index is: 23
// 返回 k 在字符串中最后出现的位置,没有则返回 -1
ret4 := strings.LastIndex(strTest, "k")
fmt.Println("LastIndex is:", ret4) // LastIndex is: 30
// 将 kai 换成 空格,替换1次,返回操作后的结果字符串
ret5 := strings.Replace(strTest, "kai", " ", 1)
fmt.Println("replace complete, strTest is:", ret5) // replace complete, strTest is: http://www.cnblog.com/ chenkai
// 统计子字符串 kai 的出现次数
ret6 := strings.Count(strTest, "kai")
fmt.Println("Count is:", ret6) // Count is: 2
// 将字符串重复 n 次,返回操作后的结果字符串
ret7 := strings.Repeat(strTest, 2)
fmt.Println("Repeat result is:", ret7) // Repeat result is: http://www.cnblog.com/kaichenkai http://www.cnblog.com/kaichenkai
// 转小写
ret8 := strings.ToLower(strTest)
fmt.Println("Lower result is:", ret8) // Lower result is: http://www.cnblog.com/kaichenkai
// 转大写
ret9 := strings.ToUpper(strTest)
fmt.Println("Upper result is:", ret9) // Upper result is: HTTP://WWW.CNBLOG.COM/KAICHENKAI
// 去掉收尾空白字符,返回操作后的结果字符串
ret10 := strings.TrimSpace(strTest)
fmt.Println("TrimSpace:", ret10) // TrimSpace: http://www.cnblog.com/kaichenkai
// 去掉首尾指定字符,返回操作后的结果字符串
ret11 := strings.Trim(strTest, "http://")
fmt.Println("Trim:", ret11) // Trim: http://www.cnblog.com/kaichenkai
// 去掉左侧指定字符,返回操作后的结果字符串
ret12 := strings.TrimLeft(strTest, " http://")
fmt.Println("TrimLeft:", ret12) // TrimLeft: www.cnblog.com/kaichenkai
// 去掉右侧指定字符,返回操作后的结果字符串
ret13 := strings.TrimRight(strTest, "kai ")
fmt.Println("TrimRight:", ret13) // TrimRight: http://www.cnblog.com/kaichen
// 以空格分割,返回子串的 slice
ret14 := strings.Fields(strTest)
fmt.Println("Fields:", ret14) // Fields: [http://www.cnblog.com/kaichenkai]
// 以 .(点)进行分割,返回子串的 slice
ret15 := strings.Split(strTest, ".")
fmt.Println("Split:", ret15) // Split: [ http://www cnblog com/kaichenkai ]
// 以 $ 将 slice 中的元素进行拼接
ret16 := strings.Join(ret15, "$")
fmt.Println("Join:", ret16) // Join: http://www$cnblog$com/kaichenkai
// 将整数转换为字符串
ret17 := strconv.Itoa(1000)
fmt.Println("Itoa:", ret17) // Itoa: 1000
// 将字符串转换为数字,前提是字符串是纯数字组成,不然会报错
ret18, error := strconv.Atoi("100")
if error == nil{
fmt.Println("Atoi:", ret18) // Atoi: 100
}
}
タイムパッケージの定数
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
時間のタイプはDurationであり、Durationは実際にはint64タイプであり、変換できます。
Duration.String()は、Durationの値を文字列に変換できます
now := time.Now()
fmt.Printf("type:%T \n", now)
fmt.Printf("value:%v \n", now)
运行结果:
type:time.Time
value:2019-05-25 17:57:57.9463214 +0800 CST m=+0.003026301
カスタム時間
格式:funcParse(layout、value string)(Time、error)
Parseは、フォーマットされた時間文字列を解析し、それが表す時間を返します。
レイアウトは入力の時間形式を定義し、値の時間形式はレイアウトと一致している必要があります
t, error := time.Parse("2006-01-02 15:04:05", "2019-05-25 19:00:00")
if error == nil{
fmt.Printf("%T \n", t)
fmt.Printf("%v \n", t)
}
运行结果:
time.Time
2019-05-25 19:00:00 +0000 UTC
時間の年、月、日、時、分、秒を取得します。時間タイプ
年:= time.Now()。Year()
月:= time.Now()。Month()
日:= time.Now()。Day()
時間:= time.Now()。Hour()
分: = time.Now()。Minute()
second:= time.Now()。Second()
// 秒级
timestamp := time.Now().Unix()
fmt.Println(timestamp)
// 毫秒
milliTimestamp := time.Now().UnixNano() / 1e6
fmt.Println(milliTimestamp)
// 纳秒
NanoTimestamp := time.Now().UnixNano()
fmt.Println(NanoTimestamp)
运行结果:
1558782662
1558782662752
1558782662755344000
デモ:統計プログラムの実行時間
func stats(){
time.Sleep(time.Second)
}
func main(){
var startTime int64 = time.Now().UnixNano() / 1e6
stats()
var endTime int64 = time.Now().UnixNano() / 1e6
fmt.Println("use time:", endTime - startTime)
}
运行结果:
1001