コマンドラインパラメータ
プログラムは、いくつかの初期化操作を行う実行し、コードを書くとき、彼らはしばしばコマンドを通じてプログラムにパラメータを使徒、それはコマンドライン引数を使用します。
例えば、動作及びプログラムレベルのモードを指定します。
1 --level HTTPServer.go --mode生存を実行して行きます
os.Args
ArgsのパッケージのOSによって可変であってもよい、すべてのコマンドラインパラメータを取得取得すると、文字列のスライスタイプ([]の文字列)で、最初のパラメータは、コマンドライン実行ファイルそのものであります
パッケージメイン インポート( "FMT" "OS" ) 主FUNC(){ fmt.Println(os.Args) } 运行结果: [C:\ユーザー\ chenkai \のAppData \ローカル\ Tempに\ ___ go_build_main_go__3_.exe]
フラグパッケージ
使用状況に関する記録以下の2種類の方法が、あるコマンドラインパラメータを解析フラグパケットを使用します
1)初期化された変数の割り当て(推奨)
パッケージメイン インポート( "フラグ" "FMT" ) FUNCメイン(){ VARモードストリング VARレベルint型 VAR ONOFF BOOL flag.StringVar(&モード、 "モード"、 "生存"、 "ゲームパターン") flag.IntVar(&レベル、 "レベル"、1、 "ゲームレベル") flag.BoolVar(&ONOFF、真の"ONOFF"、 "ゲームONOFF") //解析命令行参数 flag.Parse() fmt.Printf( "%Vの\ tのの容量% \のT%のV \ tの」モード、レベル、ONOFF) } 运行结果: 生存0真
2)受信したポインタ変数を使用して
パッケージメイン インポート( "フラグ"が "FMT" ) FUNCメイン(){ VARモード*ストリング= flag.String( "モード"、 "生存"、 "ゲームパターン") VARレベル* INT = flag.Int( "レベル" 、1、 "ゲームレベル") VAR ONOFF * BOOL = flag.Bool( "ONOFF"、真、 "ゲームONOFF") //解析命令行参数 flag.Parse() fmt.Printf( "%Vの\ tのの容量% \のT%のV \ Tを\ n」、モード、レベル、ONOFF) fmt.Printf( "%Vの\ tの容量%\ tの容量%の\ T"、*モード、*レベル、* ONOFF) } 运行结果: 0xc00004e200 0xc0000620c0 0xc0000620c8 生存率0真
JSONプロトコル
JSONデータ・フォーマットは、クロスプラットフォームは、もちろん、移動はまた、JSONのシリアライゼーションおよびデシリアライゼーションに分割JSONプロトコルをサポートしています
- シリアル化:JSONにフォーマット文字列にデータ型を変換するために行きます
- デシリアライズ:ゴーでのデータ型に作用するJSON文字列
1)の配列(json.Marshal)
構造のJSONをONにします:
メインパッケージ のインポート( 「符号化/ JSON」 「FMT」 ) ユーザ構造体{型 ユーザー名文字列 ニックネーム列の 年齢のint セックス列 メール列 } FUNCメイン(){ VARのユーザーAのユーザー=ユーザー{ 托尼「:ユーザー名」 ニックネーム:「トニー」を、 年齢:36、 性別: "男"、 電子メール: "[email protected]" } VAR jsonData []バイト // FUNCマーシャル(Vインタフェース{})([]バイト、エラー) jsonData、ERR = JSON .Marshal(ユーザーA) 誤る場合!=ゼロ{ fmt.Printf( "JSONマーシャル誤差[%のV]"、ERR) } FMT。println(文字列(jsonData)) } 結果: { "ユーザー名": "托尼"、 "ニックネーム": "トニー"、 "年齢" 36、 "性別"、 "男"、 "電子メール": "[email protected]"}
キーJSON文字列を変更したい場合は、構造のJSONのタグを設定することができます。
メインパッケージ のインポート( "エンコーディング/ jsonの" "FMT" ) ユーザーのstruct {入力 :ユーザー名の文字列`jsonのユーザ名"" ` ニックネーム文字列`JSON: "ニックネーム" ` 年齢INT `JSON: "年齢" ` セックス列を`JSONを: "セックス」` メールの文字列` JSON: "電子メール" ` } FUNCメイン(){ VARのユーザAのユーザー = ユーザー{ ユーザー名: "托尼" 、 ニックネーム: "トニー" 、 年齢: 36 、 セックス: "男"、 電子メール: "[email protected]" 、 } VAR jsonData [] バイト // funcを元帥(Vインタフェース{})([] バイト、エラー) jsonData、ERR: = json.Marshal(ユーザA) の場合!ERR = nilの{ fmt.Printf( "JSONマーシャル誤差[%のV]" 、ERR) } fmt.Println(ストリング(jsonData)) } 运行结果: { "ユーザ名": "托尼"、 "ニックネーム": "トニー"、「年齢":36、"セックス":"男」、 "電子メール": "[email protected]"}
マップは、JSONを回します:
メインパッケージ のインポート( "符号化/ JSON" "FMT" ) FUNCメイン(){ VAR MAPAマップ[文字列]文字列を=作る(地図[ストリング]列) MAPA [ "名" = "ジョニー" MAPA [ "電子メール"] = "[email protected]" VAR jsonData []バイト jsonData、ERR = json.Marshal(MAPA) !場合ERR =ゼロ{ fmt.Printf( "JSONマーシャル誤差[%のV]"、ERR) } fmt.Println (文字列(jsonData)) } 运行结果: { "メール": "[email protected]"、 "名前": "ジョニー"}
2)デシリアライゼーション(json.Unmarshal)
構造体の別のタイプに割り当てられ、次いで第1取得JSONデータ構造、および:JSONバックシーケンスに構造
メインパッケージ のインポート( "エンコーディング/ jsonの" "FMT" ) ユーザーのstruct {入力し たユーザー名"`:ユーザー名の文字列`jsonの" ニックネーム文字列`JSON: "ニックネーム"` 年齢はint `JSON: "年齢"` セックス列を`JSONを」セックス"` メールの文字列`JSON:"電子メール"` } marshalData FUNC()文字列{ VARのユーザAのユーザー=ユーザー{ ユーザー名: "托尼"、 ニックネーム: "トニー"、 年齢:36、 性別: "男"、 電子メール:" [email protected]」 } VAR jsonData []バイト // FUNCマーシャル(Vインタフェース{})([]バイト、エラー) jsonData、ERR = json.Marshal(ユーザーA) ERRなら!= nilの{ =ゼロ{ fmt.Printf( "JSONマーシャル誤差[%のV]"、ERR) } 戻り列(jsonData) } FUNCメイン(){ jsonData:= marshalData() ユーザーユーザーB VAR} = {ユーザー fmt.Println(ユーザーB) // FUNC非整列化(データ[]バイト、インタフェース{V})誤差 ERR:= json.Unmarshal([]バイト(jsonData)、およびユーザーB) ERR =ゼロ{IF! fmt.Printf( "アンマーシャルJSON誤差[%のV]"、ERR) } fmt.Println(ユーザーB) } 結果: {0} //ヌル文字が空白部分であります文字列は、文字列型のデフォルトは空の文字列、int型のデフォルト値は0である {M} [email protected]トニートニー36
カスタムエラー
、見てする必要があり、一般的にはほとんどとコンテンツが、カスタムエラーは、エラーの種類がカスタムを実装するためのインタフェースの間違ったタイプであることをエラー()メソッドを達成することです
エラー・インターフェースは、エラーのタイプで実現次のように、エラー・インターフェースが定義されます。
型エラーインターフェース{ エラー()文字列 }
デモ:あなたはファイルエラーを開くと、エラーがのコンテンツをカスタマイズするために返されます
パッケージメイン インポート( "符号化/ JSON" "FMT" "OS" "時間" ) OpenError構造体を入力し、{ パス文字列 操作文字列 CREATETIME time.Time メッセージ文字列 } FUNC(OPENERR * OpenError)エラー()文字列{ VAR jsonData []バイト jsonData、ERR:= json.Marshal(* OPENERR) = nilの{誤る場合! fmt.Printf( "JSONマーシャル・エラー[容量%]"、ERR) } の戻り文字列(jsonData) } のOpenFile FUNC(ファイルパス文字列)エラー{ VARをOPENERR =&OpenError {} ファイル、ERR = os.Open(ファイルパス) !ERRなら=ゼロ{ openErr.path =ファイルパス openErr.operationは= "読み取り" openErr.createTime = time.Now() openErr.message = err.Error() OPENERRを返す } )(file.Closeを延期 OPENERRを返す } {)(FUNCメイン // ERR:=のOpenFile( "D:\\ golang_workspace \\ file_test \\ source.txt ") ERR =のOpenFile(" D:\\ golang_workspace \\ file_testsdafs」) //fmt.Println(err.Error()) //fmt.Println(err) !場合ERR =ゼロ{ fmt.Println(err.Error()) } }
エンディング〜