Go從入門到精通(持續(xù)更新)

本教程希望以詼諧幽默,誰都能理解的方式去學(xué)習(xí)Go語言层坠。大膽的嘗試何暮,希望編程是一個(gè)有血有肉的事情,而不是枯燥的代碼~

1.0 搭建環(huán)境

由于我們 Go官方網(wǎng)站 在我大天朝被和諧了撤师,所以我們只能去 Go語言中文網(wǎng) 來下載了。Go的安裝很簡單拧揽,不像Java還要配置一大堆的東西剃盾,選擇自己系統(tǒng)的對應(yīng)版本腺占,下載安裝,像安裝QQ一樣無腦痒谴。我們就不再介紹了如果真的有特別小白的朋友衰伯,也可以去百度看看圖文安裝教程

1.1. 第一個(gè)Go程序

每個(gè)編程語言的學(xué)習(xí),都是從一個(gè)"Hello, World."程序開始的积蔚,這個(gè)例子首次出現(xiàn)于1978年出版的C語言圣經(jīng)《The C Programming Language》意鲸。關(guān)于"Hello, World."還有一個(gè)很美好的故事,那就是所有的程序員期待著計(jì)算機(jī)有一天能擁有真正的智能尽爆,然后對創(chuàng)造他的人們"發(fā)自內(nèi)心"的說一句怎顾,Hello, World.

首先我們新建一個(gè)hello.go文件,輸入下面的內(nèi)容并保存:

hello.go

package main

import "fmt"

func main(){
    fmt.Println("Hello, World.")
}

打開命令行漱贱,找到hello.go所在的目錄槐雾,輸入命令:

提示:本系列教程,以 $ 符號來表示命令行提示符幅狮,看到以$符號開頭的命令募强,說明是在命令行環(huán)境下執(zhí)行的,并非命令本身的符號崇摄。

$ go run hello.go

毫無疑問擎值,我們將會(huì)看到命令行輸出:

Hello, World.

恭喜你!已經(jīng)完成了第一個(gè)Go語言程序配猫,無論你是否理解,我都要祝賀你杏死,開啟了Go語言的大門泵肄,接下來讓我們來做一些更酷的事情吧。

大家加油~

1.2. 編譯可執(zhí)行文件

Go和Python最大的區(qū)別在于淑翼,Go是一門編譯型語言而Python是一門解釋型語言腐巢。

編譯型編程語言

簡單來說,編譯型編程語言并非簡單的寫好代碼然后就運(yùn)行玄括。他還需要經(jīng)過一個(gè)編譯的步驟冯丙,把寫好的代碼通過語言提供的編譯器,編譯成操作系統(tǒng)方便閱讀而人類幾乎無法閱讀的代碼遭京。這種語言的好處就是胃惜,運(yùn)行速度快。如:Go, Java, C/C++哪雕,都是編譯型編程語言船殉。

解釋型編程語言

解釋型編程語言就是,我們寫好的代碼斯嚎,無需經(jīng)過任何處理利虫,就可以直接運(yùn)行在操作系統(tǒng)之上挨厚。但是計(jì)算機(jī)并不能理解我們所寫的代碼,這個(gè)時(shí)候就需要一個(gè)叫做解釋器的東西糠惫。解釋器就相當(dāng)于一個(gè)翻譯官一樣疫剃,把我們寫的代碼一行一行的翻譯給計(jì)算機(jī),計(jì)算機(jī)從解釋器那里得到翻譯后的代碼硼讽,才能正常執(zhí)行我們的程序巢价。由于代碼是一句一句解釋執(zhí)行的,這中間有很多等待的過程理郑,而且還取決于解釋器的執(zhí)行速度蹄溉,所以解釋型編程語言的特點(diǎn)就是運(yùn)行速度慢。如:Python就是解釋型編程語言您炉。

還記得我們上一章所寫的hello.go嗎柒爵,來回顧一下:

hello.go

package main

import "fmt"

func main(){
    fmt.Println("Hello, World.")
}

既然我們知道Go是一門編譯型語言,我們能不能把hello.go進(jìn)行編譯赚爵,然后再來運(yùn)行呢棉胀?

答案當(dāng)然是可以的:

