真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言引用數(shù)據(jù)類型 golang值類型和引用類型

Go語言中怎樣判斷數(shù)據(jù)類型

一般來說,我們不會直接使用ASCII碼來處理,因為這樣不夠直觀。比如你說的判定輸入是否是字母,是否是數(shù)字,那么有個比較直觀的方法來處理。如果你看過ASCII碼表,那么你就知道字數(shù)和字母在ASCII碼表中都是連續(xù)的,所以這個就比較好解決了。

十載的向陽網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整向陽建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“向陽網(wǎng)站設(shè)計”,“向陽網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

判定字符ch是否是數(shù)字:

if(ch='0' ch='9')

判定字符ch是否是字母:

if(ch='a' ch='z' || ch='A' ch='Z')

當然,有已經(jīng)定義好的庫函數(shù)用來判定是否數(shù)字和字母,不要加加載頭文件ctype.h

判定字符ch是否是數(shù)字:

if(isalnum(ch));

判定字符ch是否是字母:

if(isalpha(ch));

這兩個函數(shù)都是判定成立,結(jié)果是true也就是1,判定不成立,結(jié)果是false,也就是0.

Go數(shù)據(jù)結(jié)構(gòu)篇

1、基本數(shù)據(jù)類型

bool

string

int int8 int16 int32 int64

uint uint8 uint16 uint32 uint64 uintptr

byte // alias for int8

rune // alias for int32,represents a Unicode code point

float32 float64

complex64 complex128

常量定義

2、類型轉(zhuǎn)換

(1)Go語言不允許隱式類型轉(zhuǎn)換(不支持小位數(shù)類型向大位數(shù)類型轉(zhuǎn))

(2)別名和原有類型也不能進行隱式類型轉(zhuǎn)換(type MyInt int64 = int64)

3、類型的預(yù)定義值

1.math.MaxInt64

2.math.MaxFloat64

3.math.MaxUInt32

4、指針類型

(1)不支持指針運算

(2)string是值類型,其默認的初始化值為空字符串,而不是nil

5、算術(shù)運算符

+ - * / % ++ --(不支持前置++ --)

6、比較運算符

#== != = =

(1)比較數(shù)組

相同維數(shù)且含有形同個數(shù)元素的數(shù)組才可以比較

每個元素都相同的才相等

7、位運算符

| ^

^ (按位置零) a (^b)

1 ^ 0 1

1 ^ 1 0

0 ^ 1 0

0 ^ 0 0

8、條件與循環(huán)

(1)循環(huán)

Go 語?僅?持循環(huán)關(guān)鍵字 for

(2)條件

9、數(shù)組和切片

數(shù)組截取,索引下標從0開始計數(shù)

a[開始索引(包含), 結(jié)束索引(不包含)]

a := [...]int{1, 2, 3, 4, 5}

a[1:2] //2

a[1:3] //2,3

a[1:len(a)] //2,3,4,5

a[1:] //2,3,4,5

a[:3] //1,2,3

切片內(nèi)部結(jié)構(gòu)

9、Map

9、字符串

Unicode UTF8

常?字符串函數(shù)

Go語言基礎(chǔ)語法(一)

本文介紹一些Go語言的基礎(chǔ)語法。

先來看一個簡單的go語言代碼:

go語言的注釋方法:

代碼執(zhí)行結(jié)果:

下面來進一步介紹go的基礎(chǔ)語法。

go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,

常用方法:

示例代碼:

執(zhí)行結(jié)果:

更多格式化方法可以訪問中的fmt包。

log包實現(xiàn)了簡單的日志服務(wù),也提供了一些格式化輸出的方法。

執(zhí)行結(jié)果:

下面來介紹一下go的數(shù)據(jù)類型

下表列出了go語言的數(shù)據(jù)類型:

int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。

常量是在程序編譯時就確定下來的值,程序運行時無法改變。

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

Go 語言的運算符主要包括算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關(guān)運算符。

算術(shù)運算符:

關(guān)系運算符:

邏輯運算符:

位運算符:

賦值運算符:

指針相關(guān)運算符:

下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。

if語法格式如下:

if ... else :

else if:

示例代碼:

語法格式:

另外,添加 fallthrough 會強制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。

示例代碼:

執(zhí)行結(jié)果:

下面介紹幾種循環(huán)語句:

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

也可以通過標記退出循環(huán):

--THE END--

golang中的傳值或傳引用

按數(shù)據(jù)類別有以下幾種數(shù)據(jù)類型:

按存儲方式也有兩大類數(shù)據(jù)類型:

值類型:變量直接存儲值。值類型的數(shù)據(jù)存儲在棧內(nèi)存空間中,棧在函數(shù)調(diào)f返回后,內(nèi)存會被釋放。

引用類型:變量存儲的是一個地址,這個地址存儲最終的值。引用數(shù)據(jù)類型的數(shù)據(jù)存儲在堆內(nèi)存空間中,通過 GC 回收。

