GO語言-數據類型

文章目錄

  • 變量定義
  • 1. 整數類型
  • 2. 浮點類型
  • 3. 字符類型
  • 4. 布爾類型
  • 5. 字符串類型
    • 5.1 字符串的本質
    • 5.2 常用字符串處理函數(strings包)
    • 5.3 修改字符串的方式
  • 6. 數據默認值
  • 7. 類型轉換

變量定義

代碼如下:

package mainimport "fmt"var i1 = 1000
var i2 intvar(i5 = "hello"i6 = "world"
)func main(){var i intfmt.Println("i = ", i)i = 10fmt.Println("i = ", i)var num = 10.01 	fmt.Println("num = ", num)num = 100.01 	fmt.Println("num = ", num)Name := "MikeSun"fmt.Println("Name = ", Name)var n1 , n2 , n3 intfmt.Println("n1 = ", n1, "n2 = ", n2, "n3 = ", n3)var n4 , name1 , n5 = 100, "MikeSun", 200fmt.Println("n4 = ", n4, "name1 = ", name1, "n5 = ", n5)n6, name2, n7 := 1000, "joke", 2000fmt.Println("n6 = ", n6, "name2 = ", name2, "n7 = ", n7)fmt.Println("i1 = ", i1, "i2 = ", i2)fmt.Println("i5、i6 = ", i5, i6)
}

1、從main函數上面的全局變量開始分析:
全局變量定義,定義時不聲明類型,只定義數值,自動分配類型:
var i1 = 1000
全局變量定義:
var i2 int
全局變量定義,同時定義多個對象:
var(
i5 = “hello”
i6 = “world”
)

2、再來看main函數中的變量定義方式
定義變量不賦值:
var i int
3、對已定義的變量賦值:
i = 10
4、定義變量,不聲明類型,默認匹配類型:
var num = 10.01
5、定義并且賦值:
Name := “MikeSun”
上面代碼等價于
var Name string
Name = “MikeSun”
6、一次定義多個變量
var n1 , n2 , n3 int
7、一次性定義多個變量并且賦值
var n4 , name1 , n5 = 100, “MikeSun”, 200
8、一次性定義多個變量并且賦值
n6, name2, n7 := 1000, “joke”, 2000

1. 整數類型

類型位數取值范圍說明
int32/64-231 到 231-1(32位)或 -2?3 到 2?3-1(64位)平臺相關,32位或64位取決于系統
int88-128 到 1278位有符號整數
int1616-32,768 到 32,76716位有符號整數
int3232-2,147,483,648 到 2,147,483,64732位有符號整數(同 rune)
int6464-9,223,372,036,854,775,808 到 9,223,372,036,854,775,80732位有符號整數
int32/640 到 232-1(32位)或 0 到 2??-1(64位)平臺相關,32位或64位取決于系統
uint88-128 到 1278位無符號整數(同byte)
uint1616-32,768 到 32,76716位無符號整數
uint3232-2,147,483,648 到 2,147,483,64732位無符號整數
uint6464-9,223,372,036,854,775,808 到 9,223,372,036,854,775,80732位無符號整數
byte8-128 到 127uint8 的別名,用于字節數據
rune32-2,147,483,648 到 2,147,483,647int32 的別名,表示 Unicode 碼點

2. 浮點類型

類型位數取值范圍(近似)精度說明
float3232±1.18e?3? 到 ±3.4e3?6-7位小數單精度浮點數,占用4字節
float6464±2.23e?3?? 到 ±1.8e3??15-16位小數雙精度浮點數,占用8字節
代碼示例如下:
下面代碼有介紹科學計數法、省略整數部分寫法。
package main 
import ("fmt""reflect"
)func main(){var price float32 = 89.12fmt.Println("price = ", price)var num1 float32 = -0.00089var num2 float64 = -7809656.09fmt.Println("num1 = ", num1, "num2 = ", num2)//尾部部分精度丟失,造成精度損失var num3 float32 = -123.0000901var num4 float64 = -123.0000901fmt.Println("num3 = ", num3, "num4 = ", num4)//Golang的浮點類型默認聲明為float64 類型var num5 = 1.1fmt.Println("typeof num5 is ", reflect.TypeOf(num5))//十進制數形式:如:5.12      .512(必須有小數點)num6 := 5.12num7 := .123fmt.Println("num6 = ", num6, "num7 = ", num7)//科學計數法num8 := 5.1234e2num9 := 5.1234E2num10 := 5.1234E-2fmt.Println("num8 = ", num8, "num9 = ", num9, "num10 = ", num10)
}