$ go build hello.go

如果你使用的是Windows系統(tǒng),你會(huì)發(fā)現(xiàn)在hello.go文件所在的目錄下冀膝,出現(xiàn)了一個(gè)hello.exe的可執(zhí)行文件唁奢,直接運(yùn)行它或者輸入下面的命令:

$ hello.exe

如果你使用的是Mac或者Linux,則會(huì)發(fā)現(xiàn)目錄下多了一個(gè)hello的文件窝剖,輸入下面的命令來運(yùn)行:

$ ./hello

最終你都能看到麻掸,命令行輸出了:

Hello, World.

Go提供了很多命令給我們,其中最常用的兩個(gè)命令就是runbuild

go run xx.go 運(yùn)行指定的go文件

go build xx.go 編譯指定的go文件

1.3. 打開封印之門的鑰匙

有些同學(xué)看到我們這一節(jié)的名稱赐纱,可能會(huì)想脊奋,車神這是寫教程寫的大腦抽筋了吧,并不是那樣的疙描。我希望編程可以用一種更加簡單诚隙,更加方便新手接受和更加有趣的形式展現(xiàn)出來,而不是死板的函數(shù)起胰,變量久又。

我們想要進(jìn)入一棟房子,需要找到這個(gè)房子的大門才能進(jìn)去效五,那么計(jì)算機(jī)想要進(jìn)入我們做的程序地消,是不是也需要一個(gè)大門呢?答案是肯定的畏妖,那么我們Go語言的大門在哪里呢犯建?回顧第一章寫的hello.go

hello.go

package main

import "fmt"

func main(){
    fmt.Println("Hello, World.")
}

很顯然,main()就是我們這個(gè)程序的大門瓜客。package說明我們這個(gè)文件屬于哪個(gè)包适瓦,可以簡單的把包理解為一個(gè)文件夾竿开。Go語言規(guī)定,程序的入口文件玻熙,必須輸入main包否彩,而且這個(gè)文件必須包含一個(gè)main方法。

那么究竟什么是方法呢嗦随?

方法

方法從字面我們可以理解為行為列荔,比如我們?nèi)顺燥垼X枚尼,走路贴浙,談戀愛,啪啪啪署恍。這都是方法崎溃,是人的行為。那么我們的程序也會(huì)有一些行為盯质,比如運(yùn)行的行為袁串,輸出一句話的行為,在屏幕上畫一個(gè)圓圈的行為呼巷,這些行為我們形象的稱它們?yōu)榉椒ɑ蛘呓泻瘮?shù)囱修。無論是方法還是函數(shù),指的都是我們程序的某一項(xiàng)行為王悍,那么這個(gè)行為或許是現(xiàn)實(shí)世界存在的破镰,或許是現(xiàn)實(shí)世界不存在的。當(dāng)你開始編程的時(shí)候压储,你就是造物主鲜漩,你可以給你的程序創(chuàng)建任何行為。由于Go是Google創(chuàng)造的渠脉,所以我們想在Go的世界當(dāng)一回造物主宇整,就要依靠Google給我們提供的各種超能力瓶佳。接下來我們就來看看芋膘,第一個(gè)超能力。

func 關(guān)鍵字

Go語言為我們提供了一個(gè)創(chuàng)建方法的關(guān)鍵字霸饲,這個(gè)關(guān)鍵字可以理解為我們的超能力为朋,有了它我們就能給程序創(chuàng)建各種各樣的方法,各種我們喜歡的方法厚脉。它的一個(gè)簡單的用法就是:

func 你喜歡的名字(){
    具體的行為
}

從今天開始习寸,我們就來體驗(yàn)當(dāng)創(chuàng)世神的快感吧。

新建一個(gè)Go文件傻工,我把他叫做 yadang.go 霞溪。我們像上帝一樣創(chuàng)造了一個(gè)叫做亞當(dāng)?shù)娜耍?/p>

package main

import "fmt"

func main(){
    fmt.Println("你好孵滞,我是亞當(dāng)。")
}

讓我們來運(yùn)行一下:

go run yadang.go

