2.go語言初始(二)

本篇博客涉及到go 的基礎數據類型、 go 語言中的運算符、轉義字符、格式化輸出、字符串操作

go 語言中的運算符

在 go 語言中,基本數據類型主要包括以下幾類:整數類型、浮點數類型、復數類型、布爾類型、字符串類型、字節類型(byte)、符文類型(rune)。

1.整數類型

  • int: 有符號整數,其大小在不同平臺上可能有所不同(通常是32位或64位)。
  • int8、int16、int32、int64:有符號整數類型、分別占用8位、16位、32位和64位。
  • uint: 無符號整數、其大小在不同平臺上可能有所不同(通常是32或64位)。
  • uint8、uint16、uint32、uint64:無符號整數類型、分別占用8位、16位、32位和64位。
  • uintptr:無符號整數類型、用于存放指針。
package mainimport "fmt"func main() {var a int = 34var b int8 = 98var c uint 16 = 65535var d uintptr = 0x12345678fmt.Println("int", a)fmt.Println("int8", b)fmt.Println("uint16", c)fmt.Println("uintptr", d)
}

【注】有符號類型和無符號類型的區別

  • 有符號整數:
    有符號整數可以表示正數、負數和零、最高位(最左邊一位)用作符號位:0 表示正數, 1 表示負數。
  • 無符號整數
    無符號整數只能表示非負數(正數和零)。所有位都用于表示值,沒有符號位。

2.浮點數類型

  • float32:32位浮點數類型。
  • float64:64位浮點數類型。
package mainimport "fmt"func main() {var e float32 = 3.14var f float64 = 2.5346546fmt.Println("float32: ", e)fmt.Println("float64: ", f)
}

3.復數類型

  • complex64: 由兩個float32組成的復數類型
  • complex128: 由兩個float64組成的復數類型
package mainimport "fmt"func main() {var g complex64 = i + 2ivar g complex64 = 3.5 + 2.5ifmt.Println("complex64:", g)fmt.Println("complex128:", h)
}

4.布爾類型

  • bool: 布爾類型只能取 'true’或 ‘false’.
package mainimport "fmt"func main() {var i bool = truevar j bool = falsefmt.Println("bool true:", i)fmt.Println("bool false:", j)
}

5.字符串類型

  • string: 字符串類型,表示一串UTF-8編碼的字符。
package mainimport "fmt"func main() {var i bool = truevar j bool = falsefmt.Println("bool true:", i)fmt.Println("bool false:", j)
}

6.字節類型

  • byte: ‘uint8’ 的別名,通常表示一個字節的數據
package mainimport "fmt"func main() {var l byte = 'A'fmt.Println("byte:", l)
}

7.符文類型

  • rune: ‘int32’ 的別名,通常用于表示一個Unicode碼點。
package mainimport "fmt"func main() {var m rune = '你'fmt.Println("rune:", m)
}

go 語言中的運算符

在 go 語言中,運算符用于執行各種操作,如算術運算、比較、邏輯運算和位運算。

1.算數運算符

  • +:加法
  • -:減法
  • *:乘法
  • /:除法
  • %:取余
package mainimport "fmt"func main() {a := 10b := 3fmt.Println("加法:", a + b)   // 13fmt.Println("減法:", a - b)   // 7fmt.Println("乘法:", a * b)   // 30fmt.Println("除法:", a / b)   // 3fmt.Println("取余:", a % b)   // 1
}

2.關系運算符

  • ==:等于
  • !=:不等于
  • <:小于
  • :大于

  • <=:小于等于
  • =:大于等于

package mainimport "fmt"func main() {a := 10b := 20fmt.Println("等于:", a == b)        // falsefmt.Println("不等于:", a != b)      // truefmt.Println("小于:", a < b)         // truefmt.Println("大于:", a > b)         // falsefmt.Println("小于等于:", a <= b)    // truefmt.Println("大于等于:", a >= b)    // false
}

3.邏輯運算符

  • &&:邏輯與(AND)
  • ||:邏輯或(OR)
  • !:邏輯非(NOT)
package mainimport "fmt"func main() {a := trueb := falsefmt.Println("邏輯與:", a && b)   // falsefmt.Println("邏輯或:", a || b)   // truefmt.Println("邏輯非:", !a)       // false
}

