golang實(shí)現(xiàn)PHP數(shù)組特性的方法
前言
我們做業(yè)務(wù)過(guò)程中,對(duì)應(yīng)強(qiáng)類型語(yǔ)言使用有個(gè)痛點(diǎn),就是使用變量之前一定要定義變量類型,比如c,c++,golang等,弱類型語(yǔ)言擇不需要,可以直接讀寫,比如php。下面通過(guò)php和golang語(yǔ)言舉例說(shuō)明,對(duì)于強(qiáng)弱類型語(yǔ)言變量類型的使用情況,并提出自己的解決方案databox。
內(nèi)容
復(fù)雜結(jié)構(gòu)處理
1. php 處理復(fù)雜結(jié)構(gòu)
1.1 讀取值
<?php
$country = [
"china"=>[
"陜西"=>["西安市","寶雞市","渭南市"],
"北京"=>["朝陽(yáng)區(qū)","海淀區(qū)","通州區(qū)"]
],
];
print_r($country["china"]["陜西"][0]);
打印結(jié)果
西安市
1.2 寫入值
<?php
$country = [
"china"=>[
"陜西"=>["西安市","寶雞市","渭南市"],
"北京"=>["朝陽(yáng)區(qū)","海淀區(qū)","通州區(qū)"]
],
];
$country["美國(guó)"]["紐約州"][0] = "紐約";
var_dump($country);
打印結(jié)果
array(3) {
? ["china"]=>
? array(2) {
??? ["陜西"]=>
??? array(3) {
????? [0]=>
????? string(9) "西安市"
????? [1]=>
????? string(9) "寶雞市"
????? [2]=>
????? string(9) "渭南市"
??? }
??? ["北京"]=>
??? array(3) {
????? [0]=>
????? string(9) "朝陽(yáng)區(qū)"
????? [1]=>
????? string(9) "海淀區(qū)"
????? [2]=>
????? string(9) "通州區(qū)"
??? }
? }
? ["america"]=>
? array(0) {
? }
? ["美國(guó)"]=>
? array(1) {
??? ["紐約州"]=>
??? array(1) {
????? [0]=>
????? string(6) "紐約"
??? }
? }
}
說(shuō)明
- php操作數(shù)組的時(shí)候,不需要考慮對(duì)應(yīng)的下標(biāo)值是否存在,可以直接使用。
2. golang 處理復(fù)雜結(jié)構(gòu)
2.1 讀取值
package main
import "fmt"
func main() {
country := map[string]interface{}{
"china": map[string]interface{}{
"陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
"寶雞": []interface{}{"朝陽(yáng)區(qū)", "海淀區(qū)", "通州區(qū)"},
},
}
china := country["china"] //第一步
shanxi := china.(map[string]interface{})["陜西"] //第二步
xian := shanxi.([]interface{}) //第三步
fmt.Println(xian[0])
}
打印結(jié)果
西安市
分三步
- 第一步 創(chuàng)建變量china 值為country變量key為“china”對(duì)應(yīng)的值
- 第二步 創(chuàng)建變量shanxi 只對(duì)china變量key為“陜西”對(duì)應(yīng)的值,其中對(duì)于china使用了斷言
- 第三步 創(chuàng)建xian 變量,取值為shanxi對(duì)于下標(biāo)為0的值,其中對(duì)于shanxi使用了斷言
因?yàn)閷?duì)象有三層,所以用了三步,每次取一層數(shù)據(jù),然后斷言在取第二層數(shù)據(jù),接著又?jǐn)嘌裕砣绻麑?duì)象有N層,獲取N層的值,需要N步。
2.2 寫入值
package main
import "fmt"
func main() {
country := map[string]interface{}{
"中國(guó)": map[string]interface{}{
"陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
"寶雞": []interface{}{"朝陽(yáng)區(qū)", "海淀區(qū)", "通州區(qū)"},
},
}
city := []interface{}{"紐約"} //第一步
province := map[string]interface{}{"紐約州": city} //第二步
country["美國(guó)"] = province //第三步
fmt.Println(country)
}
打印結(jié)果
map[中國(guó):map[寶雞:[朝陽(yáng)區(qū) 海淀區(qū) 通州區(qū)] 陜西:[西安市 寶雞市 渭南市]] 美國(guó):map[紐約州:[紐約]]]
說(shuō)明 需要在country下寫入美國(guó),紐約州,下面為紐約的數(shù)據(jù)。
分三步
- 第一步 先創(chuàng)建紐city數(shù)組,第一個(gè)索引對(duì)應(yīng)為“紐約”
- 第二步 創(chuàng)建province map對(duì)象,元素為key為“紐約州”值為city數(shù)組
- 第三步 將country 寫入key“美國(guó)”,值為province 對(duì)象
因?yàn)橐獙懭氲臄?shù)據(jù)處在第三層,所有需要三步,才能賦值完成,如果對(duì)象為N層,需要在N層寫入數(shù)據(jù),所有需要N步
3. dataBox 復(fù)雜結(jié)構(gòu)處理
- api層:提供初始化函數(shù)NewDataBox,get,getString,getMap 獲取變量為了函數(shù),set 寫入變量函數(shù)
- 數(shù)據(jù)處理引擎層:負(fù)責(zé)修改和讀取數(shù)據(jù)
- 數(shù)據(jù)存儲(chǔ)層:負(fù)責(zé)保存數(shù)據(jù)
3.1 讀數(shù)據(jù)
package main
import (
"fmt"
"github.com/codewangz/goutils/databox"
)
func main() {
country := map[string]interface{}{
"中國(guó)": map[string]interface{}{
"陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
"寶雞": []interface{}{"朝陽(yáng)區(qū)", "海淀區(qū)", "通州區(qū)"},
},
}
dbx := databox.NewDataBox(country)
xian := dbx.GetString("中國(guó).陜西.0")
fmt.Println(xian)
}
打印結(jié)果
西安
通過(guò)GetString 傳入key “中國(guó).陜西.0”,直接就可以獲取對(duì)應(yīng)的值“西安”,只有一步操作。
3.2 寫數(shù)據(jù)
package main
import (
"fmt"
"github.com/codewangz/goutils/databox"
)
func main() {
country := map[string]interface{}{
"中國(guó)": map[string]interface{}{
"陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
"寶雞": []interface{}{"朝陽(yáng)區(qū)", "海淀區(qū)", "通州區(qū)"},
},
}
dbx := databox.NewDataBox(country)
dbx.Set("美國(guó).紐約州.0", "紐約")
fmt.Println(dbx.Data())
}
打印結(jié)果
map[中國(guó):map[寶雞:[朝陽(yáng)區(qū) 海淀區(qū) 通州區(qū)] 陜西:[西安市 寶雞市 渭南市]] 美國(guó):map[紐約州:[紐約]]]
使用set方法直接對(duì)應(yīng)key“美國(guó).紐約州.0”寫入對(duì)應(yīng)的值就可以。
總結(jié)
- 弱類型語(yǔ)言php可以直接對(duì)數(shù)值讀寫,不需要提前知道變量類型,也不需要知道變量?jī)?nèi)部構(gòu)造
- 強(qiáng)類型語(yǔ)言golang不能直接讀寫數(shù)據(jù),需要對(duì)數(shù)據(jù)類型進(jìn)行斷言,才能寫入,需要知道變量?jī)?nèi)部構(gòu)造
到此這篇關(guān)于golang實(shí)現(xiàn)PHP數(shù)組特性的方法的文章就介紹到這了,更多相關(guān)golang實(shí)現(xiàn)PHP數(shù)組特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GO語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單TCP服務(wù)的方法
這篇文章主要介紹了GO語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單TCP服務(wù)的方法,實(shí)例分析了Go語(yǔ)言實(shí)現(xiàn)TCP服務(wù)的技巧,需要的朋友可以參考下2015-03-03
go語(yǔ)言實(shí)現(xiàn)字符串base64編碼的方法
這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)字符串base64編碼的方法,實(shí)例分析了Go語(yǔ)言操作字符串的技巧及base64編碼的使用技巧,需要的朋友可以參考下2015-03-03
golang如何通過(guò)type定義函數(shù)類型
這篇文章主要介紹了golang如何通過(guò)type定義函數(shù)類型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

