[GO語(yǔ)言基礎(chǔ)] 三.變量聲明、數(shù)據(jù)類(lèi)型、標(biāo)識(shí)符及編程練習(xí)12題

      網(wǎng)友投稿 906 2025-03-31

      源碼-:


      https://github.com/eastmountyxz/Go-learning

      前文參考:

      [GO語(yǔ)言基礎(chǔ)] 一.為什么我要學(xué)習(xí)Golang以及GO語(yǔ)言入門(mén)普及

      [GO語(yǔ)言基礎(chǔ)] 二.編譯運(yùn)行、語(yǔ)法規(guī)范、注釋轉(zhuǎn)義及API標(biāo)準(zhǔn)庫(kù)知識(shí)普及

      [GO語(yǔ)言基礎(chǔ)] 三.變量聲明、數(shù)據(jù)類(lèi)型、標(biāo)識(shí)符及編程練習(xí)12題

      文章目錄

      一.變量

      1.什么是變量

      2.變量的聲明

      3.變量的注意事項(xiàng)

      二.數(shù)據(jù)類(lèi)型

      1.整型

      2.浮點(diǎn)型

      3.字符類(lèi)型

      4.布爾型

      5.字符串類(lèi)型

      6.基本數(shù)據(jù)類(lèi)型的默認(rèn)值

      7.基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換

      8.基本數(shù)據(jù)類(lèi)型和string轉(zhuǎn)換

      三.指針

      1.基本介紹

      2.指針類(lèi)型

      3.獲取指針類(lèi)型所指向的值

      4.指針修改值

      5.值類(lèi)型和引用類(lèi)型

      四.標(biāo)識(shí)符和關(guān)鍵字

      1.標(biāo)識(shí)符

      2.關(guān)鍵字

      五.GO編程練習(xí)

      1.題目

      2.解答

      六.總結(jié)

      一.變量

      1.什么是變量

      為什么需要變量呢?

      一個(gè)程序就是一個(gè)世界,不論使用哪種高級(jí)程序語(yǔ)言編寫(xiě)代碼,

      變量都是其程序的基本組成單位

      。如下圖所示的sum和sub都是變量。

      變量的定義:

      變量相當(dāng)于內(nèi)存中一個(gè)數(shù)據(jù)存儲(chǔ)空間的表示,可以將變量看作是一個(gè)房間的門(mén)牌號(hào),通過(guò)門(mén)牌號(hào)能找到房間;

      通過(guò)變量名可以訪(fǎng)問(wèn)到變量的值

      。變量使用的常見(jiàn)三個(gè)步驟:

      聲明變量或定義變量

      變量賦值

      變量使用

      變量入門(mén)示例:

      變量表示內(nèi)存中的一個(gè)存儲(chǔ)區(qū)域,該區(qū)域有自己的變量名和數(shù)據(jù)類(lèi)型。下面是一個(gè)簡(jiǎn)單案例:

      package main import "fmt" func main() { //定義變量 var n int //賦值變量 n = 10 //使用變量 fmt.Println("n =", n) }

      2.變量的聲明

      Go語(yǔ)言變量使用的三種方式:

      (1) 指定變量類(lèi)型,聲明后若不復(fù)制,使用默認(rèn)值,如int的默認(rèn)值是0;

      var i int

      fmt.Println(“i =”, i)

      (2) 根據(jù)值自行判定變量類(lèi)型(類(lèi)型推導(dǎo));

      var num = 3.14

      fmt.Println(“num =”, num)

      (3) 省略var,=是賦值, :=是聲明變量并賦值。注意 :=左側(cè)變量不應(yīng)該是已經(jīng)聲明過(guò)的,否則會(huì)編譯錯(cuò)誤

      name := “eastmount”

      fmt.Println(“name =”, name)

      等價(jià)于

      var name string

      name = “eastmount”

      package main import "fmt" func main() { //方法一:指定變量類(lèi)型 int默認(rèn)值為0 var i int fmt.Println("i =", i) //方法二:根據(jù)值自行判定變量類(lèi)型 var num = 3.14 fmt.Println("num =", num) //方法三:省略var :=聲明變量并賦值 name := "eastmount" fmt.Println("name =", name) }

      輸出結(jié)果如下圖所示:

      多變量聲明:

      在編程中,通常會(huì)遇到一次性聲明多個(gè)變量的情況。Golang同樣提供了對(duì)應(yīng)的功能,如下所示:

      var n1, n2, n3 int

      var n1, name, n3 = 100, “csdn”, 3.14

      n1, name, n3 := 100, “csdn”, 3.14

      代碼如下,注意不要重復(fù)定義變量,否則會(huì)報(bào)錯(cuò)。

      package main import "fmt" func main() { //方法一:指定變量類(lèi)型 int默認(rèn)值為0 var n1, n2, n3 int fmt.Println("n1 =", n1, "n2 =", n2, "n3 =", n3) //方法二:根據(jù)值自行判定變量類(lèi)型 var m1, name, m3 = 100, "csdn", 3.14 fmt.Println("m1 =", m1, "name =", name, "m3 =", m3) //方法三:省略var :=聲明變量并賦值 k1, k2, k3 := 100, "yxz", 3.14 fmt.Println("k1 =", k1, "k2 =", k2, "k3 =", k3) }

      輸出結(jié)果如下圖所示:

      那么,如何一次性聲明多個(gè)全局變量呢?

      在Go中函數(shù)外部定義的變量就是全局變量

      全局變量如果只定義不使用,不會(huì)報(bào)錯(cuò)

      一次性聲明

      package main import "fmt" //定義全局變量 var n = 100 var m = 200 var k = "eastmount" //等價(jià)于一次性聲明 var ( o = 300 p = 400 q = "yxz" ) func main() { //輸出全局變量 fmt.Println("n =", n, "m =", m, "k =", k) }

      3.變量的注意事項(xiàng)

      注意事項(xiàng):

      變量在某個(gè)區(qū)域的數(shù)據(jù)值可以在同一類(lèi)型范圍內(nèi)不斷變化,但不能改變數(shù)據(jù)類(lèi)型(強(qiáng)類(lèi)型轉(zhuǎn)換)

      變量在同一作用域(在一個(gè)函數(shù)或代碼塊)內(nèi)不能重名

      變量=變量名+值+數(shù)據(jù)類(lèi)型

      ,這一點(diǎn)大家需要注意,變量的三要素

      Golang的變量如果沒(méi)有賦初值, 編譯器會(huì)使用默認(rèn)值,比如int為0,string為空串等

      變量知識(shí)總結(jié):

      聲明變量

      基本語(yǔ)法:

      var 變量名 數(shù)據(jù)類(lèi)型

      比如“var n int”表示聲明一個(gè)變量,變量名為n;“var num float32”表示聲明一個(gè)單精度小數(shù)類(lèi)型的變量

      初始化變量

      在聲明變量時(shí)賦初值,比如“var n int = 12”,如果聲明時(shí)就直接賦值,可省略數(shù)據(jù)類(lèi)型,比如“var m = 30”

      變量賦值

      先聲明變量“var num int”,此時(shí)默認(rèn)值為0,再給變量賦值“num=78”

      加號(hào)用法:

      當(dāng)左右兩邊都是數(shù)值型是,做加法運(yùn)算

      當(dāng)左右兩邊都是字符串,做字符串拼接

      package main import "fmt" func main() { //加法運(yùn)算 var i, j = 2, 3 var res = i + j fmt.Println("res =", res) //字符串拼接 var str1 = "hello" var str2 = "world" var str3 = str1 + str2 fmt.Println("str3 =", str3) }

      二.數(shù)據(jù)類(lèi)型

      每一種數(shù)據(jù)都定義了明確的數(shù)據(jù)類(lèi)型,并在內(nèi)存中分配不同大小的內(nèi)存空間。常用的數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型和派生/復(fù)雜數(shù)據(jù)類(lèi)型。

      基本數(shù)據(jù)類(lèi)型

      數(shù)值型(整型、浮點(diǎn)型)、字符型(單個(gè)字符)、布爾型、字符串(Go中歸屬為基本數(shù)據(jù)類(lèi)型)、復(fù)數(shù)類(lèi)型(complex64、complex128)、rune

      派生/復(fù)雜數(shù)據(jù)類(lèi)型

      指針、數(shù)組、結(jié)構(gòu)體、管道、函數(shù)、切片、接口、map

      1.整型

      整數(shù)類(lèi)型就是用于存放整數(shù)值,比如0、-2、23等。

      (1) 整形的各個(gè)類(lèi)型

      注意,一個(gè)字節(jié)為8位(bit),計(jì)算機(jī)采用二進(jìn)制(0或1),即2^8表數(shù)范圍。

      有符號(hào)的int8表示為-128 ~ 127

      。下圖bit7為符號(hào)位,最大值為bit0至bit6均為1,故為2^7-127?1,即127;由于存在+0和-0,因此將 -0位賦值給負(fù)數(shù),因此最小值為-128。

      無(wú)符號(hào)uint8表示為0 ~ 255

      。無(wú)符號(hào)最大值為bit0至bit7均為1,故為2^8-128?1,即255。

      案例如下:

      package main import "fmt" func main() { var i int = 1 fmt.Println("i =", i) var j int8 = 127 fmt.Println("j =", j) }

      輸出結(jié)果如下圖所示:

      (2) 無(wú)符號(hào)整形

      案例如下,如果uint8賦值為256則會(huì)提示邊界溢出“.\type03_01.go:14:6: constant 256 overflows uint8”。

      (3) 其他int類(lèi)型

      案例如下:

      package main import "fmt" func main() { var i int = -20 fmt.Println("i =", i) var j uint = 127 fmt.Println("j =", j) var k rune = 1024 fmt.Println("k =", k) var m byte = 255 fmt.Println("m =", m) }

      輸出結(jié)果如下:

      (4) 整形的注意事項(xiàng)

      Golang各證書(shū)類(lèi)型分為有符號(hào)和無(wú)符號(hào),int、uint的大小和系統(tǒng)有關(guān)

      Golang的整型默認(rèn)聲明為int型

      查看某個(gè)變量的字節(jié)大小(unsafe.Sizeof)和數(shù)據(jù)類(lèi)型(fmt.Printf->%T)

      Golang程序中整型變量使用時(shí),遵守保小不保大的原則,即:在保證程序正確運(yùn)行下,盡量使用占用空間小的數(shù)據(jù)類(lèi)型,比如年齡

      bit是計(jì)算機(jī)中最小存儲(chǔ)單位,byte是計(jì)算機(jī)中基本存儲(chǔ)單元(

      1 byte=8 bit

      package main import "fmt" import "unsafe" func main() { //查看變量的數(shù)據(jù)類(lèi)型 //fmt.Printf() 用于格式化輸出 var num int = 1024 fmt.Println("num =", num) fmt.Printf("num 的數(shù)據(jù)類(lèi)型是 %T \n", num) //查看變量占用的空間大小 var n int64 = 10 var name = "eastmount" fmt.Printf("n 的數(shù)據(jù)類(lèi)型是 %T; 占用字節(jié)數(shù)是 %d \n", n, unsafe.Sizeof(n)) fmt.Printf("name 的數(shù)據(jù)類(lèi)型是 %T; 占用字節(jié)數(shù)是 %d \n", name, unsafe.Sizeof(name)) //Golang程序中整型變量使用盡量遵守保小原則 //在保證程序正確運(yùn)行下,盡量使用空間小的數(shù)據(jù)類(lèi)型 var age byte = 28 fmt.Printf("n 的數(shù)據(jù)類(lèi)型是 %T; 占用字節(jié)數(shù)是 %d \n", age, unsafe.Sizeof(age)) }

      輸出結(jié)果如下圖所示:

      2.浮點(diǎn)型

      浮點(diǎn)型用于存放小數(shù),比如3.14、-1.9等,兩種類(lèi)型如下(沒(méi)有double類(lèi)型)。

      單精度f(wàn)loat32:4字節(jié)

      雙精度f(wàn)loat64:8字節(jié)

      浮點(diǎn)數(shù)都是有符號(hào)的,浮點(diǎn)數(shù)在機(jī)器中存放形式為:

      浮點(diǎn)數(shù)=符號(hào)位+指數(shù)位+尾數(shù)位

      浮點(diǎn)數(shù)的尾數(shù)部分可能丟失,造成精度損失。

      float64的精度要比f(wàn)loat32準(zhǔn)確,如果我們要保存一個(gè)高精度數(shù)據(jù),則應(yīng)該選用float64;軟件開(kāi)發(fā)中也推薦使用float64

      package main import "fmt" func main() { //浮點(diǎn)數(shù)定義 var price float32 = 89.12 fmt.Println("price =", price) var num1 float32 = -0.00081 var num2 float64 = -78942.00912 fmt.Println("num1 =", num1, "num2 =", num2) //精度損失 var num3 float32 = -123.0000203 var num4 float64 = -123.0000203 fmt.Println("\n精度損失") fmt.Println("num3 =", num3, "num4 =", num4) }

      輸出結(jié)果如下圖所示,可以看到float32精度損失。

      浮點(diǎn)數(shù)的注意事項(xiàng)

      Golang浮點(diǎn)類(lèi)型包括float32和float64兩種,不存在double類(lèi)型

      Golang浮點(diǎn)類(lèi)型有固定的范圍和字段長(zhǎng)度,不受具體操作系統(tǒng)的影響

      Golang的浮點(diǎn)型默認(rèn)聲明為float64類(lèi)型

      浮點(diǎn)型常量有兩種表示

      – 十進(jìn)制數(shù)形式,如:3.14、.1234,必須有小數(shù)點(diǎn)

      – 科學(xué)技術(shù)法形式,如:5.1234e2=5.12*10的2次方,5.12E-2=5.12/10的2次方

      通常情況推薦使用float64,它比f(wàn)loat32更精確

      package main import "fmt" import "unsafe" func main() { //浮點(diǎn)數(shù)默認(rèn)聲明為 float64類(lèi)型 var num = 89.12 fmt.Printf("num的數(shù)據(jù)類(lèi)型是 %T; 占用字節(jié)數(shù)是 %d \n", num, unsafe.Sizeof(num)) //十進(jìn)制數(shù)形式 num1 := 3.14 num2 := .123 fmt.Println("num1 =", num1, "num2 =", num2) //科學(xué)計(jì)數(shù)法形式 num3 := 1.234e2 //1.234 * 10的2次方 num4 := 1.234E2 //1.234 * 10的2次方 num5 := 1.234E-2 //1.234 / 10的2次方 fmt.Println("num3 =", num3, "num4 =", num4, "num5 =", num5) }

      輸出結(jié)果如下圖所示:

      3.字符類(lèi)型

      Golang中沒(méi)有專(zhuān)門(mén)的字符類(lèi)型,如果要存儲(chǔ)單個(gè)字符(字母),一般使用

      byte

      來(lái)保存(ASCII碼表)。注意,是單個(gè)字母,而漢字是3個(gè)字節(jié)。

      字符串是一串固定長(zhǎng)度的字符連接起來(lái)的字符序列。Go的字符串是由單個(gè)字節(jié)連接起來(lái)的,也就是說(shuō)傳統(tǒng)的字符串是由字符組成的,

      而Go的字符串不同,它是由字節(jié)組成的

      舉個(gè)簡(jiǎn)單示例:

      如果保存的字符在A(yíng)SCII表中,比如 [0-9, a-z, A-Z, …] 直接可以保存到byte

      如果保存的字符對(duì)應(yīng)碼值大于255,這是可以考慮使用int類(lèi)型保存

      如果需要按照字符的方式輸出,這是需要格式化輸出,即fmt.Printf("%c", num)

      package main import "fmt" func main() { //定義字符類(lèi)型 var c1 byte = 'a' var c2 byte = '6' //當(dāng)我們直接輸出byte值 即輸出對(duì)應(yīng)字符的ASCII碼值 fmt.Println("c1 =", c1) fmt.Println("c2 =", c2) //如果需要輸出對(duì)應(yīng)字符 需要使用格式化輸出 fmt.Printf("c1=%c c2=%c\n", c1, c2) //var c3 byte = '楊' //overflow溢出 var c3 int = '楊' fmt.Printf("c3=%c c3對(duì)應(yīng)碼值=%d\n", c3, c3) }

      輸出結(jié)果如下圖所示,比如“楊”對(duì)應(yīng)Unicode編碼10進(jìn)制為“26472”。由于A(yíng)SCII碼只能存儲(chǔ)127個(gè)字符,英文字母和字符可以,但是中文字符或其他國(guó)家字符很多,故衍生出UTF-8其他編碼方式。

      字符型的注意事項(xiàng)

      字符常量是用單引號(hào)(’)括起來(lái)的單個(gè)字符,例如var c1 byte=‘a(chǎn)’,var c2 int=‘中’

      Go中允許使用轉(zhuǎn)義字符 \’ 來(lái)講其后的字符轉(zhuǎn)變?yōu)樘厥庾址统A浚热鐅ar c3 char = ‘\n’,表示換行符

      Go語(yǔ)言的字符使用UTF-8編碼,英文字母1個(gè)字節(jié),漢字3個(gè)字節(jié)。如果想查詢(xún)字對(duì)應(yīng)的utf8編碼,使用網(wǎng)址:

      –?http://www.mytju.com/classcode/tools/encode_utf8.asp

      在Go中,字符的本質(zhì)是一個(gè)整數(shù),直接輸出時(shí),是該符對(duì)應(yīng)的UTF-8編碼的碼字

      可以直接給某個(gè)變量賦一個(gè)數(shù)字,然后按格式化輸出%c,會(huì)輸出該數(shù)字對(duì)應(yīng)的unicode字符

      字符類(lèi)型可以進(jìn)行運(yùn)算,相當(dāng)于一個(gè)整數(shù),因?yàn)樗紝?duì)應(yīng)有Unicode編碼

      package main import "fmt" func main() { //直接賦值數(shù)字 格式化輸出字符 var c1 int = 22269 // 22269->'國(guó)' 120->'x' fmt.Printf("c1=%c\n", c1) //字符類(lèi)型可以運(yùn)算 相當(dāng)于一個(gè)整數(shù) 運(yùn)算時(shí)按碼值運(yùn)行 var c2 = 10 + 'a' fmt.Printf("c3=%c c3對(duì)應(yīng)碼值=%d\n", c2, c2) }

      輸出結(jié)果如下圖所示:

      字符類(lèi)型本質(zhì)探討

      字符型存儲(chǔ)到計(jì)算機(jī)中,需要將字符對(duì)應(yīng)的碼值(整數(shù))找出來(lái)

      存儲(chǔ):字符 -> 對(duì)應(yīng)碼值 -> 二進(jìn)制 -> 存儲(chǔ)

      讀取:二進(jìn)制 -> 碼值 -> 字符 -> 讀取

      字符和碼值的對(duì)應(yīng)關(guān)系是通過(guò)字符編碼表決定的,事先規(guī)定好的

      Go語(yǔ)言的編碼都統(tǒng)一成utf-8,從而解決各種亂碼問(wèn)題

      4.布爾型

      布爾(bool)類(lèi)型數(shù)據(jù)只允許取值true和false,用于表示真和假。它僅占1個(gè)字節(jié),常用于邏輯運(yùn)算,適用于程序流程控制(后續(xù)詳細(xì)介紹)。

      if條件控制語(yǔ)句

      for循環(huán)控制語(yǔ)句

      下面舉個(gè)簡(jiǎn)單的案例:

      package main import "fmt" import "unsafe" func main() { //定義數(shù)據(jù)類(lèi)型 var num = false fmt.Println("num =", num) //注意bool類(lèi)型占用1個(gè)字節(jié) 只能取true或false fmt.Println("占用空間 =", unsafe.Sizeof(num)) }

      輸出結(jié)果如下:

      注意:Go語(yǔ)言中bool類(lèi)型不可以使用0或非0的整數(shù)替代false或true,這和C語(yǔ)言不同。

      5.字符串類(lèi)型

      字符串是一串固定長(zhǎng)度的字符連接起來(lái)的字符序列。Go字符串是由單個(gè)字節(jié)連接起來(lái)的。Go語(yǔ)言的字符串的字節(jié)使用UTF-8編碼標(biāo)識(shí)Unicode文本。

      package main import "fmt" func main() { //定義字符串類(lèi)型 var name string = "我的名字叫Eastmount!" fmt.Println(name) }

      輸出結(jié)果如下圖所示:

      字符串的注意事項(xiàng)

      Go語(yǔ)言字符串的字符使用UTF-8編碼標(biāo)識(shí)Unicode文本,這樣Golang統(tǒng)一使用UTF-8編碼,中文亂碼問(wèn)題不在困擾我們。編碼問(wèn)題一直是C語(yǔ)言、Java、Python2常見(jiàn)問(wèn)題

      字符串一旦被復(fù)制,字符串就不能修改,即Go中字符串是不可變的(原子性)

      字符串兩種表示形式

      雙引號(hào):會(huì)識(shí)別轉(zhuǎn)移字符

      反引號(hào):以字符串的原生形式輸出,包括換行和特殊字符,可以實(shí)現(xiàn)防止攻擊、輸出源代碼等效果

      package main import "fmt" func main() { //雙引號(hào)字符串 str1 := "Eastmount\nCSDN" fmt.Println(str1) //反引號(hào)字符串 `` str2 := ` package main import "fmt" func main() { //定義字符串類(lèi)型 var name string = "我的名字叫Eastmount!" fmt.Println(name) } ` fmt.Println(str2) }

      輸出結(jié)果如下圖所示:

      字符串拼接

      var str = “hello” + “world”

      str += “yangxiuzhang”

      當(dāng)一行字符串太長(zhǎng)時(shí),需要使用到多行字符串,可以進(jìn)行如下處理:

      6.基本數(shù)據(jù)類(lèi)型的默認(rèn)值

      在Golang中,數(shù)據(jù)類(lèi)型都有一個(gè)默認(rèn)值,當(dāng)程序員沒(méi)有賦初值時(shí),它就會(huì)保留默認(rèn)值(或零值)。常見(jiàn)默認(rèn)值如下圖所示:

      舉例如下:

      7.基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換

      Golang和Java、C不同,Go在不同類(lèi)型的變量之間賦值時(shí)需要顯示轉(zhuǎn)換。換句話(huà)說(shuō),Golang中數(shù)據(jù)類(lèi)型不能自動(dòng)轉(zhuǎn)換。

      強(qiáng)制轉(zhuǎn)換基本語(yǔ)法

      表達(dá)式 T(v) 將值 v 轉(zhuǎn)換為類(lèi)型 T

      T:數(shù)據(jù)類(lèi)型,比如int32、int64、float64等

      v:需要轉(zhuǎn)換的變量

      package main import "fmt" func main() { //數(shù)據(jù)類(lèi)型轉(zhuǎn)換 var a int32 = 100 //整型->浮點(diǎn)型 var b float32 = float32(a) var c int8 = int8(a) //低精度->高精度 var d int64 = int64(a) fmt.Printf("a=%v b=%v c=%v d=%v\n", a, b, c, d) fmt.Printf("a=%T b=%T c=%T d=%T\n", a, b, c, d) //浮點(diǎn)型->整型 var e float32 = 3.14 var f int32 = int32(e) fmt.Printf("e=%v f=%v\n", e, f) fmt.Printf("e=%T f=%T\n", e, f) }

      輸出結(jié)果如下圖所示:

      注意事項(xiàng)

      Go中數(shù)據(jù)類(lèi)型的轉(zhuǎn)換可以從表示范圍小到表示范圍大,也可以從范圍大到范圍小

      被轉(zhuǎn)換的是變量存儲(chǔ)的數(shù)據(jù)(即值),變量本身的數(shù)據(jù)類(lèi)型并沒(méi)有變化

      在轉(zhuǎn)換中,比如將 int64 轉(zhuǎn)換成 int8(-128到127),編譯時(shí)不會(huì)報(bào)錯(cuò),只是轉(zhuǎn)換的結(jié)果按溢出處理,和期待的結(jié)果不一樣。因此在轉(zhuǎn)換時(shí),需要考慮范圍

      數(shù)據(jù)類(lèi)型不一致的運(yùn)算錯(cuò)誤,建議轉(zhuǎn)換成相同的數(shù)據(jù)類(lèi)型。

      由于n3是int8類(lèi)型,賦值語(yǔ)句含128所以編譯不通過(guò);而n4也是int8類(lèi)型,但編譯能通過(guò),結(jié)果溢出處理。

      8.基本數(shù)據(jù)類(lèi)型和string轉(zhuǎn)換

      在程序開(kāi)發(fā)中,經(jīng)常將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換成string或?qū)tring轉(zhuǎn)換成基本數(shù)據(jù)類(lèi)型。

      (1) 基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換成string

      方法1:fmt.Sprintf("%參數(shù)", 表達(dá)式)

      Sprintf根據(jù)format參數(shù)生成格式化的字符串并返回該字符串,參數(shù)需要和表達(dá)式的數(shù)據(jù)類(lèi)型匹配。

      代碼如下:

      package main import "fmt" func main() { //變量定義 var num1 int = 99 var num2 float64 = 3.14 var b bool = true var char byte = 'h' var str string //fmt.Sprintf轉(zhuǎn)換 str = fmt.Sprintf("%d", num1) fmt.Printf("str type %T str=%q\n", str, str) str = fmt.Sprintf("%f", num2) fmt.Printf("str type %T str=%q\n", str, str) str = fmt.Sprintf("%t", b) fmt.Printf("str type %T str=%q\n", str, str) str = fmt.Sprintf("%c", char) fmt.Printf("str type %T str=%q\n", str, str) }

      輸出結(jié)果如下圖所示:

      方法2:使用strconv包的函數(shù)

      – func FormatBool(b bool) string

      – func FormatFloat(f float64, fmt byte, prec, bitSize int) string

      – func FormatInt(i int64, base int) string

      – func FormatUint(i uint64, base int) string

      – func Itoa(int(num))

      package main import "fmt" import "strconv" func main() { //變量定義 var num1 int = 99 var num2 float64 = 3.14 var b bool = true var num3 int64 = 4567 var str string //strconv.FormatInt 10進(jìn)制 str = strconv.FormatInt(int64(num1), 10) fmt.Printf("str type %T str=%q\n", str, str) //strconv.FormatFloat(num2, 'f', 10, 64) //說(shuō)明:'f'格式 10表示小數(shù)位保留10位 64表示小數(shù)float64 str = strconv.FormatFloat(num2, 'f', 10, 64) fmt.Printf("str type %T str=%q\n", str, str) str = strconv.FormatBool(b) fmt.Printf("str type %T str=%q\n", str, str) str = strconv.Itoa(int(num3)) fmt.Printf("str type %T str=%q\n", str, str) }

      輸出結(jié)果如下圖所示:

      (2) string類(lèi)型轉(zhuǎn)基本數(shù)據(jù)類(lèi)型

      使用strconv包的函數(shù):

      func ParseBool(str string) (value bool, err error)

      [GO語(yǔ)言基礎(chǔ)] 三.變量聲明、數(shù)據(jù)類(lèi)型、標(biāo)識(shí)符及編程練習(xí)12題

      func ParseFloat(s string, bitSize int) (f float64, err error)

      func ParseInt(s string, base int, bitSize int) (i int64, err error)

      func ParseUint(s string, b int, bitSize int) (n uint64, err error)

      需要說(shuō)明,因?yàn)榉祷氐氖莍nt64或float64,如希望得到int32、float32,則需要調(diào)用 int32(num)處理。

      注意:在將String類(lèi)型轉(zhuǎn)換成基本數(shù)據(jù)類(lèi)型時(shí),要確保String類(lèi)型能夠轉(zhuǎn)成有效的數(shù)據(jù)。比如把“123”轉(zhuǎn)成一個(gè)整數(shù),但不能把“hello”轉(zhuǎn)成一個(gè)整數(shù);如果這樣Go直接將其轉(zhuǎn)成0,其他類(lèi)型也是同樣的道理,float轉(zhuǎn)成0、bool轉(zhuǎn)成false。

      三.指針

      1.基本介紹

      由于后續(xù)很多內(nèi)容(如引用)都會(huì)涉及到指針,C語(yǔ)言中它也是一個(gè)難點(diǎn),因此這里我們先介紹指針的基礎(chǔ)知識(shí),更好地幫助我們學(xué)習(xí)Golang。

      對(duì)于基本數(shù)據(jù)類(lèi)型來(lái)說(shuō),變量存的就是值,也叫值類(lèi)型。獲取變量的地址使用“&”,比如:

      var num int

      獲取num的地址是&num

      package main import "fmt" func main() { //基本數(shù)據(jù)類(lèi)型在內(nèi)存布局 var i int = 10 //i的地址 &i fmt.Println("i的地址=", &i) fmt.Println("i的值=", i) }

      輸出結(jié)果:

      i的地址= 0xc0000100a0 i的值= 10

      2.指針類(lèi)型

      指針變量存的是一個(gè)地址,這個(gè)地址指向的空間存的才是值,比如:

      var ptr *int = &num

      舉例說(shuō)明指針在內(nèi)存的布局。

      package main import "fmt" func main() { //基本數(shù)據(jù)類(lèi)型在內(nèi)存布局 var i int = 10 //i的地址 &i fmt.Println("i的地址=", &i) fmt.Println("i的值=", i) /* var ptr *int = &i 1.ptr是一個(gè)指針變量 2.ptr的類(lèi)型是*int 3.ptr本身的值是&i */ var ptr *int = &i fmt.Printf("ptr=%v\n", ptr) }

      輸出結(jié)果如下圖所示:

      3.獲取指針類(lèi)型所指向的值

      使用 * 實(shí)現(xiàn),比如 var ptr?int,使用ptr獲取ptr指向的值。

      package main import "fmt" func main() { //基本數(shù)據(jù)類(lèi)型在內(nèi)存布局 var i int = 10 //i的地址 &i fmt.Println("i的地址=", &i) fmt.Println("i的值=", i) /* var ptr *int = &i 1.ptr是一個(gè)指針變量 2.ptr的類(lèi)型是*int 3.ptr本身的值是&i */ var ptr *int = &i fmt.Printf("ptr=%v\n", ptr) //獲取指針類(lèi)型指向的值 fmt.Printf("ptr的地址=%v\n", &ptr) fmt.Printf("ptr指向的值=%v\n", *ptr) }

      輸出結(jié)果如下所示:

      i的地址= 0xc0000100a0

      i的值= 10

      ptr=0xc0000100a0

      ptr的地址=0xc000006030

      ptr指向的值=10

      舉例說(shuō)明:

      4.指針修改值

      編寫(xiě)一個(gè)程序,獲取一個(gè)int變量num的地址并顯示終端;再將num的地址賦值給指針ptr,通過(guò)ptr去修改num的值。

      package main import "fmt" func main() { //基本數(shù)據(jù)類(lèi)型 var num int = 10 fmt.Printf("num的地址=%v 原始值=%v\n", &num, num) //指針 var ptr *int ptr = &num fmt.Printf("ptr的地址=%v 指向的值為=%v 自身=%v\n", &ptr, *ptr, ptr) //修改值 *ptr = 666 fmt.Printf("num修改后的值=%v\n", num) }

      輸出結(jié)果如下圖所示:

      下面這三個(gè)練習(xí)也推薦大家嘗試。

      5.值類(lèi)型和引用類(lèi)型

      (1) 值類(lèi)型

      值類(lèi)型:有對(duì)應(yīng)的指針類(lèi)型,形式為“

      *數(shù)據(jù)類(lèi)型

      ”,比如int對(duì)應(yīng)的指針就是“*int”,float32對(duì)應(yīng)的指針類(lèi)型就是“*float32”,以此類(lèi)推

      值類(lèi)型的基本數(shù)據(jù)類(lèi)型包括:int、float、bool、string、數(shù)組和結(jié)構(gòu)體struct

      值類(lèi)型:變量直接存儲(chǔ)值,內(nèi)存通常在

      中分配

      (2) 引用類(lèi)型

      變量存儲(chǔ)的一個(gè)地址,這個(gè)地址對(duì)應(yīng)的空間才是真正存儲(chǔ)數(shù)據(jù)(值),內(nèi)存通常在堆上分配,當(dāng)沒(méi)有任何變量引用這個(gè)地址時(shí),該地址對(duì)應(yīng)的數(shù)據(jù)空間就成為一個(gè)垃圾空間,由GC來(lái)回收。

      - 引用類(lèi)型的基本數(shù)據(jù)類(lèi)型包括:指針、slice切片、map、管道、interface等

      內(nèi)存的棧區(qū)和堆區(qū)示意圖如下:

      四.標(biāo)識(shí)符和關(guān)鍵字

      1.標(biāo)識(shí)符

      Golang對(duì)各種變量、方法和函數(shù)等命名時(shí)使用的字符序列稱(chēng)為標(biāo)識(shí)符。凡是自己可以起名字的地方也都叫標(biāo)識(shí)符。其命名規(guī)則如下:

      由26個(gè)英文字母大小寫(xiě)、0-9、下劃線(xiàn)(_)組成

      數(shù)字不可以開(kāi)頭,比如正確的“var num int”、錯(cuò)誤的“var 3num int”

      Golang中嚴(yán)格區(qū)分大小寫(xiě),Name和name是兩個(gè)不同的變量

      標(biāo)識(shí)符不能包含空格

      下劃線(xiàn)(_)本身在Go中是一個(gè)特殊的標(biāo)識(shí)符,稱(chēng)為空標(biāo)識(shí)符

      。可以代表任何其它的標(biāo)識(shí)符,但是它對(duì)應(yīng)的值會(huì)被忽略,所以?xún)H能作為占位符使用,不能作為標(biāo)識(shí)符使用

      不能以系統(tǒng)保留關(guān)鍵字作為標(biāo)識(shí)符(一共有25個(gè)),比如break、if等

      標(biāo)識(shí)符命名注意事項(xiàng):

      包名:保持package的名字和目錄盡量保持一致,建議采取有意義的包名,不要和標(biāo)準(zhǔn)庫(kù)沖突(大家可以去Go開(kāi)源代碼學(xué)習(xí)下包名)。

      變量名、函數(shù)名、常量名建議采用駝峰法命名

      比如:var stuName string = “csdn”,形如xxxYyyyZzzz…

      如果變量名、函數(shù)名、常量名首字母大寫(xiě),則可以被其他的包訪(fǎng)問(wèn);如果首字母小寫(xiě),則只能在本包中使用(?首字母大寫(xiě)是公開(kāi)的,首字母小寫(xiě)是私有的?),在Golang中沒(méi)有public、private等關(guān)鍵字,這也是Go與其他語(yǔ)言的區(qū)別

      舉例說(shuō)明,首先在utils.go中定義一個(gè)變量;然后在main.go中使用該變量。

      untils.go

      package model //定義一個(gè)變量 var HeroName string = "武松"

      main.go

      package main import ( "fmt" //導(dǎo)入utils.go文件的變量或函數(shù) 引入該model包 "go_code/chapter03/datatype/model" ) func main() { //該區(qū)域的數(shù)據(jù)可以在同一類(lèi)型范圍內(nèi)變化 var n int = 10 n = 30 n = 50 fmt.Println("n=", n) //使用utils.go的HeroName變量 包名.標(biāo)志符 fmt.Println(model.HeroName) }

      輸出結(jié)果如下圖所示:

      如果變量名定義時(shí)是小寫(xiě)“heroNam”則會(huì)報(bào)錯(cuò)

      2.關(guān)鍵字

      在Go中,為簡(jiǎn)化代碼編譯過(guò)程中對(duì)代碼的解析,系統(tǒng)僅保留25個(gè)關(guān)鍵字,如下表所示:

      除了保留關(guān)鍵字外,Go還提供了36個(gè)預(yù)定的標(biāo)志符,包括基礎(chǔ)數(shù)據(jù)類(lèi)型和系統(tǒng)內(nèi)嵌函數(shù)。

      五.GO編程練習(xí)

      1.題目

      (1) 分別定義常見(jiàn)的數(shù)據(jù)類(lèi)型(整型、浮點(diǎn)型、字符型、布爾型、字符串型)變量,輸出對(duì)應(yīng)結(jié)果并查看變量的空間大小、數(shù)據(jù)類(lèi)型。

      變量名稱(chēng) 數(shù)據(jù)類(lèi)型 占用空間 對(duì)應(yīng)的值 num1 int 8 -12 num2 uint8 1 127 num3 int64 8 12345 num4 float32 4 3.14 num5 float64 8 314.15 num6 int 8 26472 num7 bool 1 false num8 string 16 Eastmount

      (2) 判斷數(shù)字9的奇偶性輸出它是奇數(shù)或偶數(shù)。

      num = 9 這是一個(gè)奇數(shù)

      (3) 有人用溫度計(jì)測(cè)量出華氏法表示的溫度(如69°F),先要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如20°C),輸入值為69。

      華氏度 f= 69 攝氏度 c= 20.555555555555557 攝氏度取整 c= 20

      (4) 通過(guò)兩種方法(調(diào)用函數(shù)和循環(huán))實(shí)現(xiàn)計(jì)算字符串“Eastmount”長(zhǎng)度。

      The length of "Eastmount" is 9. E a s t m o u n t The length of "Eastmount" is 9.

      (5) 循環(huán)依次輸出“East 秀璋”字符串的所有字符。

      Unicode遍歷字符串 Unicode: E 69 Unicode: a 97 Unicode: s 115 Unicode: t 116 Unicode: 32 Unicode: 秀 31168 Unicode: 璋 29835 utf-8遍歷字符串 Unicode: E 69 Unicode: a 97 Unicode: s 115 Unicode: t 116 Unicode: 32 Unicode: ? 231 Unicode: § 167 Unicode: € 128 Unicode: ? 231 Unicode: ’ 146 Unicode: ? 139

      (6) 實(shí)現(xiàn)字符串循環(huán)拼接,將變量str拼接成“a”到“z”并輸出。

      abcdefghijklmnopqrstuvwxyz

      (7) 從鍵盤(pán)上輸入整數(shù)、浮點(diǎn)數(shù)和字符,然后賦值給變量并輸出結(jié)果。

      Eastmount 28 60.2 我的名字是: Eastmount 我的年齡是: 28 我的體重是: 60.2

      (8) 任意輸入一個(gè)字母,實(shí)現(xiàn)大小寫(xiě)自動(dòng)轉(zhuǎn)換輸出。

      請(qǐng)輸入任意字母: A 對(duì)應(yīng)的ASCII碼值: 65 A => a 請(qǐng)輸入任意字母: h 對(duì)應(yīng)的ASCII碼值: 104 h => H

      (9) 實(shí)現(xiàn)多種數(shù)據(jù)類(lèi)型轉(zhuǎn)換(int和float轉(zhuǎn)換、float和string轉(zhuǎn)換)。

      a=100 int32, b=100 float32 c=3.14 float32, d=3 int32 e=3.14 float64, f=3.140000 string e=123.456 string, f=123.456 float64

      (10) 指針基本概念,定義變量i,然后指針ptr指向該值,輸出對(duì)應(yīng)值及地址。

      i的地址= 0xc0000100a0 i的值= 10 ptr=0xc0000100a0 ptr的地址=0xc000006030 ptr指向的值=10

      (11) 編寫(xiě)一個(gè)程序,獲取一個(gè)int變量num的地址并顯示終端;再將num的地址賦值給指針ptr,通過(guò)ptr去修改num的值。

      666 num的地址= 0xc0000100a0 num的值= 54 ptr的地址=0xc000006030 ptr指向的值=54 修改值后: num=512 0xc0000100a0 修改值后: ptr=512 0xc000006030

      (12) 輸入a和b兩個(gè)整數(shù),調(diào)用指針按從大到小的順序輸出a和b。

      20 88 a=88, b=20 max=88, min=20 //p1和p2

      2.解答

      (1) 分別定義常見(jiàn)的數(shù)據(jù)類(lèi)型(整型、浮點(diǎn)型、字符型、布爾型、字符串型)變量,輸出對(duì)應(yīng)結(jié)果并查看變量的空間大小、數(shù)據(jù)類(lèi)型。

      查看某個(gè)變量的字節(jié)大小(unsafe.Sizeof)和數(shù)據(jù)類(lèi)型(fmt.Printf->%T)

      package main import "fmt" import "unsafe" func main() { var num1 int = -12 fmt.Println("變量名稱(chēng)\t數(shù)據(jù)類(lèi)型\t占用空間\t對(duì)應(yīng)的值") fmt.Printf("num1 \t %T \t %d \t %v \n", num1, unsafe.Sizeof(num1), num1) var num2 byte = 127 fmt.Printf("num2 \t %T \t %d \t %v \n", num2, unsafe.Sizeof(num2), num2) var num3 int64 = 12345 fmt.Printf("num3 \t %T \t %d \t %v \n", num3, unsafe.Sizeof(num3), num3) var num4 float32 = 3.14 fmt.Printf("num4 \t %T \t %d \t %v \n", num4, unsafe.Sizeof(num4), num4) var num5 float64 = 3.1415e2 fmt.Printf("num5 \t %T \t %d \t %v \n", num5, unsafe.Sizeof(num5), num5) var num6 int = '楊' fmt.Printf("num6 \t %T \t %d \t %v \n", num6, unsafe.Sizeof(num6), num6) var num7 bool = false fmt.Printf("num7 \t %T \t %d \t %v \n", num7, unsafe.Sizeof(num7), num7) var num8 string = "Eastmount" fmt.Printf("num8 \t %T \t %d \t %v \n", num8, unsafe.Sizeof(num8), num8) }

      輸出結(jié)果如下圖所示:

      (2) 判斷數(shù)字9的奇偶性輸出它是奇數(shù)或偶數(shù)。

      package main import "fmt" func main() { var num int = 9 fmt.Println("num =", num) //判斷奇偶性 if num % 2 == 0 { fmt.Println("這是一個(gè)偶數(shù)") } else { fmt.Println("這是一個(gè)奇數(shù)") } }

      輸出結(jié)果如下圖所示:

      (3) 有人用溫度計(jì)測(cè)量出華氏法表示的溫度(如69°F),先要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如20°C),輸入值為69。

      package main import "fmt" func main() { var f float64 var c float64 //溫度轉(zhuǎn)換 f = 69.0 c = (5.0 / 9) * (f - 32) fmt.Println("華氏度 f=", f) fmt.Println("攝氏度 c=", c) fmt.Println("攝氏度整數(shù) c=", int64(c)) }

      輸出結(jié)果如下圖所示:

      (4) 通過(guò)兩種方法(調(diào)用函數(shù)和循環(huán))實(shí)現(xiàn)計(jì)算字符串“Eastmount”長(zhǎng)度。

      輸出結(jié)果如下圖所示:

      注意,當(dāng)字符串中包含多字節(jié)字符時(shí),要用到標(biāo)準(zhǔn)庫(kù)utf8中的RuneCountInString函數(shù)來(lái)獲取字符串的長(zhǎng)度。代碼如下:

      package main import ( "fmt" "unicode/utf8" ) func main() { //多字節(jié)字符 test := "Hello, 世界" fmt.Println("bytes =", len(test)) //bytes = 13 fmt.Println("runes =", utf8.RuneCountInString(test)) //runes = 9 }

      (5) 循環(huán)依次輸出“East 秀璋”字符串的所有字符。

      輸出結(jié)果如下圖所示:

      (6) 實(shí)現(xiàn)字符串循環(huán)拼接,將變量str拼接成“a”到“z”并輸出。

      package main import "fmt" func main() { var str string var tt string var ch byte = 'a' for i := 0; i < 26; i++ { tt = fmt.Sprintf("%c", ch) str += tt ch += 1 } fmt.Println(str) }

      上述代碼注意類(lèi)型轉(zhuǎn)換,輸出結(jié)果如下圖所示:

      (7) 從鍵盤(pán)上輸入整數(shù)、浮點(diǎn)數(shù)和字符,然后賦值給變量并輸出結(jié)果。

      第一種: fmt.Scan(地址列表)

      參數(shù)傳入地址列表。輸入變量之間可以采用空格或者換行

      第二種: fmt.Scanln(地址列表)

      與Scan不同在于自帶換行,因此輸入變量間不能采用換行

      第三種:fmt.Scanf(“格式化字符串”, 地址列表)格式化輸入

      限制固定的輸入格式

      package main import "fmt" func main() { var ( name string age int weight float32 ) //從終端獲取用戶(hù)的輸入內(nèi)容 fmt.Scan(&name, &age, &weight) fmt.Println("我的名字是:", name) fmt.Println("我的年齡是:", age) fmt.Println("我的體重是:", weight) }

      輸出結(jié)果如下圖所示:

      (8) 任意輸入一個(gè)字母,實(shí)現(xiàn)大小寫(xiě)自動(dòng)轉(zhuǎn)換輸出。

      A的ASCII碼值為65,a的ASCII碼值為97

      輸出結(jié)果如下圖所示:

      (9) 實(shí)現(xiàn)多種數(shù)據(jù)類(lèi)型轉(zhuǎn)換(int和float轉(zhuǎn)換、float和string轉(zhuǎn)換)。

      輸出結(jié)果如下圖所示:

      (10) 指針基本概念,定義變量i,然后指針ptr指向該值,輸出對(duì)應(yīng)值及地址。

      輸出結(jié)果如下圖所示:

      (11) 編寫(xiě)一個(gè)程序,獲取一個(gè)int變量num的地址并顯示終端;再將num的地址賦值給指針ptr,通過(guò)ptr去修改num的值。

      輸出結(jié)果如下圖所示:

      (12) 輸入a和b兩個(gè)整數(shù),調(diào)用指針按從大到小的順序輸出a和b。

      解題:用指針?lè)椒▉?lái)處理,不交換整型變量的值,而是交換兩個(gè)指針變量的值

      package main import "fmt" func main() { //變量定義 var a int var b int //輸入兩個(gè)整數(shù) fmt.Println("請(qǐng)輸入兩個(gè)整數(shù):") fmt.Scanf("%d %d", &a, &b) //p1指向a p2指向b var p1 *int = &a var p2 *int = &b var p *int //如果a

      輸出結(jié)果如下圖所示,但遺憾的是a和b值并沒(méi)有交換,而p1確實(shí)指向較大值,p2指向較小值。

      這與C語(yǔ)言也存在一些差異,C語(yǔ)言代碼如下,請(qǐng)大家下來(lái)思考具體原因。

      六.總結(jié)

      寫(xiě)到這里,這篇基礎(chǔ)性Golang文章介紹完畢,希望您喜歡!

      Go基本概念和數(shù)據(jù)類(lèi)型了解后,后面的文章將詳細(xì)介紹Go語(yǔ)言的運(yùn)算、條件語(yǔ)句和循環(huán)語(yǔ)句知識(shí),并結(jié)合案例進(jìn)行普及。希望這篇基礎(chǔ)性文章對(duì)您有幫助,寫(xiě)得不好的地方還請(qǐng)海涵。同時(shí)非常感謝參考文獻(xiàn)中的大佬們的文章分享,尤其是韓順平老師,深知自己很菜,得努力前行。也希望自己能深入下去,未來(lái)四年好好研究Go編程語(yǔ)言,做更多實(shí)際工程,寫(xiě)更好的文章,共勉!

      源代碼-:

      https://github.com/eastmountyxz/Go-learning

      感謝華為云的禮物,希望能與大家一起在華為云社區(qū)共同進(jìn)步,且看且珍惜。

      原文地址:https://blog.csdn.net/Eastmount/article/details/113399802

      (By:娜璋AI之家 Eastmount 2021-08-09 星期一 夜于貴陽(yáng) )

      參考文獻(xiàn):

      Go官網(wǎng):https://golang.org/

      韓老師視頻:https://www.bilibili.com/video/BV1pt41127FZ

      https://www.runoob.com/go/go-tutorial.html

      Go中文網(wǎng)在線(xiàn)標(biāo)準(zhǔn)庫(kù)文檔:https://studygolang.com/pkgdoc。。

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

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:基于javaweb(springboot+mybatis)網(wǎng)站建設(shè)服務(wù)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)以及文檔報(bào)告設(shè)計(jì)
      下一篇:如何將wps文本從傳統(tǒng)轉(zhuǎn)換為簡(jiǎn)化
      相關(guān)文章
      亚洲国产成人91精品| 国产亚洲欧洲Aⅴ综合一区 | 久久亚洲成a人片| 亚洲性久久久影院| 久久久亚洲精华液精华液精华液| 成人亚洲国产va天堂| 亚洲国产91在线| 亚洲一区二区免费视频| 亚洲六月丁香六月婷婷蜜芽| 亚洲欧洲日韩综合| 亚洲毛片一级带毛片基地| 亚洲视频在线观看地址| 亚洲影视一区二区| 亚洲国产成人精品无码区在线网站| 亚洲成人网在线播放| 亚洲jjzzjjzz在线观看| 亚洲中文字幕一二三四区| 亚洲色成人网站WWW永久四虎 | 亚洲欧美国产欧美色欲| 亚洲国产精品99久久久久久| 亚洲AV无码AV男人的天堂不卡| 亚洲av成人一区二区三区在线播放 | 亚洲短视频在线观看| 亚洲第一页在线观看| 亚洲国产亚洲综合在线尤物| 亚洲天堂2016| 亚洲成AV人片高潮喷水| www.亚洲色图| 亚洲伊人久久综合影院| 亚洲乱码一区二区三区在线观看 | 久久亚洲国产中v天仙www| 亚洲av一综合av一区| 亚洲人成亚洲精品| 亚洲欧洲国产成人精品| 国产人成亚洲第一网站在线播放| 亚洲国产成人久久精品大牛影视| 亚洲av日韩av欧v在线天堂| 中文字幕不卡亚洲| 亚洲不卡中文字幕无码| 亚洲国产精品成人综合久久久| 一区二区亚洲精品精华液|