【Golang】:數據類型

目錄

1. 基本數據類型

1.1 布爾類型

1.2 整數類型

1.3 浮點數類型

1.4 復數類型

1.5 字符類型

1.6 字符串類型

2. 類型轉換

2.1 基本數據類型 → string

2.2?string → 基本數據類型

3. 常量


1. 基本數據類型

1.1 布爾類型

Go中的布爾類型取值為true或false,占用1字節大小。如下:

package mainimport ("fmt"
)func main() {// 布爾類型var flag bool = truefmt.Printf("flag value = %t\n", flag)               // flag value = truefmt.Printf("flag type = %T\n", flag)                // flag type = bool
}

說明一下:

  • 布爾類型的默認值為false,變量聲明后,如果沒有給變量賦值,則保留默認值。
  • Go中在格式化字符串時,%t表示按布爾值true或false進行格式化。
  • 關系運算符和邏輯運算符都會產生布爾類型的值,條件語句和循環語句的條件部分也都是布爾類型的值。

1.2 整數類型

類型有無符號占用存儲空間
int81字節
int162字節
int324字節
int648字節
uint81字節
uint162字節
uint324字節
uint648字節
int32位系統占用4字節,64位系統占用8字節
uint32位系統占用4字節,64位系統占用8字節
rune等價于int32,占用4字節
byte等價于uint8,占用1字節

1. 整數類型

// 如果不指明類型,整數變量默認是 intvar a = 10 // 默認 int 類型// 默認值:整數類型默認值為 0var b 
int fmt.Println(b) // 輸出 0

2. unsafe.Sizeof

// Sizeof 是 unsafe 包中的函數,用于獲取數據所占用的字節數import "unsafe" 
var a int64 
fmt.Println(unsafe.Sizeof(a)) // 輸出 8(字節)

3. 格式化字符串

// %d → 十進制整數// %T → 顯示變量的類型a := 10 
fmt.Printf("值: %d, 類型: %T\n", a, a) // 輸出:值: 10, 類型: int

4. 字符類型

// rune → 表示 Unicode 字符(實際是 int32)
// byte → 表示 ASCII 字符(實際是 uint8)var ch rune = '你' 
var b byte = 'A' 
fmt.Println(ch, b)    // 20320 65

1.3 浮點數類型

Go中的浮點數類型如下:

類型占用存儲空間表示范圍
float324 字節,單精度?3.403 × 103? ~ 3.403 × 103?
float648 字節,雙精度?1.798 × 103?? ~ 1.798 × 103??

1. 變量聲明與默認類型

// 如果不指明類型,浮點數變量默認是 float64var a = 3.14 // 默認 float64// 默認值:浮點數變量未賦值時,默認值為 0
var b float64
fmt.Println(b)      // 0

2. 浮點數存儲結構:浮點數在計算機中分為三部分:符號位(sign bit)、指數位(exponent)、尾數位/小數位(mantissa/fraction)

3. 格式化輸出

// %f → 按浮點數格式輸出
// %.2f → 保留兩位小數a := 3.14159 
fmt.Printf("%f\n", a) // 輸出 3.141590 
fmt.Printf("%.2f\n", a) // 輸出 3.14

1.4 復數類型

Go中的復數類型如下:

類型占用存儲空間表數范圍
complex648字節實部和虛部的范圍與float32類型相同
complex12816字節實部和虛部的范圍與float64類型相同

1.5 字符類型

Go中沒有專門的字符類型,一般使用整數類型中的byte來存儲單個字符。

package mainimport ("fmt"
)func main() {var a byte = 'A'fmt.Printf("類型:%T, 值:%c\n", a, a) // 類型:uint8, 值:Avar b rune = '牛'fmt.Printf("類型:%T, 值:%c\n", b, b) // 類型:int32, 值:牛
}

1.6 字符串類型

字符串就是一串固定長度的字符連接起來的字符序列,Go中的string是由單個字節連接起來的。string類型底層包含兩個字段,一個字段是字符串指針,該指針指向對應的字符串,另一個字段記錄著字符串的長度。

