當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Go 命令行参数,JSON 序列化与反序列化
生活随笔
收集整理的這篇文章主要介紹了
Go 命令行参数,JSON 序列化与反序列化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#### Go 命令行參數,JSON 序列,反序列化
這一節來學習一下Go 如果解析命令行參數,以及JSON 的序列化及反序列化;
命令行參數對于熟悉Linux 的同學來說比較清楚,如: ls -a , wc -l ... 其中,-a, -l 都是命令行參數;
JSON 的序列化與反序列化在WEB 開發中很常見的, 這節帶領大家學習一下在Go 中如何操作JSON
##### 命令行參數
在Go 中os.Args 是一個字符串切片,存儲了所有的命令參數 package mainimport ("fmt""os" )func main(){fmt.Printf("命令行參數有%d個\n",len(os.Args))for i,v := range os.Args {fmt.Printf("當前是第%d個參數,參數是%s\n",i+1,v)} }
##### 使用flag 包來解析命令行參數
上面os.Args 是比較原始的方式解析參數,對于帶指定的參數形式,就比較吃力了;
使用flag 包可以解決這個問題 package mainimport ("flag""fmt" )func main() {var username stringvar password stringvar host stringvar port intflag.StringVar(&username,"u","","database username ,default empty")flag.StringVar(&password,"p","","database password,default empty")flag.StringVar(&host,"h","","database host,default empty")flag.IntVar(&port,"port",3306,"database host port,default 3306")flag.Parse()fmt.Printf("username=%s\n",username)fmt.Printf("password=%s\n",password)fmt.Printf("host=%s\n",host)fmt.Printf("username=%s\n",username)fmt.Printf("port=%d\n",port)// ./main.exe -u root -p 1201 -h 127.0.0.1 -port 33306//username=root//password=1201//host=127.0.0.1//username=root//port=33306 }
##### JSON 序列化
JSON 的全稱為JavaScript Object Notation ,它是一種輕量級的數據交換格式;
在JS 中一切皆對象,所以任何的數據類型都可以用JSON 來表示: 如Go 中的字符串,數組,切片,map,結構體等;
JSON 的序列化是指將有key-value 結構的數據類型(如結構體,map,切片)序列化成JSON 字符串的操作 package mainimport ("encoding/json""fmt" )// 如果需要序列化后的key 名自定義,需要使用tag type Person struct {Name string `json:"username"`Age int `json:"person_age"`// 對于結構體內不能導出字段// 首字母小寫的// 無法序列化extra string } func marshal(data interface{}) {body, err := json.Marshal(data)if err != nil {fmt.Println(err)fmt.Println("序列化失敗")return}fmt.Print("序列化后的數據為:")fmt.Println(string(body))} func structToJSON() {person := Person{"Tom",21,"i want be a teacher"}marshal(person)// {"username":"Tom","person_age":21} } func mapToJSON() {person := make(map[string]interface{})person["name"] = "Jack"person["age"] = 20person["extra"] = "i want play game"marshal(person) // {"age":20,"extra":"i want play game","name":"Jack"} } func sliceToJSON(){person := make([]string,0)person = append(person,"Tom")person = append(person,"Jack")person = append(person,"hey")marshal(person) // ["Tom","Jack","hey"] } func main() {structToJSON()mapToJSON()sliceToJSON() }
##### JSON 反序列化
JSON 反序列化是指將 JSON 字符串序列化成對應的數據類型(結構體,map,切片)的操作 package mainimport ("encoding/json""fmt" )func unmarshalMap(){str := `{"name":"tom","age":21,"extra":"i am english teacher"}`var person map[string]interface{}err := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失敗")fmt.Println(err)return}fmt.Print("序列化的結果為:")fmt.Println(person) //map[age:21 extra:i am english teacher name:tom] } func unmarshalSlice(){str := `["tom","jack","hey","joy"]`var person []stringerr := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失敗")fmt.Println(err)return}fmt.Print("序列化的結果為:")fmt.Println(person) //[tom jack hey joy] }func unmarshalStruct(){str := `{"name":"tom","age":21,"extra":"i am english teacher"}`var person struct{Name stringAge int// 反序列化也一樣,如果是不可導出字段// 則不能反序列化extra string}err := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失敗")fmt.Println(err)return}fmt.Print("序列化的結果為:")fmt.Println(person) //{tom 21 } } func main(){unmarshalMap()unmarshalStruct()unmarshalSlice() }
這一節來學習一下Go 如果解析命令行參數,以及JSON 的序列化及反序列化;
命令行參數對于熟悉Linux 的同學來說比較清楚,如: ls -a , wc -l ... 其中,-a, -l 都是命令行參數;
JSON 的序列化與反序列化在WEB 開發中很常見的, 這節帶領大家學習一下在Go 中如何操作JSON
##### 命令行參數
在Go 中os.Args 是一個字符串切片,存儲了所有的命令參數 package mainimport ("fmt""os" )func main(){fmt.Printf("命令行參數有%d個\n",len(os.Args))for i,v := range os.Args {fmt.Printf("當前是第%d個參數,參數是%s\n",i+1,v)} }
##### 使用flag 包來解析命令行參數
上面os.Args 是比較原始的方式解析參數,對于帶指定的參數形式,就比較吃力了;
使用flag 包可以解決這個問題 package mainimport ("flag""fmt" )func main() {var username stringvar password stringvar host stringvar port intflag.StringVar(&username,"u","","database username ,default empty")flag.StringVar(&password,"p","","database password,default empty")flag.StringVar(&host,"h","","database host,default empty")flag.IntVar(&port,"port",3306,"database host port,default 3306")flag.Parse()fmt.Printf("username=%s\n",username)fmt.Printf("password=%s\n",password)fmt.Printf("host=%s\n",host)fmt.Printf("username=%s\n",username)fmt.Printf("port=%d\n",port)// ./main.exe -u root -p 1201 -h 127.0.0.1 -port 33306//username=root//password=1201//host=127.0.0.1//username=root//port=33306 }
##### JSON 序列化
JSON 的全稱為JavaScript Object Notation ,它是一種輕量級的數據交換格式;
在JS 中一切皆對象,所以任何的數據類型都可以用JSON 來表示: 如Go 中的字符串,數組,切片,map,結構體等;
JSON 的序列化是指將有key-value 結構的數據類型(如結構體,map,切片)序列化成JSON 字符串的操作 package mainimport ("encoding/json""fmt" )// 如果需要序列化后的key 名自定義,需要使用tag type Person struct {Name string `json:"username"`Age int `json:"person_age"`// 對于結構體內不能導出字段// 首字母小寫的// 無法序列化extra string } func marshal(data interface{}) {body, err := json.Marshal(data)if err != nil {fmt.Println(err)fmt.Println("序列化失敗")return}fmt.Print("序列化后的數據為:")fmt.Println(string(body))} func structToJSON() {person := Person{"Tom",21,"i want be a teacher"}marshal(person)// {"username":"Tom","person_age":21} } func mapToJSON() {person := make(map[string]interface{})person["name"] = "Jack"person["age"] = 20person["extra"] = "i want play game"marshal(person) // {"age":20,"extra":"i want play game","name":"Jack"} } func sliceToJSON(){person := make([]string,0)person = append(person,"Tom")person = append(person,"Jack")person = append(person,"hey")marshal(person) // ["Tom","Jack","hey"] } func main() {structToJSON()mapToJSON()sliceToJSON() }
##### JSON 反序列化
JSON 反序列化是指將 JSON 字符串序列化成對應的數據類型(結構體,map,切片)的操作 package mainimport ("encoding/json""fmt" )func unmarshalMap(){str := `{"name":"tom","age":21,"extra":"i am english teacher"}`var person map[string]interface{}err := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失敗")fmt.Println(err)return}fmt.Print("序列化的結果為:")fmt.Println(person) //map[age:21 extra:i am english teacher name:tom] } func unmarshalSlice(){str := `["tom","jack","hey","joy"]`var person []stringerr := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失敗")fmt.Println(err)return}fmt.Print("序列化的結果為:")fmt.Println(person) //[tom jack hey joy] }func unmarshalStruct(){str := `{"name":"tom","age":21,"extra":"i am english teacher"}`var person struct{Name stringAge int// 反序列化也一樣,如果是不可導出字段// 則不能反序列化extra string}err := json.Unmarshal([]byte(str),&person)if err != nil {fmt.Println("JSON 反序列化失敗")fmt.Println(err)return}fmt.Print("序列化的結果為:")fmt.Println(person) //{tom 21 } } func main(){unmarshalMap()unmarshalStruct()unmarshalSlice() }
最新文章在個人微信公眾號,歡迎關注, 一同交流學習;
轉載于:https://www.cnblogs.com/Mail-maomao/p/11555161.html
總結
以上是生活随笔為你收集整理的Go 命令行参数,JSON 序列化与反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WeakMap 本身释放,而 keyOb
- 下一篇: 父级居中后,并继承子级浮动方法