成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

掌握Go語言的基本數據類型:編程世界的ABC

開發 前端
聲明變量同時賦值的方式,如果沒有指定明確的數據類型,會默認使用范圍大的類型,比如:int、float64、false。

Go語言,以其簡潔的語法和強大的性能,已經成為現代軟件開發領域中的重要力量。在Go語言的豐富特性中,基本數據類型扮演著至關重要的角色。它們是構建復雜程序的基礎,是每一個Go程序的起點。正如學習任何新語言一樣,了解其字母表(ABC)是掌握語言的關鍵第一步。在Go語言中,這意味著要熟悉其提供的基本數據類型。

Go語言提供的基本數據類型

Go語言的基本數據類型可以分為以下幾個類別:

  1. 整型:包括不同大小和符號的整數,如 int, int8, int16, int32, int64 和 uint 等。
  2. 浮點型:用于表示實數,包括 float32 和 float64。
  3. 布爾型:表示邏輯值 true 或 false。
  4. 字符串:用于表示文本數據,是一個不可變的字符序列。
  5. rune 類型:代表一個 Unicode 碼點,等同于 int32。
  6. byte 類型:是 uint8 的別名,常用于表示字節。

int

定義int類型

var int1 = 1
fmt.Printf("int1類型:%T\n", int1)

輸出結果:

int1類型:int

注意:%T 查看變量的類型

進制轉化

var i1 = 101
fmt.Printf("%d\n", i1) //轉成十進制
fmt.Printf("%b\n", i1) //把十進制轉成二級制
fmt.Printf("%o\n", i1) //把十進制轉成八進制
fmt.Printf("%x\n", i1) //把十進制轉成十六進制
fmt.Println("-----")

輸出結果:

數值為:101
把十進制轉成二級制:1100101
把十進制轉成八進制:145
把十進制轉成十六進制:65

定義八進制

八進制一定是以0開頭的,逢八進一位

i2 := 077
fmt.Printf("i2十進制:%d\n", i2)
fmt.Printf("i2八進制:%o\n", i2)
fmt.Printf("i2類型%T\n",i2)

輸出結果

i2十進制:63
i2八進制:77
i2類型int

定義十六進制

從0到f,逢十六進一

i3 := 0x1234567
fmt.Printf("i3十進制:%d\n", i3)
fmt.Printf("i3十流進制:%x\n", i3)
// %T 查看變量的類型
fmt.Printf("i3十進制數據類型:%T\n", i3)

輸出結果

i3十進制:19088743
i3十六進制:1234567
i3十進制數據類型:int

總結:我們發現直接定義十進制、八進制、十六進制的變量,變量的類型都是int型。

拋出問題

我們怎么定義int8/int16/int32/int64類型的數據呢?

其實非常簡單:

i4 := int8(1)
i5 := int16(1)
i6 := int32(1)
i7 := int64(1)
fmt.Printf("i4:%T\n", i4)
fmt.Printf("i5:%T\n",i5)
fmt.Printf("i6:%T\n",i6)
fmt.Printf("i7:%T\n",i7)

輸出結果:

i4:int8
i5:int16
i6:int32
i7:int64

拋出問題:go有這么多種int類型,我們怎么選擇使用哪種呢?

給出答案:

我們首先要知道這些類型的區別:

  • int8類型大小為 1 字節
  • int16類型大小為 2 字節
  • int32類型大小為 4 字節
  • int64類型大小為 8 字節
  • int類型的大小為 4個字節 或者 8個字節

其中int類型要重點說一下:go語言中的 int 的大小是和操作系統位數相關的,如果是32位操作系統,int 類型的大小就是4字節。如果是64位操作系統,int 類型的大小就是8個字節。

由此我們可以知道,根據自己需要的字節數來選擇,當然選擇int類型是最省心安全的,但是當我們取值范圍小的時候,會浪費存儲空間。

float

go中的float可以細分為:float32和float64

定義float

f1 := 1.0
fmt.Printf("f1類型:%T\n", f1) // Go語言中的小數默認類型是:float64

輸出結果:

f1類型:float64

分析:在未指定類型定義float時,默認的類型是float64。和int類型的定義是一致的。

反思:這種設計我們也可以很好理解,出于數據安全的考慮,設置數據類型對應的最大內存空間的類型,避免內存溢出等問題。

定義float32類型

聰明的你一定會想到,和定義int8是一樣的

f2 := float32(1.4321)
fmt.Printf("%T\n", f2)

輸出結果:

f2類型:float32

小技巧

我們可以通過內置的Math函數,獲得常用的數值,比如:

var maxFloat = math.MaxFloat32;
println(maxFloat)

輸出結果:

+3.402823e+038

注意

在go中,數據類型是有嚴格的區分的,不同類型之間是不能互相轉換的,比如:

圖片圖片

bool類型

定義

b1 := true
fmt.Printf("b1類型:%T\n", b1)

輸出結果:

b1類型:bool

默認值為false

var b2 bool
// 前面有2個% 后面也要傳2次參數
fmt.Printf("b2類型為:%T 值為: %v\n", b2, b2)

輸出結果:

b2類型為:bool 值為: false

字符串

  • Go語言中的字符串是由雙引號包裹的
s1 := "123"
s2 := "我們"
s3 := "mystring"
  • go語言中單引號包裹的是字符(單獨的字母,漢字,符號,數字)