package mainimport ("fmt"
)func main() {var a string = "Hello World"fmt.Printf("類型:%T, 值:%s\n", a, a) // 類型:string, 值:Hello World// 1. string元素的訪問// 注意:Go中的字符串是不可變的,因此在訪問string元素時無法將元素修改為其他值。for i := 0; i < len(a); i++ {fmt.Printf("%c", a[i]) // Hello World}fmt.Println()// 2. 字符串的表示形式// 雙引號表示:系統會識別字符串中的轉義字符。// 反引號表示:系統不會識別字符串中的轉義字符,可以實現防止攻擊、輸出源代碼等效果。var s1 string = "Hello\nWorld"var s2 string = `Hello\nWorld`fmt.Println(s1) // Hello(換行)Worldfmt.Println(s2) // Hello\nWorld// 3. 字符串拼接var s = "hello" + "world"fmt.Println(s)       // helloworld
}

2. 類型轉換

2.1 基本數據類型 → string

1. 使用 fmt.Sprintf:fmt.Sprintf 可以按照格式化規則把任意類型轉換成字符串:

package mainimport "fmt"func main() {var a int = 100var b float64 = 3.1415926var c bool = truevar a1 string = fmt.Sprintf("%d", a)var b1 string = fmt.Sprintf("%.2f", b)var c1 string = fmt.Sprintf("%t", c)fmt.Println(a1, b1, c1)   // 100 3.14 true
}

2.?strconv 包也能做類型轉字符串,更高效

  • FormatInt函數:將int64類型的變量轉換為string類型。
  • FormatFloat函數:將float64類型的變量轉換為string類型。
  • FormatBool函數:將bool類型的變量轉換為string類型。
  • FormatUint函數:將uint64類型的變量轉換為string類型。
  • Itoa函數:將int類型變量轉換為string類型,Itoa函數底層實際就是調用FormatInt函數實現的,在內部設置了按十進制進行轉換。
package mainimport ("fmt""strconv"
)func main() {var a int = 100var b float64 = 3.1415926var c bool = truevar a1 string = strconv.FormatInt(int64(a), 10)var b1 string = strconv.FormatFloat(b, 'f', -1, 64)var c1 string = strconv.FormatBool(c)fmt.Println(a1, b1, c1)
}
  • 如果是 簡單數值轉 string → 用 strconv(性能好)

  • 如果需要 格式化輸出 → 用 fmt.Sprintf(靈活)

2.2?string → 基本數據類型

  • ParseInt函數:將string類型變量轉換為int64類型。
  • ParseFloat函數:將string類型變量轉換為float64類型。
  • ParseBool函數:將string類型變量轉換為bool類型。
  • ParseUint函數:將string類型變量轉換為uint64類型。
  • Atoi函數:將string類型變量轉換為int類型,?Atoi函數底層實際就是調用ParseInt函數實現的,在內部設置了按十進制進行轉換。
package mainimport ("fmt""strconv"
)func main() {// 1. 字符串 → 有符號整數// "123" → 要轉換的字符串// 10    → 原字符串的進制(2~36)// 64    → 返回值的位數(64 表示 int64)a, err1 := strconv.ParseInt("123", 10, 64)fmt.Println(a, err1)a1, err := strconv.Atoi("520")fmt.Println(a1, err)// 2. 字符串 → 無符號整數// "255" → 需轉換的字符串// 16    → 原字符串進制(這里按十六進制解析)// 64    → 返回 uint64u, err2 := strconv.ParseUint("255", 16, 64)fmt.Println(u, err2)// 3. 字符串 → 浮點數// "3.14159" → 要解析的字符串// 64        → 返回 float64;如果是 32 則返回 float32f, err := strconv.ParseFloat("3.14159", 64)fmt.Println(f, err)// 4. 字符串 → 布爾值// 支持的字符串(不區分大小寫):// "1", "t", "T", "true", "TRUE", "True"// "0", "f", "F", "false", "FALSE", "False"b, err := strconv.ParseBool("t")fmt.Println(b, err)
}

3. 常量

  • 編譯期確定 → 不能在運行時通過計算或函數結果賦值給常量。

  • 不可修改 → 一旦定義,值就不能改變。

  • 類型推導 → 可不寫類型,編譯器會根據值推導。

  • 可以是無類型常量 → 沒有明確類型的常量,可以在需要時自動轉換:

const x = 5   // 無類型常量
var y float64 = x // 自動轉換為 float64

1. 定義方式

const 常量名 [類型] = 值const Pi = 3.14159 // 類型推導 
const Version string = "1.0.0" // 顯式聲明類型
  • 類型可以省略,編譯器會根據值自動推導類型。

  • 常量的值必須在編譯期就能確定。

2. 多個常量一起聲明

