欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語(yǔ)言struct,go語(yǔ)言string轉(zhuǎn)float

Go 空結(jié)構(gòu)體 struct{} 的使用

struct是Go中的關(guān)鍵字,用于定義結(jié)構(gòu)類(lèi)型。

在雙塔等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需搭建網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),雙塔網(wǎng)站建設(shè)費(fèi)用合理。

例如:

struct {}是一個(gè)無(wú)元素的結(jié)構(gòu)體類(lèi)型,通常在沒(méi)有信息存儲(chǔ)時(shí)使用。優(yōu)點(diǎn)是大小為0,不需要內(nèi)存來(lái)存儲(chǔ)struct {}類(lèi)型的值。

struct {} {}是一個(gè)復(fù)合字面量,它構(gòu)造了一個(gè)struct {}類(lèi)型的值,該值也是空。

go中可以使用 unsafe.Sizeof 計(jì)算出一個(gè)數(shù)據(jù)類(lèi)型實(shí)例需要占用的字節(jié)數(shù)。我們驗(yàn)證一下:

也就是說(shuō)空結(jié)構(gòu)體實(shí)例不占用任何內(nèi)存空間。

Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)沒(méi)有提供 Set 的實(shí)現(xiàn),通常使用 map 來(lái)代替。事實(shí)上,對(duì)于集合來(lái)說(shuō),只需要 map 的鍵,而不需要值。

聲明為聲明為 map[string]struct{} ,由于struct{}是空,不關(guān)心內(nèi)容,這樣map便改造為set 。

map可以通過(guò)“comma ok”機(jī)制來(lái)獲取該key是否存在,例如 _, ok := map["key"] ,如果沒(méi)有對(duì)應(yīng)的值,ok為false。可以通過(guò)定義成 map[string]struct{} 的形式,值不再占用內(nèi)存。其值僅有兩種狀態(tài),有或無(wú)。如果定義的是 map[string]bool ,則結(jié)果有true、false或沒(méi)有三種狀態(tài),而且即使是將值設(shè)置為 bool 類(lèi)型,也會(huì)多占據(jù) 1 個(gè)字節(jié)。因此呢,將 map 作為集合(Set)使用時(shí),可以將值類(lèi)型定義為空結(jié)構(gòu)體,僅作為占位符使用即可。

基于channels發(fā)送消息有兩個(gè)重要方面:發(fā)了消息、發(fā)了什么消息。一個(gè)強(qiáng)調(diào)了通訊的發(fā)生,一個(gè)強(qiáng)調(diào)了通訊的內(nèi)容。當(dāng)我們更希望強(qiáng)調(diào)通訊發(fā)生的時(shí)刻時(shí),我們將它稱(chēng)為 消息事件 。有些消息事件并不攜帶額外的信息,它僅僅是用作兩個(gè)goroutine之間的同步,這時(shí)候我們可以用 struct{} 空結(jié)構(gòu)體作為channels元素的類(lèi)型。用來(lái)通知子協(xié)程(goroutine)執(zhí)行任務(wù),或只用來(lái)控制協(xié)程并發(fā)度。

在部分場(chǎng)景下,結(jié)構(gòu)體只包含方法,不包含任何的字段。這時(shí)候我們就可以使用空結(jié)構(gòu)體。

其實(shí),上面的calculateInt 可以是任何類(lèi)型,如 type calculateInt bool ,但是struct{}不占用任何空間,邏輯上也更合理,因此還是它最好。

講講go語(yǔ)言的結(jié)構(gòu)體

作為C語(yǔ)言家族的一員,go和c一樣也支持結(jié)構(gòu)體。可以類(lèi)比于java的一個(gè)POJO。

在學(xué)習(xí)定義結(jié)構(gòu)體之前,先學(xué)習(xí)下定義一個(gè)新類(lèi)型。

新類(lèi)型 T1 是基于 Go 原生類(lèi)型 int 定義的新自定義類(lèi)型,而新類(lèi)型 T2 則是 基于剛剛定義的類(lèi)型 T1,定義的新類(lèi)型。

這里要引入一個(gè)底層類(lèi)型的概念。

