go系列教程-類型

来源:https://www.cnblogs.com/e10470252222/archive/2020/04/11/12638333.html
-Advertisement-
Play Games

下麵是 Go 支持的基本類型: bool 數字類型 int8, int16, int32, int64, int uint8, uint16, uint32, uint64, uint float32, float64 complex64, complex128 byte rune string b ...


下麵是 Go 支持的基本類型:
bool
數字類型
int8, int16, int32, int64, int
uint8, uint16, uint32, uint64, uint
float32, float64
complex64, complex128
byte
rune
string
bool
1、bool 類型表示一個布爾值,值為 true 或者 false。
2、有符號整型
int8:表示 8 位有符號整型
大小:8 位
範圍:-128~127
int16:表示 16 位有符號整型
大小:16 位
範圍:-32768~32767
int32:表示 32 位有符號整型
大小:32 位
範圍:-2147483648~2147483647
int32:表示 32 位有符號整型
大小:32 位
範圍:-2147483648~2147483647
int:根據不同的底層平臺(Underlying Platform),表示 32 或 64 位整型。除非對整型的大小有特定的需求,否則你通常應該使用 int 表示整型。
大小:在 32 位系統下是 32 位,而在 64 位系統下是 64 位。
範圍:在 32 位系統下是 -2147483648~2147483647,而在 64 位系統是 -9223372036854775808~9223372036854775807。

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var a int = 89
    b := 95
    fmt.Sprintf("value of a is", a, "and is b\n", b)
    // a 的類型和大小
    fmt.Printf("type of a is %T, size of a is %d\n", a, unsafe.Sizeof(a))
    // b 的類型和大小
    fmt.Printf("type of b is %T, size of b is %d\n", b, unsafe.Sizeof(b))
}
線上運行程式
value of a is 89 and is 95
type of a is int, size of a is 8
type of b is int, size of b is 8
從上面的輸出,我們可以推斷出 a 和 b 為 int 類型,且大小都是 64 位(8 位元組)。
如果你在 32 位系統上運行上面的代碼,會有不同的輸出。在 32 位系統下,a 和 b 會占用 32 位(4 位元組)的大小。
3、無符號整型
uint8:表示 8 位無符號整型
大小:8 位
範圍:0~255
uint16:表示 16 位無符號整型
大小:16 位
範圍:0~65535
uint32:表示 32 位無符號整型
大小:32 位
範圍:0~4294967295
uint64:表示 64 位無符號整型
大小:64 位
範圍:0~18446744073709551615
uint:根據不同的底層平臺,表示 32 或 64 位無符號整型。
大小:在 32 位系統下是 32 位,而在 64 位系統下是 64 位。
範圍:在 32 位系統下是 0~4294967295,而在 64 位系統是 0~18446744073709551615。

4、浮點型
float32:32 位浮點數
float64:64 位浮點數

package main

import (
    "fmt"
)

func main() {
    a, b := 5.67, 8.97
    fmt.Printf("type of a %T b %T\n", a, b)
    sum := a + b
    diff := a - b
    fmt.Println("sum", sum, "diff", diff)

    no1, no2 := 56, 89
    fmt.Println("sum", no1+no2, "diff", no1-no2)
}
線上運行程式
type of a float64 b float64
sum 14.64 diff -3.3000000000000007
sum 145 diff -33

a 和 b 的類型根據賦值推斷得出。在這裡,a 和 b 的類型為 float64(float64 是浮點數的預設類型)。

我們把 a 和 b 的和賦值給變數 sum,把 b 和 a 的差賦值給 diff,接下來列印 sum 和 diff。no1 和 no2 也進行了相同的計算

 

5、複數
在電腦中,複數是由兩個浮點數表示的,其中一個表示實部(real),一個表示虛部(imag)
complex64:實部和虛部都是 float32 類型的的複數。
complex128:實部和虛部都是 float64 類型的的複數。
內建函數 complex 用於創建一個包含實部和虛部的複數。complex 函數的定義如下:
func complex(r, i FloatType) ComplexType

該函數的參數分別是實部和虛部,並返回一個複數類型。實部和虛部應該是相同類型,也就是 float32 或 float64。
如果實部和虛部都是 float32 類型,則函數會返回一個 complex64 類型的複數。
如果實部和虛部都是 float64 類型,則函數會返回一個 complex128 類型的複數。

還可以使用簡短語法來創建複數:
c := 6 + 7i
下麵我們編寫一個簡單的程式來理解複數。
package main

import "fmt"

func main() {
    c1 := complex(5, 7)
    c2 := 8 + 27i
    cadd := c1 + c2
    fmt.Println("sum:", cadd)
    cmul := c1 * c2
    fmt.Println("product:", cmul)
}
線上運行程式
sum: (13+34i)
product: (-149+191i)