const ( A = 1 BC = 3 DE
)fmt.Println(A, B, C, D , E)  // 1 1 3 3 3

3. iota 枚舉常量

iota 是一個常量計數器,從 0 開始,每新增一行常量聲明,iota 自動加 1。
常用于定義枚舉值:

const (Sunday  = iota // 0Monday         // 1Tuesday        // 2
)
fmt.Println(Sunday, Monday, Tuesday) // 0 1 2// 也可以用在位運算:
const (_  = iota       // 忽略 0KB = 1 << (10 * iota) // 1 << 10 = 1024MB               // 1 << 20 = 1048576GB               // 1 << 30
)

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

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

相關文章

旋鈕鍵盤項目---foc講解(開環)

這里就不過多的講解什么原理&#xff0c;公式的變換了&#xff0c;感興趣的可以看燈哥開源&#xff0c;講解的非常好的。當然&#xff0c;更細致的講解&#xff0c;也可以看b站其他教學。 我這里主要講解我對于開環部分的理解&#xff0c;以及stm32代碼的實現邏輯。可以看作是…

數據科學與計算:爬蟲和數據分析案例筆記

案例 1&#xff1a;中國大學排名爬取與分析 一、任務描述 目標&#xff1a;爬取高三網中國大學排名一覽表&#xff0c;提取學校名稱、總分、全國排名、星級排名、辦學層級等數據&#xff0c;并保存為 CSV 文件。 網址&#xff1a;2021中國的大學排名一覽表_高三網 二、任務…

華測科技的3D GPR數據分析

很高興得到了張總的支持&#xff0c;獲得了他們雷達的數據&#xff0c;并寫了雷達數據讀取和轉換文件。1 背景搜索后發現華測實力很強&#xff0c;因為他們可達到100km/h的時速&#xff0c;以前我只知道中電眾益可以達到這個速度。2數據格式分析2.1 華測數據因為長時間不編程&a…

最長鏈(二叉樹直徑DFS)

題目描述現給出一棵N個結點二叉樹&#xff0c;問這棵二叉樹中最長鏈的長度為多少&#xff0c;保證了1號結點為二叉樹的根。輸入第1行為包含了一個正整數N&#xff0c;為這棵二叉樹的結點數&#xff0c;結點標號由1至N。 接下來N行&#xff0c;這N行中的第i行包含兩個正整數l[i]…

802.11 Wi-Fi 競爭機制深度分析:CSMA/CA 與 DCF

802.11 Wi-Fi 競爭機制深度分析&#xff1a;CSMA/CA 與 DCF 一、核心機制&#xff1a;CSMA/CA&#xff08;載波偵聽多路訪問/沖突避免&#xff09; 傳統以太網使用 CSMA/CD&#xff08;沖突檢測&#xff09;&#xff0c;但無線環境中無法實現沖突檢測&#xff0c;因此802.11采用…

【Go語言-Day 36】構建專業命令行工具:`flag` 包入門與實戰

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

C語言——深入理解指針(四)

C語言——深入理解指針&#xff08;四&#xff09; 數組名的意義sizeof&#xff08;數組名&#xff09;&#xff0c;且數組名單獨放在sizeof內部&#xff0c;則這里的數組名表示整個數組&#xff0c;計算的是整個數組的大小&數組名&#xff0c;這里的數組名表示的是整個數組…

LeetCode 刷題【42. 接雨水】

42. 接雨水 自己做 解&#xff1a;雙指針左右分割容器 class Solution { public:int trap(vector<int>& height) {int res 0;int len height.size();if(len < 2) //構不成一個容器了&#xff0c;直接返回return res;int end len - 1; //右邊界int…

網絡的基本概念、通信原理以及網絡安全問題

目錄 1、 什么是網絡&#xff1f; &#xff08;1&#xff09;網絡的概念與本質 &#xff08;2&#xff09;電壓信號的合并與抵消 &#xff08;3&#xff09;電壓的本質 2、中轉設備 &#xff08;1&#xff09;背景 &#xff08;2&#xff09;中轉設備的處理能力與編程能…

Windows下使用WSL2創建Ubuntu子系統(更改安裝位置與啟動圖形桌面)

Windows下使用WSL2創建Ubuntu子系統&#xff08;更改安裝位置與啟動圖形桌面&#xff09; 本文介紹如何使用WSL2創建Ubuntu子系統&#xff0c;并更改安裝位置到其他磁盤&#xff0c;并啟動圖形桌面Xfce4。 WSL 版本: 2.5.7.0 系統版本: Windows11 23H2 相關工具&#xff1a;Mo…