如果一個(gè)新類(lèi)型是基于某個(gè) Go 原生類(lèi)型定義的, 那么我們就叫 Go 原生類(lèi)型為新類(lèi)型的底層類(lèi)型

在上面的例子中,int就是T1的底層類(lèi)型。

但是T1不是T2的底層類(lèi)型,只有原生類(lèi)型才可以作為底層類(lèi)型,所以T2的底層類(lèi)型還是int

底層類(lèi)型是很重要的,因?yàn)閷?duì)兩個(gè)變量進(jìn)行顯式的類(lèi)型轉(zhuǎn)換,只有底層類(lèi)型相同的變量間才能相互轉(zhuǎn)換。底層類(lèi)型是判斷兩個(gè)類(lèi)型本質(zhì)上是否相同的根本。

這種類(lèi)型定義方式通常用在 項(xiàng)目的漸進(jìn)式重構(gòu),還有對(duì)已有包的二次封裝方面

類(lèi)型別名表示新類(lèi)型和原類(lèi)型完全等價(jià),實(shí)際上就是同一種類(lèi)型。只不過(guò)名字不同而已。

一般我們都是定義一個(gè)有名的結(jié)構(gòu)體。

字段名的大小寫(xiě)決定了字段是否包外可用。只有大寫(xiě)的字段可以被包外引用。

還有一個(gè)點(diǎn)提一下

如果換行來(lái)寫(xiě)

Age: 66,后面這個(gè)都好不能省略

還有一個(gè)點(diǎn),觀察e3的賦值

new返回的是一個(gè)指針。然后指針可以直接點(diǎn)號(hào)賦值。這說(shuō)明go默認(rèn)進(jìn)行了取值操作

e3.Age 等價(jià)于 (*e3).Age

如上定義了一個(gè)空的結(jié)構(gòu)體Empty。打印了元素e的內(nèi)存大小是0。

有什么用呢?

基于空結(jié)構(gòu)體類(lèi)型內(nèi)存零開(kāi)銷(xiāo)這樣的特性,我們?cè)谌粘?Go 開(kāi)發(fā)中會(huì)經(jīng)常使用空 結(jié)構(gòu)體類(lèi)型元素,作為一種“事件”信息進(jìn)行 Goroutine 之間的通信

這種以空結(jié)構(gòu)體為元素類(lèi)建立的 channel,是目前能實(shí)現(xiàn)的、內(nèi)存占用最小的 Goroutine 間通信方式。

這種形式需要說(shuō)的是幾個(gè)語(yǔ)法糖。

語(yǔ)法糖1:

對(duì)于結(jié)構(gòu)體字段,可以省略字段名,只寫(xiě)結(jié)構(gòu)體名。默認(rèn)字段名就是結(jié)構(gòu)體名

這種方式稱(chēng)為 嵌入字段

語(yǔ)法糖2:

如果是以嵌入字段形式寫(xiě)的結(jié)構(gòu)體

可以省略嵌入的Reader字段,而直接訪問(wèn)ReaderName

此時(shí)book是一個(gè)各個(gè)屬性全是對(duì)應(yīng)類(lèi)型零值的一個(gè)實(shí)例。不是nil。這種情況在Go中稱(chēng)為零值可用。不像java會(huì)導(dǎo)致npe

結(jié)構(gòu)體定義時(shí)可以在字段后面追加標(biāo)簽說(shuō)明。

tag的格式為反單引號(hào)

tag的作用是可以使用[反射]來(lái)檢視字段的標(biāo)簽信息。

具體的作用還要看使用的場(chǎng)景。

比如這里的tag是為了幫助 encoding/json 標(biāo)準(zhǔn)包在解析對(duì)象時(shí)可以利用的規(guī)則。比如omitempty表示該字段沒(méi)有值就不打印出來(lái)。

golang的struct能解決什么問(wèn)題

struct

Go語(yǔ)言中,也有struct,定義與C語(yǔ)言類(lèi)似,舉例說(shuō)明如下:

type person struct {

name string

age int

}