我們的亞當(dāng)可以說話了鸯匹,大家注意到我們的亞當(dāng)坊饶,只有一個(gè)main方法,這個(gè)方法是Go語言規(guī)定的殴蓬,任何一個(gè)程序想要啟動(dòng)匿级,必須包含這個(gè)方法。大家可以思考一下染厅,我們的Go在給我們的亞當(dāng)賦予生命的時(shí)候痘绎,肯定需要找到main才能啟動(dòng),main就相當(dāng)于打開封印的鑰匙一樣肖粮,這個(gè)寫法是固定的孤页,也就是說,我們無論創(chuàng)造什么樣的生命或者是絢爛多姿的世界尿赚,都要有一個(gè)大門散庶,這個(gè)大門就是main方法,main方法只能存在于main這個(gè)package中凌净,package就像一個(gè)世界悲龟,main就是這個(gè)世界的中心大陸,而我們的一切生命都起源于這里冰寻。

1.4. 奔跑吧须教,亞當(dāng)

上節(jié)課我們一起創(chuàng)造了亞當(dāng),但是我們的亞當(dāng)還很低級斩芭,他只會(huì)說一句話轻腺,連走路都不會(huì),這節(jié)課我們就讓亞當(dāng)划乖,奔跑起來贬养。

來看一下我們的亞當(dāng),現(xiàn)在是什么樣子:

yadang.go

package main

import "fmt"

func main(){
    fmt.Println("你好琴庵,我是亞當(dāng)误算。")
}

大家可能注意到 import "fmt",這其實(shí)是Go語言提供的包含一系列方法的一個(gè)工具迷殿。大家可以把它理解為插件儿礼,裝上這個(gè)插件,我們的亞當(dāng)才能使用這個(gè)插件里提供的各種功能庆寺,其中一個(gè)很重要的功能就是:

fmt.Println()

這個(gè)方法可以在屏幕上輸出一句話蚊夫,我們的亞當(dāng)就是依靠這個(gè)方法來跟大家問好的。

就像我們?nèi)祟愐粯优吵ⅲ?dāng)你想說話的時(shí)候知纷,總是你的大腦想起一句話壤圃,然后把這句話送給我們的嘴巴,由我們的嘴巴把這句話說出來琅轧。我們并不知道大腦的神經(jīng)元之間是如何傳遞的埃唯,我們并不是人體專家也不是神經(jīng)學(xué)的專家,我們不懂人到底是怎么說話的鹰晨,但是我們只需要知道墨叛,想說話就通過嘴巴就能說,我們的身體會(huì)自動(dòng)處理一切需要的東西模蜡。

同樣的漠趁,在我們編程的世界里也是一樣的,我們不懂怎么樣才能讓操作系統(tǒng)在屏幕上顯示一句話忍疾,我們不了解計(jì)算機(jī)的硬件之間是怎么通信的闯传,但是Go為我們做好了一切,它把一切復(fù)雜的東西做成一個(gè)個(gè)方便使用的方法卤妒,使得我們不需要成為計(jì)算機(jī)專家甥绿,也能在電腦屏幕上面輸出一句話。我們不用管背后有多么復(fù)雜的邏輯则披,只需要使用這簡簡單單的一個(gè)方法共缕,就能實(shí)現(xiàn)。

亞當(dāng)會(huì)說話了

事實(shí)上士复,我們的亞當(dāng)目前只有一個(gè)主方法图谷,他還沒有任何身為人的方法,那今天我們就給亞當(dāng)創(chuàng)造一些方法阱洪,讓他看上去更像一個(gè)人:

yadang.go

package main

import "fmt"

func main(){
    speak()
    run()
}

func speak(){
    fmt.Println("哇哈哈便贵,我會(huì)說話了~")
}

func run(){
    fmt.Println("我跑,我跑冗荸,我跑跑跑~")
}

可以看到承璃,我們的亞當(dāng)多了兩個(gè)方法,一個(gè)叫做speak蚌本,一個(gè)叫做run盔粹。當(dāng)然你可以把他們改成任何你喜歡的名字,比如叫 shuohua, aaa, hahaha 都可以魂毁。但是我們?nèi)祟愓f話的方法就叫說話玻佩,非常的便于理解出嘹,如果我們創(chuàng)造了一個(gè)亞當(dāng)席楚,我們把他說話的方法叫一個(gè)毫無意義的名字,那其他人看到亞當(dāng)?shù)臅r(shí)候税稼,就不知道這是一個(gè)什么方法了烦秩,比如下面的樣子:

