一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - golang實(shí)現(xiàn)PHP數(shù)組特性的方法

golang實(shí)現(xiàn)PHP數(shù)組特性的方法

2022-01-26 11:26萬(wàn)般皆下品惟有讀書高 Golang

我們做業(yè)務(wù)過(guò)程中,對(duì)應(yīng)強(qiáng)類型語(yǔ)言使用有個(gè)痛點(diǎn),就是使用變量之前一定要定義變量類型,那么本文就來(lái)介紹一下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 讀取值

?
1
2
3
4
5
6
7
8
9
<?php
$country = [
    "china"=>[
            "陜西"=>["西安市","寶雞市","渭南市"],
            "北京"=>["朝陽(yáng)區(qū)","海淀區(qū)","通州區(qū)"]
    ],
];
 
print_r($country["china"]["陜西"][0]);

打印結(jié)果
西安市

1.2 寫入值

?
1
2
3
4
5
6
7
8
9
10
11
<?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 讀取值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 寫入值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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ù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/7046679990368206861

延伸 · 閱讀

精彩推薦
  • Golanggo語(yǔ)言制作端口掃描器

    go語(yǔ)言制作端口掃描器

    本文給大家分享的是使用go語(yǔ)言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說(shuō)起,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看...

    Go語(yǔ)言中文網(wǎng)11352020-05-21
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語(yǔ)言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語(yǔ)言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang 通過(guò)ssh代理連接mysql的操作

    golang 通過(guò)ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過(guò)ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    a165861639710342021-03-08
主站蜘蛛池模板: 我和老丈洗澡同性 | 青草草在线 | 日韩亚洲人成在线 | 青青草精品在线观看 | 日本无吗免费一二区 | 希岛爱理aⅴ在线中文字幕 午夜综合网 | 2020年国产精品午夜福利在线观看 | 暖暖 免费 高清 日本 中文 | 小SAO货叫大声点妓女 | 午夜dj影院在线观看完整版 | 激情影院网站 | 亚洲精品成人456在线播放 | 国产欧美日韩在线观看精品 | 免费视频精品一区二区三区 | 九九九国产视频 | 500福利第一导航 | 2020精品极品国产色在线观看 | 亚洲色图欧美图片 | 国产精品馆 | 娇妻中日久久持久久 | 色一级| 午夜久久精品 | nhdta系列媚药系列 | 美女bbxx美女bbb | 激情综合 | 日本美女动态图片 | 国产做a爰片久久毛片 | 三级视频中文字幕 | 国产一区二区三区久久精品小说 | 亚洲欧美日韩久久一区 | www一级片 | 久久精品男人影院 | gay帅老头毛都白了 gayxxx视频 | 国产一区日韩二区欧美三 | 四虎永久在线精品波多野结衣 | 男人插曲女人身体 | 午夜爱爱片| 99精品久久精品一区二区小说 | 任你操视频在线观看 | xvideo日本| 狠狠色狠狠色综合曰曰 |