上面就聲明了一個(gè)結(jié)構(gòu)體person,包含兩個(gè)字段。可以如下來(lái)使用這個(gè)struct:

var P person //P現(xiàn)在就是person類(lèi)型的變量了

P.name = "shicq" //賦值給P的name屬性

P.age = 31 //賦值給P的age屬性

fmt.Printf("The person's name is %s", P.name) //訪問(wèn)P的name屬性

除了上面這種P的聲明使用之外,還有兩種聲明使用方式:

(1)按照順序提供初始化值。

P := person("Li Lei", 25)

(2)通過(guò)field:value的方式初始化,這樣可以任意順序。

P := person(age:24, name:"Han Meimei")

go中的struct

go和其他語(yǔ)言一樣,可以申明新的“結(jié)構(gòu)體”,struct可以作為其他類(lèi)型的屬性活字段的容器,定義方式如下:

type 關(guān)鍵字申明 person 為 struct 類(lèi)型,person包含 name 屬性和 age 屬性,對(duì)應(yīng)的類(lèi)型為 string 和 int 。我們看看如何使用struct:

除了上面使用的方式使用 struct ,還有三種方式可以使用申明struct類(lèi)型

完整是使用struct 例子

當(dāng)我們創(chuàng)建結(jié)構(gòu)體時(shí),字段可以只有類(lèi)型,而沒(méi)有字段名。這樣的字段稱(chēng)為匿名字段(Anonymous Field)。習(xí)慣上匿名字段叫內(nèi)嵌,具名字段叫組合

上面我們申明了兩個(gè)結(jié)構(gòu)體 Student 和 Person ,其中 Student 組合了 Person 字段,那么 Student 包含了 Person 中的所有字段

從上面的例子可以看出來(lái),struct 不僅可以將struct作為匿名字段,自定義類(lèi)型、內(nèi)置類(lèi)型都可以作為匿名字段,也可以進(jìn)行相應(yīng)的函數(shù)操作。

這里我們有個(gè)問(wèn)題,Person上有一個(gè)name屬性,如果Student上也有一個(gè)name屬性,那么我們?cè)趺崔k呢?其實(shí)在go里面,最外層的屬性具有有限的訪問(wèn)權(quán)限,當(dāng)你通過(guò)Student.name訪問(wèn)的時(shí)候是訪問(wèn)Student上的屬性。同理,我們可以通過(guò)Student.Person訪問(wèn)Person上的屬性,如:

如果結(jié)構(gòu)體的全部成員都是可以比較的,那么結(jié)構(gòu)體也是可以比較的,那樣的話(huà)兩個(gè)結(jié)構(gòu)體將可以使用 == 或 != 運(yùn)算符進(jìn)行比較,但不支持 或 。

沒(méi)有類(lèi),C語(yǔ)言有結(jié)構(gòu)體,那么Go的結(jié)構(gòu)體有什么特別之處?

Go語(yǔ)言中沒(méi)有“類(lèi)”的概念,也不支持“類(lèi)”的繼承等面向?qū)ο蟮母拍睢o語(yǔ)言中通過(guò)結(jié)構(gòu)體的內(nèi)嵌再配合接口比面向?qū)ο缶哂懈叩臄U(kuò)展性和靈活性。

自定義類(lèi)型

在Go語(yǔ)言中有一些基本的數(shù)據(jù)類(lèi)型,如string、整型、浮點(diǎn)型、布爾等數(shù)據(jù)類(lèi)型, Go語(yǔ)言中可以使用type關(guān)鍵字來(lái)定義自定義類(lèi)型。

自定義類(lèi)型是定義了一個(gè)全新的類(lèi)型。我們可以基于內(nèi)置的基本類(lèi)型定義,也可以通過(guò)struct定義。例如:

通過(guò)Type關(guān)鍵字的定義,MyInt就是一種新的類(lèi)型,它具有int的特性。

類(lèi)型別名

類(lèi)型別名是Go1.9版本添加的新功能。

類(lèi)型別名規(guī)定:TypeAlias只是Type的別名,本質(zhì)上TypeAlias與Type是同一個(gè)類(lèi)型。就像一個(gè)孩子小時(shí)候有小名、乳名,上學(xué)后用學(xué)名,英語(yǔ)老師又會(huì)給他起英文名,但這些名字都指的是他本人。

