重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
關(guān)鍵字var用來定義變量,有兩種定義方式,如下:
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計制作、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鷹手營子,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
var num int
num = 123
var word string
word = "abc"
num := 123
word := "abc"
退化賦值:前提條件是--最少有一個新的變量被定義,且必須是同一作用域
package main
import(
"log"
"os"
)
func main(){
f,err := os.Open("/dev/random")
buf := make([]byte,1024)
n,err = f.Read(buf)
}
x,y := 123,"add"
避免使用系統(tǒng)關(guān)鍵字
常量值必須是編譯期間可以確定的數(shù)字、符號,字符串或者布爾值。可以指定常量類型或者由編譯器通過初始化值推斷。常量是只讀的。
常量不像是變量一樣在運行期間分配存儲內(nèi)存,通常會在編譯器預(yù)處理階段展開,作為指令數(shù)據(jù)使用。
package main
import "fmt"
func main(){
const(
a = 120
b
c = "FUNK "
d
)
fmt.Printf("%T,%v\n",a,b)
fmt.Printf("%T,%v\n",c,d)
}
)
Go沒有明確的enmu的定義,但是借助iota來實現(xiàn)一組自增的枚舉類型
package main import "fmt" func main(){ const( a = iota b // 1 c // 2 d // 3 ) fmt.Printf("%T,%v\t%v\t%v\t",a,b,c,d) }
基本類型
類型 | 長度 | 默認(rèn)值 | 說明 |
---|---|---|---|
bool | 1 | false | |
byte | 1 | 0 | unit8 |
int,unit | 4,8 | 0 | 默認(rèn)整數(shù)類型 |
int8,unit8 | 1 | 0 | -128~127,0~255 |
int16,uint16 | 2 | 0 | -32768~32767,0~65535 |
int32,uint32 | 4 | 0 | -21億~21億,0~42億 |
int64,uint64 | 8 | 0 | |
float32 | 4 | 0.0 | |
float64 | 8 | 0.0 | 默認(rèn)浮點類型 |
complex64 | 8 | ||
complex128 | 16 | ||
rune | 4 | 0 | unicode point,int32 |
unitptr | 4,8 | 0 | 足以存指針 |
支持八進(jìn)制,十六進(jìn)制,以及科學(xué)計數(shù)法的math模塊小例子如下:
package main
import (
"fmt"
"math"
)
func main(){
//二進(jìn)制,八進(jìn)制,十六進(jìn)制以及int8長度小例子
a,b,c := 102,0132,0x33
fmt.Printf("0b%b,%#o,%#x\n",a,b,c)
fmt.Println(math.MinInt8,math.MaxInt8)
//浮點數(shù)小例子:要注意小數(shù)位的精度
var d float32 = 12.34141592777
var e float64 = 12.344566346516346145453453454546562111
var f float32 = 12.6
fmt.Println(d,e,f)
fmt.Printf("%v---%v----%v",d,e,f)
}
主要是特指一下的三種類型:
相比
數(shù)字,數(shù)組
等類型,引用類型具有更復(fù)雜的存儲結(jié)構(gòu),除了內(nèi)存分配之外,他們還初始化
一系列屬性,諸如指針,長度,甚至包含哈希分布,數(shù)據(jù)隊列等
內(nèi)置函數(shù)new按照指定的類型長度分配零值內(nèi)存,返回指針。并不關(guān)心類型內(nèi)部構(gòu)造和初始化方式。而引用類型則必須使用make函數(shù)創(chuàng)建,編譯器會將make轉(zhuǎn)換為目標(biāo)類型專用的創(chuàng)建函數(shù)(指令),以確保完成內(nèi)部內(nèi)存分配和相關(guān)屬性的初始化。
package main
import(
"fmt"
)
func mkslice() []int{
s : = make([]int,0,10)
s = append(s,100)
return s
}
func mkmap() map[string] int{
m := make(map[string]int)
m["a"] = 1
return m
}
func main(){
m := mkmap()
fmt.Println(m["a"])
s := mkslice()
fmt.Println(s[0])
}
new函數(shù)可以為引用類型分配內(nèi)存,但這是不完整創(chuàng)建。以字典為例,它僅僅分配了字典類型本身所需要的內(nèi)存,但沒有分配鍵值存儲的內(nèi)存,也沒有初始化散列桶等內(nèi)部屬性,因此無法正常工作.
package main
import(
"fmt"
)
func main(){
p := new(map[string]int}
m := *p
m["a"] = 1
fmt.Println(m)
隱式轉(zhuǎn)換造成的問題要遠(yuǎn)大于顯式轉(zhuǎn)換
,除了常量,別名類型以及未命名類型外,go還強(qiáng)制要求使用顯式類型轉(zhuǎn)換,加上不支持操作符重載,所以我們總是能確定語句表達(dá)的明確含義。
使用關(guān)鍵字type
定義用戶自定義數(shù)據(jù)類型,包括基于現(xiàn)有基礎(chǔ)類型的構(gòu)建,或者是結(jié)構(gòu)體,函數(shù)類型等。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。