4.位運算符

  • &:按位與(AND)
  • |:按位或(OR)
  • ^:按位異或(XOR)
  • &^:按位清零(AND NOT)
  • <<:左移
  • >>: 右移
package mainimport "fmt"func main() {a := 10        // 1010b := 3         // 0011fmt.Println("按位與:", a & b)   // 0010 -> 2fmt.Println("按位或:", a | b)   // 1011 -> 11fmt.Println("按位異或:", a ^ b) // 1001 -> 9fmt.Println("按位清零:", a &^ b) // 0100 -> 8c := 1        // 0001fmt.Println("左移:", c << 2)    // 0100 -> 4fmt.Println("右移:", a >> 2)    // 0010 -> 2
}

5.賦值運算符

  • =:賦值
  • +=:加后賦值
  • -=:減后賦值
  • *=:乘后賦值
  • /=:除后賦值
  • %=:取余后賦值
  • &=:按位與后賦值
  • |=:按位或后賦值
  • ^=:按位異或后賦值
  • <<=:左移后賦值
  • />>=:右移后賦值
package mainimport "fmt"func main() {a := 5a += 3fmt.Println("加后賦值:", a)   // 8a -= 2fmt.Println("減后賦值:", a)   // 6a *= 2fmt.Println("乘后賦值:", a)   // 12a /= 3fmt.Println("除后賦值:", a)   // 4a %= 3fmt.Println("取余后賦值:", a) // 1
}

6.其它運算符

  • ++:自增
  • –:自減
package mainimport "fmt"func main() {a := 5a++fmt.Println("自增:", a)   // 6a--fmt.Println("自減:", a)   // 5
}

轉義字符

go 語言中,常見的轉義字符包括換行符、制表符、引號和反斜杠等。

1.常見轉義字符

  • \a:響鈴(警報)
  • \b:退格
  • \f:換頁
  • \n:換行
  • \r:回車
  • \t:水平制表符
  • \v:垂直制表符
  • \:反斜杠
  • ":雙引號
  • ':單引號
package mainimport "fmt"func main() {// 響鈴(警報)fmt.Println("響鈴(警報):\a")// 退格fmt.Println("退格:Hello\bWorld") // 輸出 "HellWorld"// 換頁fmt.Println("換頁:Hello\fWorld") // 換頁符常見于打印機控制// 換行fmt.Println("換行:Hello\nWorld")// 回車fmt.Println("回車:Hello\rWorld") // 輸出 "World"// 水平制表符fmt.Println("水平制表符:Hello\tWorld")// 垂直制表符fmt.Println("垂直制表符:Hello\vWorld")// 反斜杠fmt.Println("反斜杠:Hello\\World")// 雙引號fmt.Println("雙引號:Hello\"World\"")// 單引號fmt.Println("單引號:Hello\'World\'")
}

2.字符串字面值中的轉義字符

在字符串字面值中,轉義字符用于表示那些在正常情況下無法直接輸入的字符。例如:

package mainimport "fmt"func main() {var str string = "這是一個包含換行符的字符串:\n你好,世界!"fmt.Println(str)
}

3.使用反引號

在 go 語言中,可以使用反引號(···)創建原始字符串字面值,這種字符串字面值不支持轉義字符,所有的字符都按原樣處理。這對包含大量特殊字符或多行文本的字符串非常有用。例如:

package mainimport "fmt"func main() {var rawString string = `這是一個原始字符串字面值,
它可以包含多行文本,
以及各種特殊字符,例如 \n、\t 等,都會被按原樣處理。`fmt.Println(rawString)
}

格式化輸出

go 語言中提供了一些強大的內置函數,用于格式化輸出。這些函數主要包括 fmt.Printfmt.Printlnfmt.Printffmt.Sprintf

1.fmt.Printfmt.Println

  • fmt.Print: 直接輸出,不添加任何額外的字符。
  • fmt.Println: 輸出內容后會自動添加一個換行符。
package mainimport "fmt"func main() {fmt.Print("Hello, ")fmt.Print("Go!")// 輸出: Hello, Go!fmt.Println("Hello,")fmt.Println("Go!")// 輸出:// Hello,// Go!
}

2. fmt.Printf