type TypeAlias = Type

我們之前見(jiàn)過(guò)的rune和byte就是類(lèi)型別名,他們的定義如下:

類(lèi)型定義和類(lèi)型別名的區(qū)別

類(lèi)型別名與類(lèi)型定義表面上看只有一個(gè)等號(hào)的差異,我們通過(guò)下面的這段代碼來(lái)理解它們之間的區(qū)別。

結(jié)果顯示a的類(lèi)型是main.NewInt,表示main包下定義的NewInt類(lèi)型。b的類(lèi)型是int。MyInt類(lèi)型只會(huì)在代碼中存在,編譯完成時(shí)并不會(huì)有MyInt類(lèi)型。

Go語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類(lèi)型可以表示一些事物的基本屬性,但是當(dāng)我們想表達(dá)一個(gè)事物的全部或部分屬性時(shí),這時(shí)候再用單一的基本數(shù)據(jù)類(lèi)型明顯就無(wú)法滿(mǎn)足需求了,Go語(yǔ)言提供了一種自定義數(shù)據(jù)類(lèi)型,可以封裝多個(gè)基本數(shù)據(jù)類(lèi)型,這種數(shù)據(jù)類(lèi)型叫結(jié)構(gòu)體,英文名稱(chēng)struct。 也就是我們可以通過(guò)struct來(lái)定義自己的類(lèi)型了。

Go語(yǔ)言中通過(guò)struct來(lái)實(shí)現(xiàn)面向?qū)ο蟆?/p>

結(jié)構(gòu)體的定義

使用type和struct關(guān)鍵字來(lái)定義結(jié)構(gòu)體,具體代碼格式如下:

其中:

舉個(gè)例子,我們定義一個(gè)Person(人)結(jié)構(gòu)體,代碼如下:

同樣類(lèi)型的字段也可以寫(xiě)在一行,

這樣我們就擁有了一個(gè)person的自定義類(lèi)型,它有name、city、age三個(gè)字段,分別表示姓名、城市和年齡。這樣我們使用這個(gè)person結(jié)構(gòu)體就能夠很方便的在程序中表示和存儲(chǔ)人信息了。

語(yǔ)言?xún)?nèi)置的基礎(chǔ)數(shù)據(jù)類(lèi)型是用來(lái)描述一個(gè)值的,而結(jié)構(gòu)體是用來(lái)描述一組值的。比如一個(gè)人有名字、年齡和居住城市等,本質(zhì)上是一種聚合型的數(shù)據(jù)類(lèi)型

結(jié)構(gòu)體實(shí)例化

只有當(dāng)結(jié)構(gòu)體實(shí)例化時(shí),才會(huì)真正地分配內(nèi)存。也就是必須實(shí)例化后才能使用結(jié)構(gòu)體的字段。

基本實(shí)例化

舉個(gè)例子:

我們通過(guò).來(lái)訪問(wèn)結(jié)構(gòu)體的字段(成員變量),例如p1.name和p1.age等。

匿名結(jié)構(gòu)體

在定義一些臨時(shí)數(shù)據(jù)結(jié)構(gòu)等場(chǎng)景下還可以使用匿名結(jié)構(gòu)體。

創(chuàng)建指針類(lèi)型結(jié)構(gòu)體

我們還可以通過(guò)使用new關(guān)鍵字對(duì)結(jié)構(gòu)體進(jìn)行實(shí)例化,得到的是結(jié)構(gòu)體的地址。 格式如下:

從打印的結(jié)果中我們可以看出p2是一個(gè)結(jié)構(gòu)體指針。

需要注意的是在Go語(yǔ)言中支持對(duì)結(jié)構(gòu)體指針直接使用.來(lái)訪問(wèn)結(jié)構(gòu)體的成員。

取結(jié)構(gòu)體的地址實(shí)例化

使用對(duì)結(jié)構(gòu)體進(jìn)行取地址操作相當(dāng)于對(duì)該結(jié)構(gòu)體類(lèi)型進(jìn)行了一次new實(shí)例化操作。

