真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Golang中的類型和變量以及常量的示例分析-創(chuàng)新互聯(lián)

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ò)

 代碼如下:


(expression)


示例

代碼如下:


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)景需求。


本文名稱:Golang中的類型和變量以及常量的示例分析-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/joehj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部