fmt.Printg函數是 go 語言中常用的格式化輸出方式。

package mainimport "fmt"func main() {name := "Alice"age := 30// 使用占位符 %s 和 %d 分別輸出字符串和整數fmt.Printf("Name: %s, Age: %d\n", name, age)// 使用占位符 %v 輸出變量的默認格式fmt.Printf("Name: %v, Age: %v\n", name, age)// 使用占位符 %+v 輸出帶字段名的變量的默認格式fmt.Printf("Name: %+v, Age: %+v\n", name, age)// 使用占位符 %T 輸出變量的類型fmt.Printf("Type of name: %T, Type of age: %T\n", name, age)// 使用占位符 %q 輸出帶雙引號的字符串fmt.Printf("Quoted name: %q\n", name)// 使用占位符 %b 輸出整數的二進制表示fmt.Printf("Binary age: %b\n", age)// 使用占位符 %x 和 %X 分別輸出整數的十六進制表示(小寫字母和大寫字母)fmt.Printf("Hexadecimal age (lowercase): %x\n", age)fmt.Printf("Hexadecimal age (uppercase): %X\n", age)// 使用占位符 %f 輸出浮點數的小數表示height := 1.75fmt.Printf("Height: %f\n", height)// 使用占位符 %.2f 指定浮點數的小數位數fmt.Printf("Height (2 decimal places): %.2f\n", height)
}