3. 字符類型

Go語言統一使用Unicode編碼。
字符類型的本質就是一個整數型,一個整數對應Unicode中的一個字符,從而可以使用特地的輸出格式輸出,如%c。
Unicode編碼是包含ASCII碼的,所以前面的256個字符仍然可以當作ASCII碼來輸出或轉換。

package mainimport ("fmt"
)func main(){var c1 byte = 'a'var c2 byte = '0'fmt.Println("c1 = ", c1)fmt.Println("c2 = ", c2)// 要輸出ASCII值必須要格式化輸出fmt.Printf("c1 = %c c2 = %c", c1, c2)var c3 int = '孫'fmt.Printf("c3 = %c c3 = %d", c3, c3)var c4 int = 22269fmt.Printf("\nc4 = %c", c4)var c5 int = 65fmt.Printf("\nc5 = %c", c5)
}運行結果:
c1 =  97
c2 =  48
c1 = a c2 = 0c3 = 孫 c3 = 23385
c4 = 國
c5 = A

4. 布爾類型

代碼示例如下:

package main
import ("fmt""unsafe"
)func main(){var bflag = falsefmt.Println("bflag = ", bflag)//注意事項//1.bool類型占用存儲空間是1個字節fmt.Println("bflag 的占用空間 =  ", unsafe.Sizeof(bflag))//2.bool類型只能取true或者false
}運行結果:
bflag =  false
bflag 的占用空間 =   1

注意:
1、bool類型不能參加±運算,可以參加邏輯運算。

運算符說明示例
&&邏輯與(AND)true && false → false
||邏輯或(OR)true
!邏輯非(NOT)!true → false
錯誤示例:
b := true
// fmt.Println(b + 1) // 錯誤:bool 不能參與數學運算

2、Go 是強類型語言,其他類型不能隱式轉為 bool

// 錯誤示例
i := 1
if i { // 編譯錯誤:non-bool i (type int) used as if conditionfmt.Println("True")
}

3、必須顯式比較

b := true
// fmt.Println(b + 1) // 錯誤:bool 不能參與數學運算

5. 字符串類型

5.1 字符串的本質

1、底層結構:Go 的字符串是一個 只讀的字節切片([]byte),存儲的是 UTF-8 編碼的 Unicode 字符。
2、不可變性:字符串一旦創建,內容不可修改(若需修改需轉為 []byte 或 []rune)。

代碼示例如下:

package mainimport ("fmt""reflect"
)//演示golang中string 的類型使用
func main(){var str1 = "北京歡迎您"fmt.Println("1、", str1)fmt.Println("sizeof(strl) is", len(str1))fmt.Println("typeof(strl) is", reflect.TypeOf(str1))// 字符串拼接方式str1 += "為您開天辟地"fmt.Println("2、", str1)// 字符串拼接需要換行的時候,需要將操作符,例如+,保留在上面一行否則報錯str1 += "hello" + "world" +"666"fmt.Println("3、", str1)// 反引號引用無需轉義,原樣輸出str1 = `var str1 = "北京歡迎您"fmt.Println("1、", str1)fmt.Println("sizeof(strl) is", len(str1))fmt.Println("typeof(strl) is", reflect.TypeOf(str1))`fmt.Println("4、", str1)// str1[0] = 'A'
}運行結果:
1、 北京歡迎您
sizeof(strl) is 15
typeof(strl) is string
2、 北京歡迎您為您開天辟地
3、 北京歡迎您為您開天辟地helloworld666
4var str1 = "北京歡迎您"fmt.Println("1、", str1)fmt.Println("sizeof(strl) is", len(str1))fmt.Println("typeof(strl) is", reflect.TypeOf(str1))

