網(wǎng)站首頁 編程語言 正文
fmt的輸出輸入
?
字符類型的基本使用
Golang中沒有專門的字符類型,如果要存儲單個(gè)字符,一般使用byte來保存。
字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是有單個(gè)字節(jié)連接起來的。也就是說對于傳統(tǒng)的字符串是由字符組成的,而Go的字符串不同,它是由字節(jié)組成的。
Golang限定字符或者字符串一共三種引號,單引號(’’),雙引號("") 以及反引號(``)。反引號就是標(biāo)準(zhǔn)鍵盤“Esc”按鈕下面的那個(gè)鍵。?
- 單引號,表示byte類型或rune類型,對應(yīng) uint8和int32類型,默認(rèn)是 rune 類型。byte用來強(qiáng)調(diào)數(shù)據(jù)是raw data,而不是數(shù)字;而rune用來表示Unicode的code point。
- 雙引號,才是字符串,實(shí)際上是字符數(shù)組。可以用索引號訪問某字節(jié),也可以用len()函數(shù)來獲取字符串所占的字節(jié)長度。
- 反引號,表示字符串字面量,但不支持任何轉(zhuǎn)義序列。字面量 raw literal string 的意思是,你定義時(shí)寫的啥樣,它就啥樣,你有換行,它就換行。你寫轉(zhuǎn)義字符,它也就展示轉(zhuǎn)義字符。
package main
import (
"fmt"
)
//字符類型的使用
func main(){
var c1 byte = 'a'
//當(dāng)我們直接輸出byte值,就是輸出了字符對應(yīng)的碼值(ASCII碼)
fmt.Println(c1) //97
fmt.Printf("%c, %d\n", c1, c1)//a, 97
// var c2 byte= '北' //0~255
// fmt.Printf("c2 = %c", c2)//(overflows溢出)
var c3 int= '北' //使用int
fmt.Printf("c3 = %c c3對應(yīng)的碼值是%d", c3,c3)//c3 = 北 c3對應(yīng)的碼值是21271
}
如果我們保存的字符在ASCII表中,比如【0~1,a~z,A~Z...】直接可以保存到byte
如果我們保存的字符對應(yīng)碼值大于255,這時(shí)我們可以考慮使用int類型保存
如果我們需要按照字符的方式輸出,這時(shí)我們需要格式化輸出即fmt.Printf("%c",c)
字符類型的使用細(xì)節(jié)?
(1)字符常量是用單引號('')括起來的單個(gè)字符。例如:var c1 byte = 'a'
(2)Go中允許使用轉(zhuǎn)義字符“\”來將其后的字符轉(zhuǎn)變?yōu)樘厥庾址统A俊@纾簐ar c3 char = '\n'
(3)Go語言的字符使用utf-8編碼,英文字母1個(gè)字節(jié),漢字3個(gè)字節(jié)
(4)在Go中,字符的本質(zhì)是一個(gè)整數(shù),直接輸出時(shí),是該字符對應(yīng)的utf-8編碼的碼值
(5)可以直接給某個(gè)變量賦一個(gè)數(shù)字,然后按格式化輸出時(shí)%c,會輸出該數(shù)字對應(yīng)的unicode字符
var c4 int = 22269
fmt.Printf("%c",c4) //國
(6)字符類型是可以進(jìn)行運(yùn)算的,相當(dāng)于一個(gè)整數(shù),因?yàn)樗紝?yīng)有Unicode碼?
var a = 10 + 'a'
fmt.Println(a) //107
fmt.Printf("%c",a) //k
?字符類型的本質(zhì)
(1)字符型存儲到計(jì)算機(jī)中,需要將字符對應(yīng)的碼值(整數(shù))找出來
? ? ? ? 存儲:字符 ——》對應(yīng)碼值 ——》? 二進(jìn)制 ——》 存儲
? ? ? ? 讀取:二進(jìn)制 ——》 碼值? ?——》? 字符? ? ——》? 讀取
(2)字符和碼值的對應(yīng)關(guān)系是通過字符編碼表決定的
(3)Go語言的編碼都統(tǒng)一成了utf-8。非常方便,很統(tǒng)一,再也沒有編碼亂碼的困擾了。
UTF-8 和 Unicode 有何區(qū)別?
Unicode 與 ASCII 類似,都是一種字符集。
字符集為每個(gè)字符分配一個(gè)唯一的 ID,我們使用到的所有字符在 Unicode 字符集中都有一個(gè)唯一的 ID,例如上面例子中的 a 在 Unicode 與 ASCII 中的編碼都是 97。漢字“你”在 Unicode 中的編碼為 20320,在不同國家的字符集中,字符所對應(yīng)的 ID 也會不同。而無論任何情況下,Unicode 中的字符的 ID 都是不會變化的。
UTF-8 是編碼規(guī)則,將 Unicode 中字符的 ID 以某種方式進(jìn)行編碼,UTF-8 的是一種變長編碼規(guī)則,從 1 到 4 個(gè)字節(jié)不等。編碼規(guī)則如下:
- 0xxxxxx 表示文字符號 0~127,兼容 ASCII 字符集。
- 從 128 到 0x10ffff 表示其他字符。 根據(jù)這個(gè)規(guī)則,拉丁文語系的字符編碼一般情況下每個(gè)字符占用一個(gè)字節(jié),而中文每個(gè)字符占用 3 個(gè)字節(jié)。
廣義的 Unicode 指的是一個(gè)標(biāo)準(zhǔn),它定義了字符集及編碼規(guī)則,即 Unicode 字符集和 UTF-8、UTF-16 編碼等?
原文鏈接:https://blog.csdn.net/qq_37899792/article/details/124094601
相關(guān)推薦
- 2022-11-14 值類型和引用類型的區(qū)別 I 數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存中的堆和棧的區(qū)別
- 2022-04-21 Python的基礎(chǔ)語法和輸入輸出函數(shù)你都了解嗎_python
- 2022-05-03 用?FieldMask?提高?C#?gRpc?的服務(wù)性能_C#教程
- 2022-06-06 Docker鏡像構(gòu)建之docker?commit的使用_docker
- 2022-10-16 python?os模塊使用方法介紹_python
- 2022-05-15 在CentOS7上搭建本地GitLab服務(wù)器_Linux
- 2022-06-22 使用Git向GitHub上傳更新內(nèi)容_其它綜合
- 2022-10-27 樹莓派4B更換清華源和沒有公鑰報(bào)錯(cuò)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支