欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年12月29日 10:08:42   作者:萬般皆下品惟有讀書高  
我們做業(yè)務過程中,對應強類型語言使用有個痛點,就是使用變量之前一定要定義變量類型,那么本文就來介紹一下golang實現(xiàn)PHP數(shù)組特性的方法

前言

我們做業(yè)務過程中,對應強類型語言使用有個痛點,就是使用變量之前一定要定義變量類型,比如c,c++,golang等,弱類型語言擇不需要,可以直接讀寫,比如php。下面通過php和golang語言舉例說明,對于強弱類型語言變量類型的使用情況,并提出自己的解決方案databox。

內(nèi)容

復雜結(jié)構(gòu)處理

1. php 處理復雜結(jié)構(gòu)

1.1 讀取值

<?php
$country = [
    "china"=>[
            "陜西"=>["西安市","寶雞市","渭南市"],
            "北京"=>["朝陽區(qū)","海淀區(qū)","通州區(qū)"]
    ],
];

print_r($country["china"]["陜西"][0]);

打印結(jié)果
西安市

1.2 寫入值

<?php
$country = [
    "china"=>[
        "陜西"=>["西安市","寶雞市","渭南市"],
        "北京"=>["朝陽區(qū)","海淀區(qū)","通州區(qū)"]
    ],
];

$country["美國"]["紐約州"][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) "朝陽區(qū)"
????? [1]=>
????? string(9) "海淀區(qū)"
????? [2]=>
????? string(9) "通州區(qū)"
??? }
? }
? ["america"]=>
? array(0) {
? }
? ["美國"]=>
? array(1) {
??? ["紐約州"]=>
??? array(1) {
????? [0]=>
????? string(6) "紐約"
??? }
? }
}

說明

  • php操作數(shù)組的時候,不需要考慮對應的下標值是否存在,可以直接使用。

2. golang 處理復雜結(jié)構(gòu)

2.1 讀取值

package main

import "fmt"