5.2 常用字符串處理函數(strings包)

函數說明示例
strings.Contains(s, substr)檢查是否包含子串Contains(“Hello”, “ell”) → true
strings.HasPrefix(s, prefix)檢查是否以某前綴開頭HasPrefix(“Go”, “G”) → true
strings.HasSuffix(s, suffix)檢查是否以某后綴結尾HasSuffix(“World”, “ld”) → true
strings.Split(s, sep)按分隔符拆分字符串Split(“a,b,c”, “,”) → [“a”,“b”,“c”]
strings.Join(slice, sep)將字符串切片連接Join([]string{“a”,“b”}, “-”) → “a-b”
strings.ToUpper(s)轉為大寫ToUpper(“go”) → “GO”
strings.ToLower(s)轉為小寫ToLower(“GO”) → “go”
strings.TrimSpace(s)去除首尾空白字符TrimSpace(" Hi ") → “Hi”

5.3 修改字符串的方式

若需頻繁操作字節/字符,可先轉為 []byte 或 []rune:

s := "Hello"
bytes := []byte(s)
bytes[0] = 'h' // 修改后轉回字符串
s = string(bytes) // "hello"

6. 數據默認值

Go語言數據默認值均為0(字符串空,nil,false均為0的別名)。

類型默認值(零值)說明
整數類型0包括 int, int8, int16, int32, int64, uint, uint8 等。
浮點類型0.0包括 float32, float64。
布爾類型falsebool 類型的零值。
字符串類型“”(空字符串)
指針類型nil所有指針(如 *int, *string)的零值。
引用類型nil包括 slice(切片)、map(映射)、channel(通道)、func(函數)。
結構體類型所有字段的零值結構體的每個字段會遞歸初始化為其類型的零值。
數組類型所有元素為對應零值如 var arr [3]int 的零值是 [0, 0, 0]。
接口類型nil接口變量在未賦值時的零值。
錯誤類型nilerror 類型的零值。
代碼示例:
package mainimport ("fmt"
)func main(){var a int // 0var b float32 // 0var c float64 // 0var d bool // flasevar name string // ""//%v 表示按照變量的值輸出fmt.Printf("a = %v, b = %v, c = %v, d = %v, name = %v", a, b, c, d, name)
}運行結果:
a = 0, b = 0, c = 0, d = false, name = 

7. 類型轉換

Go語言在不同類型的變量之間賦值時需要顯示轉換。也就是說Go語言數據類型不會自動轉換。
1、強制類型轉換既可以從小范圍數據類型轉換到大范圍數據類型(上行轉換)、也可以從大范圍數據類型轉換到小范圍數據類型(下行轉換)
2、被轉換的是變量存儲的數據(數值),變量本身的數據類型并沒有發生改變
3、在轉換中,可能出現意想不到的結果,特別是下行轉換的時候。
示例代碼如下:
從代碼很容易看出轉換語法:type(var),這里需要注意,和C語言不同,C語言是(type)var。
當轉換溢出時,數據會錯誤。
如int64的變量轉換為int8,則需要取余256.(網上某個培訓班網課說無法計算,實際是可計算的,數據溢出之后從0開始,是一個循環)