s1 := '1'
s2 := '我'
s3 := 's'
// 字節:1個字節=8Bit(8個二進制位)
// 一個字符'A' = 1個字節
// 一個utf8編碼的漢字一般占3個字節 (比如‘沙’)

rune

rune它是int32的別名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。由于rune可表示的范圍更大,所以能處理一切字符,當然也包括中文字符。在平時計算中文字符,可用rune。

當我們數據中有中文時,一定要注意rune的處理。

len()詳解

len()獲得的是 byte 字節的數量,一個中文占用3個字節

s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()獲得的是 byte 字節的數量
fmt.Println(len(s))
fmt.Println(len(sHello))
fmt.Println(len(sWang))

輸出結果是:8 5 3

循環輸出字符串

s := "Hello王"
for i := 0; i < len(s); i++ {
   fmt.Printf("%c\n", s[i])
}

輸出結果:

圖片圖片

我們發現英文可以正常輸出,但是中文通過這種方式輸出會亂碼

循環輸出中文字符串

我們可以通過for range循環,從字符串中拿出具體的字符

s := "Hello王"
for _, c := range s {
   fmt.Printf("%c\n", c) //%c 字符
}

輸出結果:

圖片圖片

字符串的修改

字符串修改是不能直接修改的,需要轉成rune切片后再修改

s2 := "小白兔"
s3 := []rune(s2)        //把字符串強制轉成rune切片
s3[0] = '大'             //注意 這里需要使用單引號的字符,而不是雙引號的字符串
fmt.Println(string(s3)) //把rune類型的s3強轉成字符串

輸出結果:大白兔

字符和字符串的區別

c1 := "紅"
c2 := '紅'                            
fmt.Printf("c1的類型:%T c2的類型:%T \n", c1, c2) 
c3 := "H"                            
c4 := 'H'                            
fmt.Printf("c3的類型:%T c4的類型:%T \n", c3, c4)

輸出結果:

c1的類型:string c2的類型:int32 
c3的類型:string c4的類型:int32

總結:我們發現只要是雙引號包裹的類型就是string,只要是單引號包裹的類型就是int32,也就是rune。和中英文無關。

知識點:rune的別名是int32

類型轉換

n1 := 10
var f float64
f = float64(n1)
fmt.Printf("f的類型是:%T f的值是:%v\n", f,f)

輸出結果:

f的類型是:float64 f的值是:10

總結

  1. Go語言中對類型有嚴格的要求,不同類型之間不能直接轉換,哪怕int8/int16之間也不能轉換。
  2. 聲明變量同時賦值的方式,如果沒有指定明確的數據類型,會默認使用范圍大的類型,比如:int、float64、false。
  3. 字符串的修改要轉成rune切片,而不能像PHP一樣直接修改。

本文轉載自微信公眾號「王中陽Go」,作者「王中陽Go」,可以通過以下二維碼關注。

轉載本文請聯系「王中陽Go」公眾號。

責任編輯:武曉燕 來源: 王中陽
相關推薦

2016-08-18 14:13:55

JavaScript基本數據引用數據

2010-10-08 09:02:03

JavaScript基

2010-04-27 11:03:39

Oracle Java

2017-02-27 08:34:09

JavaScript數據引用

2021-04-28 18:16:24

Rust數據類型

2011-05-26 14:27:56

java

2018-05-25 09:50:30

Java數據類型類型轉換

2019-11-11 14:55:25

Redis數據類型命令

2023-03-27 10:04:27

數據類型浮點型布爾型

2024-11-04 06:20:00

Redis單線程

2020-10-26 13:46:07

Java基礎入門篇

2009-08-14 11:15:45

C#基本數據類型

2023-10-19 07:42:37

Python數據類型

2010-01-18 16:49:36

VB.NET基本數據類

2023-07-04 08:41:08

Redis數據類型

2024-11-12 13:01:46

2025-01-06 05:10:00

Python數據類型編程

2023-04-06 07:49:23

Python數據類型

2010-10-08 15:11:28

JavaScript數

2019-08-12 15:40:26

Redis數據庫數據類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人三级在线观看 | 亚洲欧美综合精品另类天天更新 | 女同videos另类 | 亚洲欧美一区二区三区国产精品 | 国产亚洲一区在线 | 99reav | 日韩在线电影 | 国产精品欧美一区二区 | 一级a爱片性色毛片免费 | 国产精品一区视频 | 国产精品一区二区久久 | 在线免费观看黄网 | 福利一区二区 | 一区二区三区国产在线观看 | 精品久久香蕉国产线看观看亚洲 | 亚洲91精品 | 成人av电影天堂 | 日韩精品在线一区 | 亚洲精品久久久久久下一站 | 奇米久久久 | 91看片官网 | 国产一级毛片精品完整视频版 | 亚洲成人免费 | 午夜资源 | 午夜视频一区二区 | 精国产品一区二区三区四季综 | 成人在线免费看 | 欧美成人免费在线 | 欧美一级黄色片免费观看 | 久久久亚洲一区 | 日韩有码在线观看 | 韩日一区二区 | 久久久久亚洲 | 亚洲一区二区三区视频 | 黄视频免费观看 | 在线看片国产精品 | 欧美日韩久久久 | 日韩午夜网站 | 一级亚洲 | 国产精品视频久久久久久 | 91网站在线观看视频 |