func main() {
   country := map[string]interface{}{
      "china": map[string]interface{}{
         "陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
         "寶雞": []interface{}{"朝陽區(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”對應的值
  • 第二步 創(chuàng)建變量shanxi 只對china變量key為“陜西”對應的值,其中對于china使用了斷言
  • 第三步 創(chuàng)建xian 變量,取值為shanxi對于下標為0的值,其中對于shanxi使用了斷言

因為對象有三層,所以用了三步,每次取一層數(shù)據(jù),然后斷言在取第二層數(shù)據(jù),接著又斷言,同理如果對象有N層,獲取N層的值,需要N步。
2.2 寫入值

package main

import "fmt"

func main() {
   country := map[string]interface{}{
      "中國": map[string]interface{}{
         "陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
         "寶雞": []interface{}{"朝陽區(qū)", "海淀區(qū)", "通州區(qū)"},
      },
   }

   city := []interface{}{"紐約"} //第一步
   province := map[string]interface{}{"紐約州": city} //第二步
   country["美國"] = province //第三步
   fmt.Println(country)
}

打印結(jié)果
map[中國:map[寶雞:[朝陽區(qū) 海淀區(qū) 通州區(qū)] 陜西:[西安市 寶雞市 渭南市]] 美國:map[紐約州:[紐約]]]

說明 需要在country下寫入美國,紐約州,下面為紐約的數(shù)據(jù)。
分三步

  • 第一步 先創(chuàng)建紐city數(shù)組,第一個索引對應為“紐約”
  • 第二步 創(chuàng)建province map對象,元素為key為“紐約州”值為city數(shù)組
  • 第三步 將country 寫入key“美國”,值為province 對象

因為要寫入的數(shù)據(jù)處在第三層,所有需要三步,才能賦值完成,如果對象為N層,需要在N層寫入數(shù)據(jù),所有需要N步

3. dataBox 復雜結(jié)構(gòu)處理

  • api層:提供初始化函數(shù)NewDataBox,get,getString,getMap 獲取變量為了函數(shù),set 寫入變量函數(shù)
  • 數(shù)據(jù)處理引擎層:負責修改和讀取數(shù)據(jù)
  • 數(shù)據(jù)存儲層:負責保存數(shù)據(jù)

3.1 讀數(shù)據(jù)

package main

import (
   "fmt"
   "github.com/codewangz/goutils/databox"
)

func main() {
   country := map[string]interface{}{
      "中國": map[string]interface{}{
         "陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
         "寶雞": []interface{}{"朝陽區(qū)", "海淀區(qū)", "通州區(qū)"},
      },
   }

   dbx := databox.NewDataBox(country)
   xian := dbx.GetString("中國.陜西.0")
   fmt.Println(xian)
}

打印結(jié)果
西安

通過GetString 傳入key “中國.陜西.0”,直接就可以獲取對應的值“西安”,只有一步操作。

3.2 寫數(shù)據(jù)

package main

import (
   "fmt"
   "github.com/codewangz/goutils/databox"
)

func main() {
   country := map[string]interface{}{
      "中國": map[string]interface{}{
         "陜西": []interface{}{"西安市", "寶雞市", "渭南市"},
         "寶雞": []interface{}{"朝陽區(qū)", "海淀區(qū)", "通州區(qū)"},
      },
   }

   dbx := databox.NewDataBox(country)
   dbx.Set("美國.紐約州.0", "紐約")
   fmt.Println(dbx.Data())
}

打印結(jié)果
map[中國:map[寶雞:[朝陽區(qū) 海淀區(qū) 通州區(qū)] 陜西:[西安市 寶雞市 渭南市]] 美國:map[紐約州:[紐約]]]

使用set方法直接對應key“美國.紐約州.0”寫入對應的值就可以。

總結(jié)

  • 弱類型語言php可以直接對數(shù)值讀寫,不需要提前知道變量類型,也不需要知道變量內(nèi)部構(gòu)造
  • 強類型語言golang不能直接讀寫數(shù)據(jù),需要對數(shù)據(jù)類型進行斷言,才能寫入,需要知道變量內(nèi)部構(gòu)造

到此這篇關于golang實現(xiàn)PHP數(shù)組特性的方法的文章就介紹到這了,更多相關golang實現(xiàn)PHP數(shù)組特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go語言中的UTF-8實現(xiàn)

    Go語言中的UTF-8實現(xiàn)

    這篇文章主要介紹了Go語言中的UTF-8實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 總結(jié)Golang四種不同的參數(shù)配置方式

    總結(jié)Golang四種不同的參數(shù)配置方式

    這篇文章主要介紹了總結(jié)Golang四種不同的參數(shù)配置方式,文章圍繞主題展開詳細的內(nèi)容戒殺,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • go 熔斷原理分析與源碼解讀

    go 熔斷原理分析與源碼解讀

    這篇文章主要為大家介紹了go 熔斷原理分析與源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • GO語言利用K近鄰算法實現(xiàn)小說鑒黃

    GO語言利用K近鄰算法實現(xiàn)小說鑒黃

    本文給大家分享的是一段GO語言利用K近鄰算法實現(xiàn)小說鑒黃的方法,本方法的鑒別的關鍵是關鍵是向量點的選擇和閾值的判定,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 使用Golang?Validator包實現(xiàn)數(shù)據(jù)驗證詳解

    使用Golang?Validator包實現(xiàn)數(shù)據(jù)驗證詳解

    在開發(fā)過程中,數(shù)據(jù)驗證是一個非常重要的環(huán)節(jié),而golang中的Validator包是一個非常常用和強大的數(shù)據(jù)驗證工具,提供了簡單易用的API和豐富的驗證規(guī)則,下面我們就來看看Validator包的具體使用吧
    2023-12-12
  • 利用Go語言實現(xiàn)輕量級OpenLdap弱密碼檢測工具

    利用Go語言實現(xiàn)輕量級OpenLdap弱密碼檢測工具

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)輕量級OpenLdap弱密碼檢測工具,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-09-09
  • Go 語言中的空接口(推薦)

    Go 語言中的空接口(推薦)

    這篇文章主要介紹了Go 語言中的空接口的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Golang使用ttl機制保存內(nèi)存數(shù)據(jù)方法詳解

    Golang使用ttl機制保存內(nèi)存數(shù)據(jù)方法詳解

    ttl(time-to-live) 數(shù)據(jù)存活時間,我們這里指數(shù)據(jù)在內(nèi)存中保存一段時間,超過期限則不能被讀取到,與Redis的ttl機制類似。本文僅實現(xiàn)ttl部分,不考慮序列化和反序列化
    2023-03-03
  • 深入理解Golang中WebSocket和WSS的支持

    深入理解Golang中WebSocket和WSS的支持

    本文主要介紹了深入理解Golang中WebSocket和WSS的支持,實現(xiàn)了Golang構(gòu)建WebSocket服務器和客戶端,并使用自簽名證書實現(xiàn)WSS的功能,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 使用go語言實現(xiàn)查找兩個數(shù)組的異同操作

    使用go語言實現(xiàn)查找兩個數(shù)組的異同操作

    這篇文章主要介紹了使用go語言實現(xiàn)查找兩個數(shù)組的異同操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論