package mainimport ("fmt"
)func main(){var i int32 = 100var n1 float32 = float32(i)var n2 int8 = int8(i)var n3 int64 = int64(i)fmt.Printf("i = %v n1 = %v n2 = %v n3 = %v", i, n1, n2, n3)// 被轉換的是變量的數據,而不是變量的類型fmt.Printf("i type is %T", i)var num1 int64 = 999999var num2 int8 = int8(num1)fmt.Println("num2 = ", num2)num1 = 257num2 = int8(num1)fmt.Println("num2 = ", num2)
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79406.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線性代數 | 知識點整理 Ref 2

注:本文為 “線性代數 | 知識點整理” 相關文章合輯。 因 csdn 篇幅合并超限分篇連載,本篇為 Ref 2。 略作重排,未整理去重。 圖片清晰度限于引文原狀。 如有內容異常,請看原文。 【數學】線性代數知識點總結 阿巴 Jun 于 2024-…

JavaSE學習(前端初體驗)

文章目錄 前言一、準備環境二、創建站點(創建一個文件夾)三、將站點部署到編寫器中四、VScode實用小設置五、案例展示 前言 首先了解前端三件套:HTML、CSS、JS HTML:超文本標記語言、框架層、描述數據的; CSS&#xf…

java + spring boot + mybatis 通過時間段進行查詢

前端傳來的只有日期內容&#xff0c;如&#xff1a;2025-04-17 需要在日期內容的基礎上補充時間部分&#xff0c;代碼示例&#xff1a; /*** 日志查詢&#xff08;分頁查詢&#xff09;* param recordLogQueryDTO 查詢參數對象* return 日志列表*/Overridepublic PageBean<…

解決ubuntu自帶火狐瀏覽器無法播放視頻問題

TIPS:一般執行完1 就可以了 首先安裝必要的媒體編解碼器和插件&#xff1a; # 安裝常用媒體編解碼器和插件 sudo apt update sudo apt install -y ubuntu-restricted-extras# 安裝額外的編解碼器 sudo apt install -y ffmpeg# 安裝其他視頻相關包 sudo apt install -y libavc…

計算機網絡:流量控制與可靠傳輸機制

目錄 基本概念 流量控制&#xff1a;別噎著啦&#xff01; 可靠傳輸&#xff1a;快遞必達服務 傳輸差錯&#xff1a;現實中的意外 滑動窗口 基本概念 換句話說&#xff1a;批量發貨排隊驗收 停止-等待協議 SW&#xff08;發1份等1份&#xff09; 超時重傳&#xff1a;…

Android組件刷新

Android中刷新View的方法有以下幾種&#xff1a; 調用invalidate()方法&#xff0c;該方法會使View樹中的所有視圖無效或臟&#xff0c;等待下一次繪制時重新繪制。例如&#xff1a; mCustomView.invalidate(); 調用postInvalidate()方法&#xff0c;該方法類似于invalidate()…

Pycharm(十四)函數

一、函數概述 函數也叫方法,可以用function(函數,功能),method(方法)來表示。函數是把具有獨立功能的代碼封裝到一起,使其成為具有獨立功能的代碼集。 它的好處:1.提高代碼的復用性;2.模塊化編程。 1.1 定義格式 def 函數名(形式參數1,形式參數2...): 函數體,就是邏…

Oracle測試題目及筆記(多選)

所有題目來自于互聯網搜索 在以下概要文件的陳述中&#xff0c;哪兩個是正確的&#xff1f; &#xff08;D 和 E&#xff09; A&#xff0e; 概要文件不能被用來為賬戶加鎖 B&#xff0e; 概要文件不能被用來控制資源使用 C&#xff0e; 數據庫管理員可以使用概要文件更改用戶密…

DDoS攻防實戰指南——解析企業級防護五大解決方案

一、流量清洗中心的智能化演進 云清洗服務已從被動響應轉向主動防御。基于全球Anycast網絡的分布式清洗節點&#xff0c;可在攻擊發生時將流量牽引至專用清洗集群。阿里云2023年實測數據顯示&#xff0c;其新一代清洗設備對SYN Flood的識別準確率達99.97%&#xff0c;誤殺率控…

Ubuntu多用戶VNC遠程桌面環境搭建:從零開始的完整指南

引言: 在當今遠程工作盛行的時代,搭建一個安全、高效的多用戶遠程桌面環境變得越來越重要。本文將為您提供一個從零開始的完整指南,教您如何在Ubuntu系統上搭建多用戶VNC遠程桌面環境。無論您是系統管理員、開發團隊負責人,還是想要為家庭成員提供遠程訪問的技術愛好者,這…

數據結構專題 - 線性表

線性表是數據結構中最基礎、最常用的數據結構之一&#xff0c;它在實際應用中非常廣泛。無論是操作系統中的內存管理&#xff0c;還是數據庫中的索引結構&#xff0c;線性表都扮演著重要角色。 一、線性表的概念與抽象數據類型 1.1 線性表的邏輯結構 線性表是由n&#xff08…

使用wpa_cli和wpa_supplicant配置Liunx開發板的wlan0無線網

目錄 1 簡單介紹下wpa_cli和wpa_supplicant 1.1 wpa_supplicant 簡介 1.2 wpa_cli 簡介 1.3 它們之間的關系 2 啟動wpa_supplicant 3 使用rz工具把wpa_cli命令上傳到開發板 4 用wpa_cli配置網絡 參考文獻&#xff1a; 1 簡單介紹下wpa_cli和wpa_supplicant 1.1 wpa_su…

篩選條件在on和where中的區別(基于hivesql)

理解篩選條件在on和where中的區別&#xff0c;最好先理解sql的執行順序&#xff0c;盡管實際執行時不同的物理執行引擎可能會有特定的優化&#xff0c;但是邏輯執行順序必須遵循&#xff1a; 1&#xff09;from&#xff1a;確定數據源是什么&#xff0c;from后可以是單表&#…

springboot 項目 jmeter簡單測試流程

測試內容為 主機地址隨機數 package com.hainiu.example;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotat…

愛普生FA2016AS晶振在智能家居中的應用

在智能家居設備高速發展的今天&#xff0c;穩定可靠的時鐘信號是確保設備互聯互通、精準執行指令的核心。愛普生&#xff08;EPSON&#xff09;推出的FA2016AS內置熱敏電阻晶振&#xff0c;憑借其高精度、小體積和卓越的溫度穩定性&#xff0c;成為智能家居領域的關鍵元件&…

分享一個python啟動文件腳本(django示例)

今天給大家分享一個python啟動文件腳本 在日常開發中&#xff0c;我們常常需要運行多條命令來完成“靜態收集”“數據庫遷移”“啟動服務”……如果把這些命令整合到一個腳本里就好了 一、整體流程概覽 #mermaid-svg-wA6UnfATaUOfJoPn {font-family:"trebuchet ms"…

Kubernetes》》K8S》》Pod的健康檢查

K8s概念總結 》》》Pod的生命周期階段 Pod的生命周期可以簡單描述&#xff1a;首先Pod被創建&#xff0c;緊接著Pod被調度到Node節點進行部署。 Pod是非常忠誠的&#xff0c;一旦被分配到Node節點后&#xff0c;就不會離開這個Node節點&#xff0c;直到它被刪除&#xff0c;刪除…

bininote: 使用AI將視頻轉換了Markdown筆記

GitHub&#xff1a;https://github.com/JefferyHcool/BiliNote 更多AI開源軟件&#xff1a;發現分享好用的AI工具、AI開源軟件、AI模型、AI變現 - 小眾AI BiliNote 是一個開源的 AI 視頻筆記助手&#xff0c;支持通過嗶哩嗶哩、YouTube 等視頻鏈接&#xff0c;自動提取內容并生…

鴻蒙NEXT開發文件預覽工具類(ArkTs)

import { uniformTypeDescriptor } from kit.ArkData; import { filePreview } from kit.PreviewKit; import { FileUtil } from ./FileUtil; import { AppUtil } from ./AppUtil; import { WantUtil } from ./WantUtil;/*** 文件預覽工具類* 提供文件預覽、加載、判斷等功能。…

MySQL常用SQL語句的示例

概述 MySQL 常用 SQL 語句的示例&#xff0c;涵蓋數據定義、操作、查詢等常見場景 一、數據庫操作 創建數據庫 CREATE DATABASE mydb;選擇數據庫 USE mydb;刪除數據庫 DROP DATABASE mydb;二、表操作 創建表 CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VAR…