p3.name = "七米"其實(shí)在底層是(*p3).name = "七米",這是Go語(yǔ)言幫我們實(shí)現(xiàn)的語(yǔ)法糖。

結(jié)構(gòu)體初始化

沒(méi)有初始化的結(jié)構(gòu)體,其成員變量都是對(duì)應(yīng)其類(lèi)型的零值。

使用鍵值對(duì)初始化

使用鍵值對(duì)對(duì)結(jié)構(gòu)體進(jìn)行初始化時(shí),鍵對(duì)應(yīng)結(jié)構(gòu)體的字段,值對(duì)應(yīng)該字段的初始值。

也可以對(duì)結(jié)構(gòu)體指針進(jìn)行鍵值對(duì)初始化,例如:

當(dāng)某些字段沒(méi)有初始值的時(shí)候,該字段可以不寫(xiě)。此時(shí),沒(méi)有指定初始值的字段的值就是該字段類(lèi)型的零值。

使用值的列表初始化

初始化結(jié)構(gòu)體的時(shí)候可以簡(jiǎn)寫(xiě),也就是初始化的時(shí)候不寫(xiě)鍵,直接寫(xiě)值:

使用這種格式初始化時(shí),需要注意:

結(jié)構(gòu)體內(nèi)存布局

結(jié)構(gòu)體占用一塊連續(xù)的內(nèi)存。

輸出:

【進(jìn)階知識(shí)點(diǎn)】關(guān)于Go語(yǔ)言中的內(nèi)存對(duì)齊推薦閱讀:在 Go 中恰到好處的內(nèi)存對(duì)齊

面試題

請(qǐng)問(wèn)下面代碼的執(zhí)行結(jié)果是什么?

構(gòu)造函數(shù)

Go語(yǔ)言的結(jié)構(gòu)體沒(méi)有構(gòu)造函數(shù),我們可以自己實(shí)現(xiàn)。 例如,下方的代碼就實(shí)現(xiàn)了一個(gè)person的構(gòu)造函數(shù)。 因?yàn)閟truct是值類(lèi)型,如果結(jié)構(gòu)體比較復(fù)雜的話(huà),值拷貝性能開(kāi)銷(xiāo)會(huì)比較大,所以該構(gòu)造函數(shù)返回的是結(jié)構(gòu)體指針類(lèi)型。

調(diào)用構(gòu)造函數(shù)

方法和接收者

Go語(yǔ)言中的方法(Method)是一種作用于特定類(lèi)型變量的函數(shù)。這種特定類(lèi)型變量叫做接收者(Receiver)。接收者的概念就類(lèi)似于其他語(yǔ)言中的this或者 self。

方法的定義格式如下:

其中,

舉個(gè)例子:

方法與函數(shù)的區(qū)別是,函數(shù)不屬于任何類(lèi)型,方法屬于特定的類(lèi)型。

指針類(lèi)型的接收者

指針類(lèi)型的接收者由一個(gè)結(jié)構(gòu)體的指針組成,由于指針的特性,調(diào)用方法時(shí)修改接收者指針的任意成員變量,在方法結(jié)束后,修改都是有效的。這種方式就十分接近于其他語(yǔ)言中面向?qū)ο笾械膖his或者self。 例如我們?yōu)镻erson添加一個(gè)SetAge方法,來(lái)修改實(shí)例變量的年齡。

調(diào)用該方法:

值類(lèi)型的接收者

當(dāng)方法作用于值類(lèi)型接收者時(shí),Go語(yǔ)言會(huì)在代碼運(yùn)行時(shí)將接收者的值復(fù)制一份。在值類(lèi)型接收者的方法中可以獲取接收者的成員值,但修改操作只是針對(duì)副本,無(wú)法修改接收者變量本身。

什么時(shí)候應(yīng)該使用指針類(lèi)型接收者

任意類(lèi)型添加方法

