Golang輸出世界上所有的語言文字
阿新 • • 發佈:2018-11-17
前言
下面這段程式碼,可以瞬間打印出世界上所有的語言文字,英文,日語,漢字,拉丁,漢語,甚至納西文字,藏語,應有盡。而這一切,都源於對hello world程式碼研究的一個小靈感,結果並不是最重要的,可能對於大神來說這一切都是雕蟲小技,但是我覺得自己的想法和思考的過程最來之不易,難能可貴,值得記錄下來。
開始
先來引入一個hello world!
func main() {
a:="helloworld"
for i:=0;i<len(a) ;i++ {
fmt.Printf("%c",a[i])
}
}
ok!毫無懸念,打印出了helloworld。
於是我就想,若是換上我們博大精深的漢字會怎樣呢?!
繼續實踐!
func main() {
a:="hello世界"
for i:=0;i<len(a) ;i++ {
fmt.Printf("%c",a[i])
}
}
輸出結果:
居然對我們漢字這麼不友好,直接給出了看不懂的亂碼。
這是為什麼呢?!搜尋資料發現,咱們的漢字要佔三個位元組,若是我們打印出len(a),輸出的結果是11,那怎麼樣才能讓我們的計算機分別打印出世界的世和世界的界呢? 小編思索後發現這兩種方法:
方法一,使用智慧的for range遍歷的方法,for range會智慧的幫助我們識別我們想要的有效value,程式碼如下:
ok,成功打印出了世界二字,而且細心的同學會發現,‘世’的下標為5,到‘界’下標就成了8,這也驗證了漢字佔了三個位元組長度。
因此,使用下標,方法二就誕生了!
方法二:
那麼,為啥他們英文字母有著對應的ascii碼,咱們中文是怎麼存在的?!讓我們回到for range的那段程式碼
ok!我們發現原來中文也有自己的專屬碼世界對應的分別是19990和30028,這叫作unicode碼,原來是因為go語言原生支援unicode標準,可以使用GO處理世界上任何自然語言!
因此,小編腦洞開啟,大膽實驗,想看看go是不是能打印出世界上所有的文字,程式碼很簡單,利用我們前面所理解的,實現如下
func main() {
var i int=0
var t int=0
for {
fmt.Printf("%c",i)
i++
//從零一直列印
time.Sleep(time.Nanosecond)
//如果列印的太快,有時會不出結果,所以要停頓一下
//以下幾行是每隔60個換一下行,方便觀察結果
t++
if t%60==0 {
fmt.Println()
}
}
}
展示結果部分如下(結果太多,只能部分展示):
幾乎世界上所有的文字都源源不斷的輸送到眼前,看起來很高大上的樣子。