コマンドラインパラメータ&& JSONプロトコル&&カスタムエラー

コマンドラインパラメータ

プログラムは、いくつかの初期化操作を行う実行し、コードを書くとき、彼らはしばしばコマンドを通じてプログラムにパラメータを使徒、それはコマンドライン引数を使用します。

例えば、動作及びプログラムレベルのモードを指定します。

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())
	} 

}

  

 

エンディング〜

 

おすすめ

転載: www.cnblogs.com/kaichenkai/p/11223439.html