yadang.go

package main

import "fmt"

func main(){
    aaa()
    bbb()
}

func aaa(){
    fmt.Println("哇哈哈垮斯,我會(huì)說話了~")
}

func bbb(){
    fmt.Println("我跑,我跑只祠,我跑跑跑~")
}

我們來運(yùn)行一下:

go run yadang.go

同樣我們能夠看到屏幕上輸出了:

哇哈哈兜蠕,我會(huì)說話了~
我跑,我跑抛寝,我跑跑跑~

但是我們的亞當(dāng)看上去是不是變得難以理解了熊杨,aaabbb 是什么方法?讓人捉摸不透盗舰,所以說晶府,大家在給我們的程序增加一些方法的時(shí)候,最好起一些有意義的名字钻趋,能夠表達(dá)這個(gè)方法含義的名字川陆,無論是用英語還是漢語拼音都是可以的,只要其他人和自己在閱讀代碼的時(shí)候能夠輕易的認(rèn)出這個(gè)方法是做什么的就可以了蛮位。

至此较沪,大家已經(jīng)掌握了如何讓我們的亞當(dāng)奔跑,但是我們的亞當(dāng)還缺少一項(xiàng)重要的東西失仁,那就是長相尸曼,下一節(jié)我們將一起來把我們的亞當(dāng)變成一個(gè)帥氣的猛男子吧~

1.5. 帥氣的猛男子

今天我們將繼續(xù)在Go語言大陸造人,上節(jié)課我們讓亞當(dāng)擁有了說話和奔跑的方法萄焦,但是我們的亞當(dāng)還沒有具體的身高骡苞,體重。那么這些東西也能通過方法來實(shí)現(xiàn)嗎楷扬?答案是否定的解幽,一個(gè)人的身高和體重,并不屬于一個(gè)人的行為烘苹,而是屬于這個(gè)人的屬性躲株。那么我們的程序也擁有一些屬性,接下來我們就一起看一下如何給程序定義屬性镣衡。

來看一下我們的亞當(dāng):

yadang.go

package main

import "fmt"

func main(){
    speak()
    run()
}

func speak(){
    fmt.Println("哇哈哈霜定,我會(huì)說話了~")
}

func run(){
    fmt.Println("我跑,我跑廊鸥,我跑跑跑~")
}

我們都知道望浩,自然界中的屬性有很多種,比如一個(gè)人的身高惰说,可能是180cm磨德,也可能是179.5cm,一個(gè)人的體重,可能是60kg典挑,也可能是75.8kg酥宴。一個(gè)人的胳膊數(shù)量,可能是0您觉,也可能是1或者2拙寡。一個(gè)人的外貌,可能是美麗琳水,可能是一般肆糕,可能是丑陋。一個(gè)人的是不是有錢在孝,那就只有兩種可能擎宝,是或者否。那么這些數(shù)據(jù)都擁有不同的類型浑玛,可能是整數(shù)類型绍申,也可能是小數(shù)類型,還可能是文字顾彰,負(fù)數(shù)极阅,和是否類型。

那么在我們的Go語言世界里涨享,也存在許許多多的數(shù)據(jù)類型筋搏。

布爾類型

bool

字符類型

string

整數(shù)類型

int int8 int16 int32 int64

無符號整數(shù)類型

uint uint8 uint16 uint32 uint64 uintptr

uint8 的別名

byte

int32 的別名(代表一個(gè)Unicode碼)

rune

浮點(diǎn)型

float32 float64

實(shí)數(shù)和虛數(shù)

complex64 complex128

我們可以看到,在Go語言的世界里存在這么多的數(shù)據(jù)類型厕隧,但是常用的也就是我們上面說的奔脐,小數(shù)類型(浮點(diǎn)型),整數(shù)類型吁讨,是否類型(布爾型)髓迎,文字類型(字符類型)。