時間泄漏 TemporalLeakage

時間泄漏 TemporalLeakage: 就是后續有事件發生&#xff0c;然后才有了這個結果&#xff0c;但是在該事件發生之前&#xff0c;不應該預測該結果。 Temporal Leakage 問題是往往導致縱向Planning不“果斷”。 解決方案&#xff1a;人工標注出時間發生的時刻 真值只監督時間發生…

獨立書店數字化轉型:絕版書修復檔案系統與讀者閱讀行為分析營銷平臺

在電商沖擊與閱讀習慣變遷的雙重壓力下&#xff0c;獨立書店正遭遇 “舊書修復難、新書賣不動” 的生存困境。傳統模式中&#xff0c;絕版書修復依賴老師傅經驗&#xff0c;單本修復周期長達 2 周&#xff0c;損耗率超 30%&#xff1b;營銷缺乏數據支撐&#xff0c;導致客流年均…

const修飾指針用法詳解

目錄 一、const修飾變量 繞過const限制的問題 二、const修飾指針變量 1、無const修飾的指針 2、const放在*左邊 3、const放在*右邊 4、*兩邊都有const 三、使用建議 四、記憶技巧 一、const修飾變量 在C語言中&#xff0c;變量默認是可修改的。如果我們希望某個變量不能…

pcl法線估計的踩坑

1&#xff0c;normalestimation對點云法線的評估&#xff0c;只輸出法線向量&#xff0c;并不輸出xyz值。如果輸出類型是pointnormal&#xff0c;那么這點云的法向量有值&#xff0c;xyz值都是02&#xff0c;添加點云xyz數據。可以使用 pcl::concatenatefields(*a,*b,*c)函數p…

利用Minicsv庫解析csv文件的c程序及讀入測試

上午的c程序寫入xlsx較快但不正確&#xff0c;python程序雖正確但過慢。所以找了一個全部源程序加起來不到4K字節的C語言csv解析庫Minicsv&#xff0c;來改寫&#xff0c;改寫結果如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h…

企微用戶部門同步HRS系統

企微用戶導入HR系統流程說明 概述 本文檔詳細說明了WechatUserImportServiceImpl.importWechatUsersToHrs()方法的業務流程和實現邏輯。該方法負責將企業微信用戶數據同步導入到HR管理系統中&#xff0c;包括員工信息、工作信息和任職記錄的創建與更新。 主要功能 數據同步…

告別傳統SEO!擁抱下一代流量密碼:生成式引擎優化(GEO)實戰指南

前言&#xff1a;為什么你的“最佳實踐”SEO正在失效&#xff1f;你是否發現&#xff0c;即使嚴格遵循了谷歌自2019年以來的所有“最佳實踐”&#xff0c;你的技術博客或產品文檔的流量依舊增長乏力&#xff0c;甚至不升反降&#xff1f;你不是一個人。問題在于&#xff0c;游戲…

week1-[一維數組]傳送

week1-[一維數組]傳送 題目描述 有 nnn 個傳送門&#xff0c;從第 iii 個傳送門進去后會被傳送到第 aia_iai? 個傳送門&#xff0c;進而被傳送到第 aaia_{a_i}aai?? 個傳送門&#xff0c;如此一直下去……小 A 想知道從第 kkk 個傳送門進去后&#xff0c;能不能回到第 kkk 個…

【18】目心智能——目心智能 嵌入式一面 ,校招,面試問答記錄

目心智能——目心智能 嵌入式一面 &#xff0c;校招&#xff0c;面試問答記錄 1 簡單自我介紹2 你做了這么多算法&#xff0c;為什么不找算法的&#xff1f;3 我們主要還是軟件開發&#xff0c;不做結構設計4 模電知識6 CSDN應該附鏈接在簡歷上&#xff0c;稍后發給我&#xff…

C++第二十課:快遞運費計算器 / 黑白配+石頭剪刀布小游戲

快遞運費計算器幫一家快遞站點開發一個快遞運費計算器&#xff0c;快遞站點人員只需要輸入包裹重量和地點編號即可計算出對應的運費。假設快遞費計算規則如下&#xff1a;首重&#xff1a;3公斤 3公斤以內&#xff1a;1.東三省/寧夏/青海/海南&#xff1a;12元&#xff0c;2.新…