函數(shù)調(diào)用時申明的基礎(chǔ)類型均為值傳遞,如int,string,數(shù)組等,數(shù)據(jù)傳入函數(shù)后會重新copy一份,函數(shù)內(nèi)的修改不會影響外面的變量,外部變量的修改也不會影響函數(shù)類的變量。

func main () {

myvar := [ 4 ] string {" test0 ", " test1 ", " test3 ", " test4 "}

go Test (myvar)

for i := 1 ; i

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

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

自定義類型

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

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

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

類型別名

類型別名是Go1.9版本添加的新功能。

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

type TypeAlias = Type

我們之前見過的rune和byte就是類型別名,他們的定義如下:

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

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

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

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

Go語言中通過struct來實現(xiàn)面向?qū)ο蟆?/p>

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

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

其中:

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

同樣類型的字段也可以寫在一行,

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

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

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

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

基本實例化

舉個例子:

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

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

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

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

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

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

需要注意的是在Go語言中支持對結(jié)構(gòu)體指針直接使用.來訪問結(jié)構(gòu)體的成員。

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

使用對結(jié)構(gòu)體進行取地址操作相當于對該結(jié)構(gòu)體類型進行了一次new實例化操作。

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

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

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

使用鍵值對初始化

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

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

當某些字段沒有初始值的時候,該字段可以不寫。此時,沒有指定初始值的字段的值就是該字段類型的零值。

使用值的列表初始化

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

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

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

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

輸出:

【進階知識點】關(guān)于Go語言中的內(nèi)存對齊推薦閱讀:在 Go 中恰到好處的內(nèi)存對齊

面試題

請問下面代碼的執(zhí)行結(jié)果是什么?

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

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

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

方法和接收者

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

方法的定義格式如下:

其中,

舉個例子:

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

指針類型的接收者

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

調(diào)用該方法:

值類型的接收者

當方法作用于值類型接收者時,Go語言會在代碼運行時將接收者的值復(fù)制一份。在值類型接收者的方法中可以獲取接收者的成員值,但修改操作只是針對副本,無法修改接收者變量本身。

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

任意類型添加方法

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

注意事項: 非本地類型不能定義方法,也就是說我們不能給別的包的類型定義方法。

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

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

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

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

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

當訪問結(jié)構(gòu)體成員時會先在結(jié)構(gòu)體中查找該字段,找不到再去匿名結(jié)構(gòu)體中查找。

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

嵌套結(jié)構(gòu)體內(nèi)部可能存在相同的字段名。這個時候為了避免歧義需要指定具體的內(nèi)嵌結(jié)構(gòu)體的字段。

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

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

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

結(jié)構(gòu)體中字段大寫開頭表示可公開訪問,小寫表示私有(僅在定義當前結(jié)構(gòu)體的包中可訪問)。

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

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

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

Tag是結(jié)構(gòu)體的元信息,可以在運行的時候通過反射的機制讀取出來。 Tag在結(jié)構(gòu)體字段的后方定義,由一對反引號包裹起來,具體的格式如下:

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

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

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

go語言中數(shù)組使用的注意事項和細節(jié)

1、數(shù)組是多個 相同類型 的數(shù)據(jù)的組合,一個數(shù)組一旦聲明/定義了,其 長度是固定的,不能動態(tài)變化 。

2、var arr []int? ? 這時arr就是一個slice 切片 。

3、數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括值類型和引用類型,但是 不能混用 。

4、數(shù)組創(chuàng)建后,如果沒有賦值,有默認值如下:

? ? 數(shù)值類型數(shù)組:????默認值為 0

? ? 字符串數(shù)組:? ? ? ?默認值為 ""

? ? bool數(shù)組:? ? ? ? ? ?默認值為 false

5、使用數(shù)組的步驟:

? ? (1)聲明數(shù)組并開辟空間

? ? (3)給數(shù)組各個元素賦值

? ? (3)使用數(shù)組

6、數(shù)組的下標是從0開始的。

7、數(shù)組下標必須在指定范圍內(nèi)使用,否則報panic:數(shù)組越界,比如var arr [5]int的有效下標為0~4.

8、Go的數(shù)組屬于 值類型 ,在默認情況下是 值傳遞 ,因此會進行值拷貝。 數(shù)組間不會相互影響。

9、如想在其他函數(shù)中去修改原來的數(shù)組,可以使用 引用傳遞 (指針方式)。

10、長度是數(shù)組類型的一部分,在傳遞函數(shù)參數(shù)時,需要考慮數(shù)組的長度,看以下案例:

題1:編譯錯誤,因為不能把[3]int類型傳遞給[]int類型,前者是數(shù)組,后者是切片;

題2:編譯錯誤,因為不能把[3]int類型傳遞給[4]int類型;

題3:編譯正確,因為[3]int類型傳給[3]int類型合法。


新聞標題:go語言引用數(shù)據(jù)類型 golang值類型和引用類型
本文網(wǎng)址:http://weahome.cn/article/hgdeod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部