在Go語(yǔ)言中,接收者的類(lèi)型可以是任何類(lèi)型,不僅僅是結(jié)構(gòu)體,任何類(lèi)型都可以擁有方法。 舉個(gè)例子,我們基于內(nèi)置的int類(lèi)型使用type關(guān)鍵字可以定義新的自定義類(lèi)型,然后為我們的自定義類(lèi)型添加方法。

注意事項(xiàng): 非本地類(lèi)型不能定義方法,也就是說(shuō)我們不能給別的包的類(lèi)型定義方法。

結(jié)構(gòu)體的匿名字段

匿名字段默認(rèn)采用類(lèi)型名作為字段名,結(jié)構(gòu)體要求字段名稱(chēng)必須唯一,因此一個(gè)結(jié)構(gòu)體中同種類(lèi)型的匿名字段只能有一個(gè)。

嵌套結(jié)構(gòu)體

一個(gè)結(jié)構(gòu)體中可以嵌套包含另一個(gè)結(jié)構(gòu)體或結(jié)構(gòu)體指針。

嵌套匿名結(jié)構(gòu)體

當(dāng)訪問(wèn)結(jié)構(gòu)體成員時(shí)會(huì)先在結(jié)構(gòu)體中查找該字段,找不到再去匿名結(jié)構(gòu)體中查找。

嵌套結(jié)構(gòu)體的字段名沖突

嵌套結(jié)構(gòu)體內(nèi)部可能存在相同的字段名。這個(gè)時(shí)候?yàn)榱吮苊馄缌x需要指定具體的內(nèi)嵌結(jié)構(gòu)體的字段。

結(jié)構(gòu)體的“繼承”

Go語(yǔ)言中使用結(jié)構(gòu)體也可以實(shí)現(xiàn)其他編程語(yǔ)言中面向?qū)ο蟮睦^承。

結(jié)構(gòu)體字段的可見(jiàn)性

結(jié)構(gòu)體中字段大寫(xiě)開(kāi)頭表示可公開(kāi)訪問(wèn),小寫(xiě)表示私有(僅在定義當(dāng)前結(jié)構(gòu)體的包中可訪問(wèn))。

結(jié)構(gòu)體與JSON序列化

JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫(xiě)。同時(shí)也易于機(jī)器解析和生成。JSON鍵值對(duì)是用來(lái)保存JS對(duì)象的一種方式,鍵/值對(duì)組合中的鍵名寫(xiě)在前面并用雙引號(hào)""包裹,使用冒號(hào):分隔,然后緊接著值;多個(gè)鍵值之間使用英文,分隔。

結(jié)構(gòu)體標(biāo)簽(Tag)

Tag是結(jié)構(gòu)體的元信息,可以在運(yùn)行的時(shí)候通過(guò)反射的機(jī)制讀取出來(lái)。 Tag在結(jié)構(gòu)體字段的后方定義,由一對(duì)反引號(hào)包裹起來(lái),具體的格式如下:

`key1:"value1" key2:"value2"`

結(jié)構(gòu)體標(biāo)簽由一個(gè)或多個(gè)鍵值對(duì)組成。鍵與值使用冒號(hào)分隔,值用雙引號(hào)括起來(lái)。鍵值對(duì)之間使用一個(gè)空格分隔。 注意事項(xiàng): 為結(jié)構(gòu)體編寫(xiě)Tag時(shí),必須嚴(yán)格遵守鍵值對(duì)的規(guī)則。結(jié)構(gòu)體標(biāo)簽的解析代碼的容錯(cuò)能力很差,一旦格式寫(xiě)錯(cuò),編譯和運(yùn)行時(shí)都不會(huì)提示任何錯(cuò)誤,通過(guò)反射也無(wú)法正確取值。例如不要在key和value之間添加空格。

例如我們?yōu)镾tudent結(jié)構(gòu)體的每個(gè)字段定義json序列化時(shí)使用的Tag:

當(dāng)前名稱(chēng):go語(yǔ)言struct,go語(yǔ)言string轉(zhuǎn)float
分享鏈接:http://chinadenli.net/article1/dsihcod.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google外貿(mào)網(wǎng)站建設(shè)網(wǎng)站建設(shè)定制開(kāi)發(fā)手機(jī)網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司