那么比較特殊的是跟數(shù)字相關(guān)的建丧,因?yàn)槲覀兌贾琅帕洌瑪?shù)字是有范圍的,比如大于1000翎朱,大于10000橄维。在我們現(xiàn)實(shí)生活中,如果一個(gè)人的體重是100kg拴曲,那地球就要使用100kg對應(yīng)的那么大的空間來讓這個(gè)人生活争舞。如果一個(gè)人的體重是10000kg,那么地球就需要耗費(fèi)10000kg對應(yīng)的空間來給這個(gè)人澈灼。那么竞川,如果一個(gè)體重只有60kg的人,他卻被地球分配了一個(gè)能容納10000kg體重的空間,是不是就浪費(fèi)了我們地球有限的土地資源呢流译?

所以說,在Go語言的世界里者疤,為了節(jié)約我們寶貴的土地資源(內(nèi)存)福澡,我們需要在給程序定義屬性的時(shí)候,選擇合適的大小來分配驹马,這樣才不會(huì)浪費(fèi)我們計(jì)算機(jī)的內(nèi)存革砸。

有符號整數(shù)類型

int8 有符號的8位整數(shù),范圍 -128 到127

int16 有符號的16位整數(shù)糯累,范圍 -32768 到 32767

int32 有符號的32位整數(shù)算利,范圍 -2147483648 到 2147483647

int64 有符號的64位整數(shù),范圍 -9223372036854775808 到 9223372036854775807

int 有符號的32位或64位整數(shù)泳姐,范圍根據(jù)Go程序運(yùn)行的操作系統(tǒng)來決定效拭,如果是32位的操作系統(tǒng)就相當(dāng)于int32,如果是64位的操作系統(tǒng)就相當(dāng)于int64胖秒。那么今天我們大部分的計(jì)算機(jī)都是64位的缎患,所以如果直接使用int,而你的電腦剛好是64位的操作系統(tǒng)阎肝,那他就等于int64挤渔。

這里所說的位,并不是有幾位數(shù)字风题,而是我們計(jì)算機(jī)的一個(gè)容量單位判导,8位等于1個(gè)字節(jié),1024個(gè)字節(jié)等于1KB沛硅,1024KB就等于1兆眼刃。那么16位就是兩個(gè)字節(jié)。

那么假如我們要表示一個(gè)人的年齡摇肌,很顯然使用 int16 就足夠了鸟整,如果使用 int32 就會(huì)造成大量的空間浪費(fèi),因?yàn)?int32 最大可以表示21億多的數(shù)字朦蕴,很顯然人類的壽命是不可能有這么大的篮条。反之,如果我們制作一個(gè)網(wǎng)絡(luò)游戲吩抓,需要來表示人物的攻擊力涉茧,我們都知道有些游戲?yàn)榱俗屚婕殷w會(huì)到快感,把攻擊力設(shè)置的非常高疹娶。什么開局只有一條狗伴栓,一刀99億。那么很顯然,如果是這種變態(tài)游戲的攻擊力钳垮,我們用 int32 來表示就不合適了惑淳,因?yàn)?int32 無法容納我們的一刀99億,這時(shí)候我們就只能使用最大的 int64 來存儲饺窿。至于他最高能表示多大的數(shù)值歧焦,大家有興趣的可以數(shù)一下,反正如果換成錢的話肚医,車神大概可以把整個(gè)地球買下來绢馍。

我們可以看到int類型無論多少位,都是包含負(fù)號的肠套,這種數(shù)據(jù)類型我們成為有符號整數(shù)類型舰涌。那么既然存在有符號整數(shù)類型,是不是還有一個(gè)無符號整數(shù)類型呢你稚?恭喜你答對了瓷耙,uint就是無符號整數(shù)類型。

無符號整數(shù)類型

uint8 無符號8位整數(shù)刁赖,范圍 0 到 255

uint16 無符號16位整數(shù)哺徊,范圍 0 到 65535

uint32 無符號32位整數(shù),范圍 0 到 4294967295

uint64 無符號64位整數(shù)乾闰,范圍 0 到 18446744073709551615

uint 無符號的32位或64位整數(shù)落追,和 int 一樣,根據(jù)操作系統(tǒng)的位數(shù)來決定涯肩。

