Golang中的類型和變量以及常量的示例分析,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
在東區(qū)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),東區(qū)網(wǎng)站建設(shè)費(fèi)用合理。基本類型
1.基本類型列表
代碼如下:
類型 長(zhǎng)度 說(shuō)明
bool 1 true/false,默認(rèn)false, 不能把非0值當(dāng)做true(不用數(shù)字代表true/false)
byte 1 uint8 別名
rune 4 int32別名。 代表一個(gè)unicode code point
int/unit 一來(lái)所運(yùn)行的平臺(tái),32bit/64bit
int8/uint8 1 -128 ~ 127; 0 ~ 255
int16/uint16 2 -32768 ~ 32767; 0 ~ 65535
int32/uint32 4 -21億 ~ 21億, 0 ~ 42億
int64/uint64 8
float32 4 精確到7位小數(shù),相當(dāng)于c的float
float64 8 精確到15位小數(shù),相當(dāng)于c的double
complex64 8
complex128 16
uintptr 足夠保存指針的32位、64位整數(shù),指針(可以存指針的整數(shù)型)
array 值類型,數(shù)組
struct 值類型,結(jié)構(gòu)體
string 值類型,字符串類型,常用
slice 引用類型,切片
map 引用類型,字典
channel 引用類型,通道
interface 接口類型,接口
function 函數(shù)類型,函數(shù)
2.類型轉(zhuǎn)換
不支持隱式類型轉(zhuǎn)換,必須進(jìn)行顯式類型轉(zhuǎn)換
轉(zhuǎn)換只發(fā)生在兩種互相兼容的類型之間: 各類int不允許相互賦值或操作,不然會(huì)在編譯時(shí)報(bào)錯(cuò)
代碼如下:
示例
代碼如下:
package main
import "fmt"
func main(){
a := 0x1234
b := 1234.56
c := 256
fmt.Printf("%x\n", uint8(a))
fmt.Printf("%d\n", int(b))
fmt.Printf("%f\n", float64(c))
}
結(jié)果
代碼如下:
34
1234
256.000000
3.類型別名
代碼如下:
type t_str string
var b t_str = "a str"
4.類型默認(rèn)值
聲明不賦值,類型零值,非空值,而是聲明后的默認(rèn)值
代碼如下:
bool: false
integers: 0
floats: 0.0
string: ""
pointers,functions,interfaces,slices,channels,maps: nil
保留字
代碼如下:
break case chan const continue
default defer else fallthrough for
func go goto if import
interface map package range return
select struct switch type var
變量
1.變量聲明
代碼如下:
//第一種,指定變量類型,聲明后若不賦值,使用默認(rèn)值
var v_name v_type
v_name = value
//第二種,根據(jù)值自行判定變量類型
var v_name = value
//第三種,省略var, 注意 :=左側(cè)的變量不應(yīng)該是已經(jīng)聲明過(guò)的,否則會(huì)導(dǎo)致編譯錯(cuò)誤.
v_name := value
e.g.
var a int = 10
var b = 10
c : = 10
示例:
代碼如下:
package main
var a = 1234
var b string = "hello"
var c bool
func main(){
println(a, b, c)
}
結(jié)果:
代碼如下:
1234 hello false
2.多變量聲明:
代碼如下:
//類型相同多個(gè)變量, 非全局變量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要顯示聲明類型,自動(dòng)推斷
vname1, vname2, vname3 := v1, v2, v3 //出現(xiàn)在:=左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過(guò)的,否則會(huì)導(dǎo)致編譯錯(cuò)誤
//類型不同多個(gè)變量, 全局變量, 局部變量不能使用這種方式
var (
vname1 v_type1
vname2 v_type2
)
示例:
代碼如下:
package main
var x, y int
var ( //這種只能出現(xiàn)在全局變量中,函數(shù)體內(nèi)不支持
a int
b bool
)
var c, d int = 1, 2
var e, f = 123, "hello"
//這種不帶聲明格式的只能在函數(shù)體中出現(xiàn)
//g, h := 123, "hello"
func main(){
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
}
結(jié)果:
代碼如下:
0 0 0 false 1 2 123 hello 123 hello
注意:
A.多變量賦值時(shí),將先行計(jì)算所有左側(cè)變量的值,再進(jìn)行賦值
代碼如下:
i := 0
i, l[i] = 1, 2
//get i = 1, l[0] = 2
sc[0], sc[0] = 1, 2
//get sc[0] = 2
B.垃圾桶_
代碼如下:
func test()(int, string) {
return 123, "abc"
}
a, _ := test()
C.已聲明但是沒(méi)有使用的變量會(huì)在編譯階段報(bào)錯(cuò),較Python 更為嚴(yán)格
常量
常量可以是字符,字符串,布爾或數(shù)字
常量賦值是編譯期的行為
1.常量聲明
在編譯階段就能確定下來(lái)的值,在運(yùn)行時(shí)無(wú)法改變?cè)撝?br/>常量可以定義為數(shù)值、布爾值或字符串等類型
復(fù)制代碼 代碼如下:
const constantName = value
const Pi float32 = 3.1415926
const c_name [type] = value
const c_name1, c_name2 = value1, value2
const (
c_name1 = vluae1
c_name2 = value2
)
=右側(cè),必須為常量或常量表達(dá)式,如果使用到了函數(shù),必須為內(nèi)置函數(shù)(編譯期行為)
const i = 10000
說(shuō)明:
代碼如下:
A.常量必須是編譯期能確定的Number(char/integer/float/complex)、String和bool
B.在定義常量數(shù)組時(shí),如果不提供初始化值,則表示與上行常量類型,值,完全相同
const (
a = "abc"
b
)
//則 b = "abc"
C.常量可以用len(), cap(), unsafe.Sizeof()常量計(jì)算表達(dá)式的值. 常量表達(dá)式中,函數(shù)必須是內(nèi)置函數(shù),否則編譯不過(guò)
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
}
結(jié)果: abc 3 16
枚舉
iota,特殊常量,可以認(rèn)為是一個(gè)可以被編譯器修改的常量
在每一個(gè)const關(guān)鍵字出現(xiàn)時(shí),被重置為0,然后再下一個(gè)const出現(xiàn)之前,每出現(xiàn)一次iota,其所代表的數(shù)字會(huì)自動(dòng)增加1
不提供初始值,則表示使用上一行的表達(dá)式
1.聲明:
iota生成從0開(kāi)始的自動(dòng)增長(zhǎng)枚舉值,意味著,多一個(gè)枚舉值,iota+=1,無(wú)論是否使用
基本語(yǔ)法
代碼如下:
const (
a = 1
b = 2
)
const (
a = iota //0
b //1
c //2
)
const (
_ = iota
a //1
b //2
)
iota用法
代碼如下:
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //獨(dú)立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢復(fù)計(jì)數(shù)
i //8
)
}
const (
x = iota // 0
y = iota // 1
z = iota // 2
w //省略,默認(rèn)和前面一樣字面值 w = iota, 即3
)
const v = iota //遇到const關(guān)鍵字,iota重置
注意: 每行的變量數(shù)必須一致 const ( A, B = iota, iota C, D E, F )
復(fù)制代碼 代碼如下:
func main() {
println(A,B,C,D,E,F)
}
//結(jié)果: 0 0 1 1 2 2 【各自增長(zhǎng)】
運(yùn)算符
Go運(yùn)算符全部是從左到右結(jié)合的
不支持運(yùn)算符重載
代碼如下:
優(yōu)先級(jí) 運(yùn)算符 說(shuō)明
高 * / % << >> & &^(AND NOT)
+ - ! ^
== != < <= > >=
<- channel運(yùn)算符
&&
低 ||
在go中,++ --為語(yǔ)句,而非表達(dá)式
代碼如下:
package main
func main(){
i := 1
i ++
println(i)
b := i
println(b)
//syntax error: unexpected ++, expecting semicolon or newline or }
//c := i++
//意味著, ++/--不能出現(xiàn)在等號(hào)右側(cè)
}
指針
Go保留了指針, *T表示T對(duì)應(yīng)的指針類型
如果包含包名, 則應(yīng)該是 *.T
代表指針類型的符號(hào) '*' 總是和類型放在一起,而不是緊挨著變量名
同樣支持指針的指針**T
1.聲明
代碼如下:
var a, b *int
2.說(shuō)明
代碼如下:
操作符&取變量地址,用*透過(guò)指針變量間接訪問(wèn)目標(biāo)對(duì)象
默認(rèn)值是nil,沒(méi)有NULL常量
不支持指針運(yùn)算,不支持‘->'預(yù)算福,直接'.'選擇符操作指針目標(biāo)對(duì)象成員
可以在unsafe.Pointer和任意類型指針間進(jìn)行轉(zhuǎn)換
可以將unsafe.Pointer轉(zhuǎn)換為uintptr,然后變相做指針運(yùn)算,uintptr可以轉(zhuǎn)換為整數(shù)
3.示例
代碼如下:
package main
import "fmt"
type User struct {
Id int
Name string
}
func main(){
i := 100
var p *int = &i //取地址
println(*p) //取值
up := &User{1, "Jack"}
up.Id = 100 //直接取只針對(duì)想成員
fmt.Println(up)
u2 := *up //拷貝對(duì)象
u2.Name = "Tom"
fmt.Println(up, u2)
}
4.結(jié)果:
代碼如下:
100
&{100 Jack}
&{100 Jack} {100 Tom}
分組聲明
代碼如下:
import (
"fmt"
"os"
)
const (
i = 100 //首行必須有常量表達(dá)式
pi = 3.1415
)
var ( //全局變量可用,函數(shù)體內(nèi)不支持
i int
pi float32
)
看完上述內(nèi)容,你們掌握Golang中的類型和變量以及常量的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。