3. fmt.Sprintf

  • `fmt.Sprintf``函數用于將格式化的字符串保存到變量中,而不是直接輸出到標準輸出流。
package mainimport "fmt"func main() {name := "Bob"age := 25// 使用 fmt.Sprintf 格式化字符串并保存到變量中formattedString := fmt.Sprintf("Name: %s, Age: %d", name, age)// 輸出格式化的字符串fmt.Println(formattedString)
}

字符串操作

在 go 語言中,字符串的操作主要包括字符串連接、獲取字符串長度、字符串切片、字符串查找、字符串替換等。

1.字符串連接

使用 + 運算符來連接字符串

package mainimport "fmt"func main() {str1 := "Hello"str2 := "World"result := str1 + " " + str2fmt.Println(result) // Output: Hello World
}

2.獲取字符串長度

使用len()函數獲取字符串的長度

package mainimport "fmt"func main() {str := "Hello, World!"length := len(str)fmt.Println("Length of string:", length) // Output: 13
}

3.字符串切片

使用切片操作來獲取字符串的子串

package mainimport "fmt"func main() {str := "Hello, World!"substring := str[7:12]fmt.Println("Substring:", substring) // Output: World
}

4.字符串查找

使用strings包提供的函數來查找字串在字符串中的位置

package mainimport ("fmt""strings"
)func main() {str := "Hello, World!"index := strings.Index(str, "World")fmt.Println("Index of 'World':", index) // Output: 7
}

5.字符串替換

使用strings包提供的函數來替換字符串中的字串

package mainimport ("fmt""strings"
)func main() {str := "Hello, World!"newStr := strings.Replace(str, "World", "Gopher", -1)fmt.Println("New string:", newStr) // Output: Hello, Gopher!
}

6.字符串拼接

三種方式對字符串進行拼接,其中兩種為高性能模式,在涉及到性能要求時需注意。

package mainfunc main() {// 格式化輸出username := "bobby"age := 18address := "北京"mobile := "15687954621"fmt.Println("用戶名: "+username, ", 年齡: "+strconv.Itoa(age)+", 地址:"+address, ", 電話: "+mobile) // 極其難維護fmt.Printf("用戶名:%s, 年齡: %d, 地址: %s, 電話: %s\n", username, age, address, mobile)             // 非常常用,但是性能沒有上面的好userMsg := fmt.Sprintf("用戶名:%s, 年齡: %d, 地址: %s, 電話: %s\r\n", username, age, address, mobile)fmt.Println(userMsg)// 通過srting的builder進行字符串拼接, 高性能var builder strings.Builderbuilder.WriteString("用戶名")builder.WriteString(username)builder.WriteString("年齡")builder.WriteString(strconv.Itoa(age))builder.WriteString("地址")builder.WriteString(address)builder.WriteString("電話")builder.WriteString(mobile)re := builder.String()fmt.Println(re)
}

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

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

相關文章

Linux進程控制——Linux進程程序替換

前言&#xff1a;Linux進程控制包含了進程終止&#xff0c;進程等待&#xff0c;進程程序替換。走到現在我們也只剩下進程程序替換沒介紹了&#xff0c;那么讓我們來看看進程程序替換到底是什么&#xff01; 本篇主要內容&#xff1a; 替換原理 替換函數 實現簡易shell 我們所創…

【sql】sql中with as 介紹與使用jsqlparser解析sql

文章目錄 一. 定義二. 用法三. 解析 一. 定義 with A as (select * from class) 也就是將重復用到的大批量 的SQL語句&#xff0c;放到with as 中&#xff0c;加一個別名&#xff0c;在后面用到的時候就可以直接用。對于大批量的SQL數據&#xff0c;起到優化的作用。 with子句…

Broad Learning System (BLS) 寬度學習系統

寬度學習&#xff08;Broad Learning System, BLS&#xff09;是一種有效的神經網絡學習框架&#xff0c;旨在通過擴展網絡的寬度而不是深度來提高學習能力和效率。與傳統的深度學習相比&#xff0c;寬度學習通過堆疊多層特征節點和增強節點來構建網絡&#xff0c;從而避免了深…

oracle 臨時表

oracle 臨時表 conn scott/tiger --會話內保留行 drop table tmp1; CREATE GLOBAL TEMPORARY TABLE tmp1 ON COMMIT PRESERVE ROWS AS SELECT * FROM emp;SELECT TABLESPACE_NAME,CURRENT_USERS FROM V$SORT_SEGMENT;SELECT * FROM TMP1; INSERT INTO TMP1 SELECT * FROM…

Maven依賴管理項目構建

Maven依賴管理項目構建工具 目錄 文章目錄 Maven依賴管理項目構建工具目錄一、Maven簡介1、為什么學習Maven1.1、Maven是一個依賴管理工具1.2、Maven是一個構建工具1.3、結論 2. Maven介紹3. Maven軟件工作原理模型圖&#xff08;了解&#xff09; 二、Maven安裝和配置1. Mave…

PostgreSQL擴展之PGroonga:多語言全文搜索

簡介 PGroonga 是一個 PostgreSQL 擴展&#xff0c;它增加了基于 Groonga 的全文搜索索引方法。雖然原生的 PostgreSQL 支持全文索引&#xff0c;但它僅限于基于字母和數字的語言。PGroonga 提供了更廣泛的字符支持&#xff0c;使其成為 PostgreSQL 支持的語言的超集&#xff…

(實測驗證)Gitee代碼托管嘗試(一)——克隆/下載

一、登錄 Gitee&#xff08;碼云&#xff09;代碼托管平臺&#xff1a; Gitee - 基于 Git 的代碼托管和研發協作平臺 新建個人賬戶如下&#xff1a; 二、SSH 公鑰設置 1、在git安裝目錄打開“git-cmd.exe”; 2、通過命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen …

Linux進程概念總結

這里總結下Linux進程概念總結? 馮諾依曼&#xff1a; CPU 運算器與控制器RAM 內存&#xff08;存儲器&#xff09;Cache 緩存&#xff08;一種技術&#xff09;不屬于馮諾依曼體系結構。ROM 磁盤&#xff08;輸入輸出設備&#xff09;磁盤 既可以從硬盤讀取數據也可以向硬盤…

3-3 基于RYU的流量風暴事件原理與響應策略

在傳統網絡中&#xff0c;存在著一定的廣播流量&#xff0c;占據了一部分的網絡帶寬。同時&#xff0c;在有環的拓撲中&#xff0c;如果不運行某些協議&#xff0c;廣播數據還會引起網絡風暴&#xff0c;使網絡癱瘓。 如有以下的一個網絡拓撲結構&#xff08;3_2_topoplus.py) …

零基礎學Java第十四天之枚舉

枚舉 1、理解 枚舉&#xff08;Enumeration&#xff0c;通常簡寫為enum&#xff09;在編程語言中是一種特殊的數據類型&#xff0c;它允許你為變量定義一組命名的常量。這些常量通常表示一組有限的值&#xff0c;比如一周的七天、顏色的集合或者狀態的集合等。枚舉類型的主要目…

es 分詞器(五)之elasticsearch-analysis-jieba 8.7.0

es 分詞器&#xff08;五&#xff09;之elasticsearch-analysis-jieba 8.7.0 今天咱們就來講一下es jieba 8.7.0 分詞器的實現&#xff0c;以及8.x其它版本的實現方式&#xff0c;如果想直接使用es 結巴8.x版本&#xff0c;請直接修改pom文件的elasticsearch.version版本號即可…

再談畢業論文設計投機取巧之IVR自動語音服務系統設計(信息與通信工程專業A+其實不難)

目錄 舉個IVR例子格局打開&#xff0c;萬物皆能IVR - 把《民法典》搬上IVR IVR系統其實可鹽可甜。還能可圈可點。 戎馬一生&#xff0c;歸來依然IVR。 舉個IVR例子 以下是IVR系統的一個例子。 當您撥打電話進入IVR系統。 首先檢驗是否為工作時間。 如是&#xff0c;您將被送入…

基于51單片機的自動澆花器電路

一、系統概述 自動澆水灌溉系統設計方案&#xff0c;以AT89C51單片機為控制核心&#xff0c;采用模塊化的設計方法。 組成部分為&#xff1a;5V供電模塊、土壤濕度傳感器模塊、ADC0832模數轉換模塊、水泵控制模塊、按鍵輸入模塊、LCD顯示模塊和聲光報警模塊&#xff0c;結構如…

垃圾分類管理系統java項目

文章目錄 垃圾分類管理系統一、項目演示二、項目介紹三、系統部分功能截圖四、部分代碼展示五、底部獲取項目&#xff08;9.9&#xffe5;帶走&#xff09; 垃圾分類管理系統 一、項目演示 垃圾分類管理系統 二、項目介紹 系統角色&#xff1a;管理員、用戶 1、登錄、注冊功能…

機器人非線性系統反饋線性化與解耦

機器人非線性系統的反饋線性化和解耦是控制理論中的兩個重要概念&#xff0c;它們分別用于簡化系統分析和設計過程&#xff0c;提高控制系統的性能。 首先&#xff0c;反饋線性化是一種將非線性系統轉化為線性系統的技術。在機器人控制中&#xff0c;由于機器人本身是一個強耦…

?python使用selenium進行Web自動化測試?

什么是selenium Selenium 是 ThoughtWorks 提供的一個強大的基于瀏覽器的 Selenium 是一個用于 Web 應用程序測試的工具&#xff0c;測試直接自動運行在瀏覽器中&#xff0c;就像真正的用戶在手工操作一樣。支持的瀏覽器包括 IE、Chrome 和 Firefox 等。這個工具的主要功能包…

2024042001-計算機網絡 - 物理層

計算機網絡 - 物理層 計算機網絡 - 物理層 通信方式帶通調制 通信方式 根據信息在傳輸線上的傳送方向&#xff0c;分為以下三種通信方式&#xff1a; 單工通信&#xff1a;單向傳輸半雙工通信&#xff1a;雙向交替傳輸全雙工通信&#xff1a;雙向同時傳輸 帶通調制 模擬信號…

C++基礎——繼承(下)

一、繼承與靜態成員 基類定義了static 靜態成員&#xff0c;則整個繼承體系里面只有一個這樣的成員。無論派生出多少個子 類&#xff0c;都只有一個 static 成員實例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

那些年我與c++的叫板(一)--string類自實現

引子&#xff1a;我們學習了c中的string類&#xff0c;那我們能不能像以前數據結構一樣自己實現string類呢&#xff1f;以下是cplusplus下的string類&#xff0c;我們參考參考&#xff01; 廢話不多說&#xff0c;直接代碼實現&#xff1a;&#xff08;注意函數之間的復用&…

Nacos+GateWay 搭建微服務架構

文章目錄 1.當前項目架構分析1.請求多個模塊的方式1.請求renren-fast模塊開發環境生產環境 2.請求sunliving-commodity模塊1.使用環境變量資源路徑的方式2.開發環境 dev.env.js3.生產環境 prod.env.js 3.文件上傳請求 sunliving-service模塊1.請求后端接口&#xff08;開發環境…