uintptr 無符號整數(shù)轿钠,用于存放一個(gè)指針。關(guān)于指針病苗,我們將在后面為大家詳細(xì)講解疗垛,這里僅作為了解即可,不需要理解硫朦。

聰明的同學(xué)可能已經(jīng)發(fā)現(xiàn)了贷腕,所謂的無符號整數(shù)類型,就是把原來存儲負(fù)數(shù)的那部分空間咬展,給取消了泽裳,此消彼長,這樣正數(shù)部分就能加上原來負(fù)數(shù)的那部分空間用來存儲更大的數(shù)字了破婆。

所以 uint8 的存儲范圍實(shí)際上就是 int8 的 -128 去掉負(fù)號然后加127涮总,結(jié)果就是255。有興趣的可以驗(yàn)證一下其他的幾個(gè)是不是都等于祷舀,有符號的整型去掉負(fù)號相加就是無符號整型的取值范圍瀑梗。

具體的取值范圍大家不需要記憶烹笔,只需要記住,100以內(nèi)用 int8抛丽,3萬以內(nèi)用 int16谤职,21億以內(nèi)用 int32,大于這個(gè)范圍用 int64亿鲜。如果不存在負(fù)數(shù)的情況允蜈,可以使用無符號整型。無符號整型只需要在有符號整型的范圍基礎(chǔ)上乘以2狡门,就是我們選擇的合適范圍了陷寝。如200以內(nèi)用 uint8锅很,42億以內(nèi)用 uint32其馏。

身高一米五?

讓我們來看看如何給亞當(dāng)一個(gè)身高的屬性

yadang.go

package main

import "fmt"

var height uint8 = 150

func main(){
    hello()
}

func hello(){
    fmt.Printf("我是亞當(dāng)爆安,身高 %v 米", height)
}

func speak(){
    fmt.Println("哇哈哈叛复,我會(huì)說話了~")
}

func run(){
    fmt.Println("我跑,我跑扔仓,我跑跑跑~")
}

運(yùn)行我們的亞當(dāng)褐奥,就會(huì)發(fā)現(xiàn)輸出了:

我是亞當(dāng),身高 150 米

首先我們來看如何使用我們的變量的翘簇,var 變量名 類型 = 值撬码。等號和后面的值是可選的,如果不指定值版保,Go會(huì)給這個(gè)變量一個(gè)默認(rèn)的值呜笑。

另一個(gè)新的方法就是在我們 fmt 這個(gè)包里面的 Printf。它可以讓我們在字符串里面寫一些占位符彻犁,什么叫占位符呢叫胁?大家可以認(rèn)為占位符就是替你排隊(duì)的,比如你買東西有事汞幢,你想讓一個(gè)人替你站在那里排隊(duì)驼鹅,等你回來了以后讓那個(gè)人出去,你站在他的位置上森篷,就叫占位符输钩。 %v 就是其中一個(gè)占位符。Printf 會(huì)拿著后面的 height 的值去替換 %v仲智,如果有多個(gè)占位符张足,會(huì)按照從前往后的順序,以此替換坎藐,比如我們下面看到的为牍。

yadang.go

package main

import (
    "fmt"
    "reflect"
)

var height uint8 = 150
var weight = 20

func main(){
    hello()
}

func hello(){
    fmt.Printf("我是亞當(dāng)哼绑,身高 %v 米,體重 %v 噸碉咆。", height, weight)
    fmt.Println(reflect.TypeOf(height), reflect.TypeOf(weight))
}

func speak(){
    fmt.Println("哇哈哈抖韩,我會(huì)說話了~")
}

func run(){
    fmt.Println("我跑,我跑疫铜,我跑跑跑~")
}

運(yùn)行以后發(fā)現(xiàn)結(jié)果是:

我是亞當(dāng)茂浮,身高 150 米,體重 20 噸壳咕。uint8 int

我們發(fā)現(xiàn)正常輸出了 我是亞當(dāng)席揽,身高 150 米,體重 20 噸谓厘。 下面的 reflect.TypeOf(height) 是Go給我們提供的另一個(gè)方便我們創(chuàng)造一切的工具幌羞,這個(gè)工具包叫做 reflect 里面有一個(gè)方法 TypeOf 他可以接收一個(gè)變量,然后告訴我們這個(gè)變量的類型是什么竟稳。