如果大家對複數的運演算法則不是很瞭解,可以查閱《複數運演算法則》,其中詳細的講解了複數的加減乘除操作 。

複數也可以用==和!=進行相等比較,只有兩個複數的實部和虛部都相等的時候它們才是相等的。

Go語言內置的 math/cmplx 包中提供了很多操作複數的公共方法,實際操作中建議大家使用複數預設的 complex128 類型,因為這些內置的包中都使用 complex128 類型作為參數


6、其他數字類型
byte 是 uint8 的別名。
rune 是 int32 的別名。

7、string 類型
在golang中,字元串是位元組的集合,其中每一個元素叫做字元。具體內容參看《go系統教程-字元串》

8、類型轉換
Go 有著非常嚴格的強類型特征。Go 沒有自動類型提升或類型轉換
package main

import "fmt"

func main() {
    a := 1
    b := 5.5
    sum := a + b
    fmt.Println(sum)
}
線上運行程式
invalid operation: a + b (mismatched types int and float64)

上面的代碼在 C 語言中是完全合法的,然而在 Go 中,卻是行不通的。a的類型是 int ,而 b 的類型是 float64 ,

我們正試圖把兩個不同類型的數相加,Go 不允許這樣的操作。

如果運行程式,你會得到: invalid operation: i + j (mismatched types int and float64)

 

要修複這個錯誤,i 和 j 應該是相同的類型。在這裡,我們把 j 轉換為 int 類型。把 v 轉換為 T 類型的語法是 T(v)

package main

import "fmt"

func main() {
    a := 1
    b := 5.5
    sum := a + int(b)
    fmt.Println(sum)
}
線上運行程式
 6

 



 
 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在【JAVA進階架構師指南】系列二和三中,我們瞭解了JVM的記憶體模型以及類載入機制,其中在記憶體模型中,我們說到,從線程角度來說,JVM分為線程私有的區域(虛擬機棧/本地方法棧/程式計數器)和線程公有區域(方法區和java堆),其中線程私有區域記憶體隨著線程的結束而跟著被回收,GC主要關註的是堆和 ...
  • 靈魂拷問:在不重啟服務的前提下,如何讓配置修改生效的呢?有什麼奇技淫巧嗎? 靈魂拷問:在 Java 項目中,總能看到以 .properties 為尾碼的文件蹤影,這類配置文件是怎麼載入的呢? 項目研發過程中,總會遇到一些經常改變的參數,比如要連接的資料庫的連接地址、名稱、用戶名、密碼;再比如訪問三方 ...
  • 1、什麼是字元串? Go語言中字元串是一個位元組切片。把內容放在雙引號""之間,我們可以創建一個字元串,讓我們來看一下創建並列印字元串的簡單示例。 package main import ( "fmt" ) func main() { str := "hello golang" fmt.Println ...
  • 一、Java註解 1.引入起始:Java5.0開始引入; 2.該功能可用於類、構造方法、成員變數、方法、參數 3.註解功能的影響範圍:不影響程式的正常執行,但是會對編譯器等輔助工具產生影響。 4.定義:註解又可以稱為標註,是程式的元數據,也是程式代碼的標記。 5.獲取方式:在編譯、載入類和運行時。 ...
  • PHP常用設計模式詳解 單例模式: php交流群:159789818 特性:單例類只能有一個實例 類內__construct構造函數私有化,防止new實例 類內__clone私有化,防止複製對象 設置一個$instance私有靜態屬性,為了保存當前類的實例 設置一個getInstance公有方法,為 ...
  • 寫在前面 在JDK中,提供了這樣一種功能:它能夠將複雜的邏輯拆分成一個個簡單的邏輯來並行執行,待每個並行執行的邏輯執行完成後,再將各個結果進行彙總,得出最終的結果數據。有點像Hadoop中的MapReduce。 ForkJoin是由JDK1.7之後提供的多線程併發處理框架。ForkJoin框架的基本 ...
  • 線程池原理和使用在面試中被高頻問到,比如阿裡的面試題。下麵我們針對問題來進行回答。 為什麼要使用線程池? 線程池的使用場景有2: 1, 高併發場景:比如tomcat的處理機制,內置了線程池處理http請求; 2,非同步任務處理:比如spring的非同步方法改造,增加@Asyn註解對應了一個線程池; 使用 ...
  • 基本介紹 基數排序屬於“分配式排序”,它通過元素的各個位的值,將元素放置對應的“桶”中 基數排序屬於穩定性排序,效率高,但是過多的元素會出現虛擬機運行記憶體的不足(千萬個元素) 基本思想 把元素統一為同樣長度的數組長度 元素較短的數前面補0,比如(1 15 336 看成 001 015 336) 然後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...