我們發(fā)現(xiàn)上面的體重 var weight = 20 我們并沒有指定類型属桦,這是因?yàn)镚o會(huì)自己根據(jù)等號后面的類型去判斷應(yīng)該給我們的變量一個(gè)什么默認(rèn)值,這里我們可以看到他爸,如果是整數(shù)的話聂宾,Go默認(rèn)是把它聲明成一個(gè) int 類型的變量了。我們都知道 int 是有符號的類型诊笤,根據(jù)操作系統(tǒng)位數(shù)的不同系谐,最低可以表示21億的正負(fù)數(shù),最高就是 int64 可以表示很大的正負(fù)數(shù)值讨跟。而我們的亞當(dāng)纪他,很顯然不會(huì)有這么重的,所以我們?yōu)榱斯?jié)約珍貴的資源许赃,就像節(jié)約我們的土地一樣止喷。就要給一些明知道一定不會(huì)超過這個(gè)范圍的變量一個(gè)合適的類型。

比如我們要做一個(gè)日歷系統(tǒng)混聊,其中表示年份的我們就可以使用 uint16 類型弹谁,最高可以表示 65535,至少在我們有生之年是看不到那一年了句喜,或許只有我們的亞當(dāng)才能活這么多年吧~~當(dāng)然预愤,如果你們公司需要做一個(gè)未來日歷,要求可以查看幾百萬年以后咳胃,那就要根據(jù)需求使用其他的數(shù)據(jù)類型了植康。

(持續(xù)更新中~)

最后更新時(shí)間:2018年04月28日10:20:09
作者:秋名山車神
簡書提供版權(quán)保護(hù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贡必,一起剝皮案震驚了整個(gè)濱河市孙乖,隨后出現(xiàn)的幾起案子史辙,更是在濱河造成了極大的恐慌诵姜,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冻记,死亡現(xiàn)場離奇詭異睡毒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冗栗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門演顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隅居,你說我怎么就攤上這事钠至。” “怎么了胎源?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵棉钧,是天一觀的道長。 經(jīng)常有香客問我乒融,道長掰盘,這世上最難降的妖魔是什么摄悯? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任赞季,我火速辦了婚禮,結(jié)果婚禮上奢驯,老公的妹妹穿的比我還像新娘申钩。我一直安慰自己,他們只是感情好瘪阁,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布撒遣。 她就那樣靜靜地躺著,像睡著了一般管跺。 火紅的嫁衣襯著肌膚如雪义黎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天豁跑,我揣著相機(jī)與錄音廉涕,去河邊找鬼。 笑死艇拍,一個(gè)胖子當(dāng)著我的面吹牛狐蜕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卸夕,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼层释,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了快集?” 一聲冷哼從身側(cè)響起贡羔,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤廉白,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乖寒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒙秒,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年宵统,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晕讲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡马澈,死狀恐怖瓢省,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痊班,我是刑警寧澤勤婚,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站涤伐,受9級特大地震影響馒胆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凝果,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一祝迂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧器净,春花似錦型雳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浪慌,卻和暖如春冤荆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背权纤。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工钓简, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妖碉。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓涌庭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欧宜。 傳聞我的和親對象是個(gè)殘疾皇子坐榆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,151評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理冗茸,服務(wù)發(fā)現(xiàn)席镀,斷路器匹中,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • Go入門 Go介紹 部落圖鑒之Go:爹好還這么努力? 環(huán)境配置 安裝 下載源碼編譯安裝 下載相應(yīng)平臺的安裝包安裝 ...
    齊天大圣李圣杰閱讀 4,622評論 0 26
  • 官方網(wǎng)站:https://golang.org/標(biāo)準(zhǔn)庫文檔:https://golang.org/pkg/在線編碼...
    技術(shù)學(xué)習(xí)閱讀 2,327評論 2 39
  • 出處---Go編程語言 歡迎來到 Go 編程語言指南豪诲。本指南涵蓋了該語言的大部分重要特性 Go 語言的交互式簡介顶捷,...
    Tuberose閱讀 18,448評論 1 46