当前位置: 首页 > 科技观察

Go语言中的变量和常量一样

时间:2023-03-16 17:31:50 科技观察

variablesGo语言中的变量声明与大多数语言类似。变量是通过var关键字来声明的,但是go语言是静态类型语言,在声明变量的时候需要指定它的类型。以下代码的意思是声明一个类型为“string”的“name”变量,并为其赋值“”Shenfq”。varnamestring="Shenfq"如果我??们不赋值,这个变量会得到一个默认值。下面介绍go语言中的一些基本类型及其默认值。多变量声明上面介绍了go语言使用var关键字来声明单个变量。我们也可以使用var关键字来声明多个变量://声明两个相同类型的变量varfirstName,lastNamestring//同时给两个变量赋值firstName,lastName="frank","shen"//declaretwovariablesasdifferenttypesvar(ageintnamestring)//同时给两个变量赋值age,name=25,"Shenfq"类型推导如果我们在变量声明阶段,给变量赋值。这时候我们可以直接省略变量类型,因为go在编译过程中会根据分配的初值推导出其类型。varage=25fmt.Printf("agetypeis:%T",age)//agetypeis:intvar(age=18name="Shenfq")fmt.Printf("agetypeis:%T",age)//age类型为:intfmt.Printf("nametypeis:%T",name)//name类型为:stringshortformat前面介绍变量声明的时候,如果给定初始值,go可以在编译阶段推导。在这种情况下,go提供了一种更简单的方法来通过:=来声明变量,并且可以省略var关键字。funcmain(){age:=25name:="Shenfq"}//多个变量也可以同时赋值在函数体中,不能用于全局变量的声明。//??不能全局声明变量age这种方式,name:=25,"Shenfq"//只能在函数体funcmain(){age,name:=25,"Shenfq"fmt.printf("Thetypeofageis:%T",age)fmt.Printf("Thetypeofnameis:%T",name)}warning??注意2已经声明的变量不能使用以下方法赋值:=。funcmain(){varageintage:=25}声明过的变量只能通过=来赋值。funcmain(){varageintage=25}全局变量和局部变量简单来说,在函数体外部声明的变量是全局变量,在函数体内部声明的变量是局部变量。如果一个局部变量被声明但没有被使用,它就不会被编译。funcmain(){varageint}然而,全局变量可以声明但不能使用。varageintfuncmain(){name:="Shenfq"//fmt.Printf("agetypeis:%T",age)fmt.Printf("nametypeis:%T",name)}在上面的代码中,我们声明添加了age全局变量,但是没有使用,可以正常编译。空白标识符前面说过,Go给变量赋值的时候,可以一次给多个变量赋值。同时,一个go函数在返回的时候,也可以一次返回多个结果。funcdouble(numint)(string,int){varerrstringifnum<0{err="numcannotbenegative"returnerr,-1}result:=num*2returnerr,result}上面我们实现了一个double函数,接受一个int类型的变量(num)返回两个值,一个是异常提示(字符串类型),一个是num*2的结果,如果num<0,则提示num不能为负数。funcmain(){err,res:=double(10)iferr!=""{fmt.Printf(err)}else{fmt.Printf("Theresultis:%v",res)}}如果,我们不tcareerr,只想输出执行double后的结果。funcmain(){err,res:=double(10)fmt.Printf("result:%v",res)}运行后,我们得到一个编译错误,err变量没有被使用。这时候就需要用到空白标识符(_)。funcmain(){_,res:=double(10)fmt.Printf("Theresultis:%v",res)}我们可以通过_接受err值,这个地方的值会被丢弃,它会顺利通过编译。常量常量是不会改变的变量,一旦声明它就不会改变。在go语言中,常量的声明只需要将变量声明中的var关键字替换为const关键字即可。//隐式类型定义constPI=3.14//显式类型定义constPI2float=3.14多个常量声明类似于变量,常量也支持一次声明多个。funcmain(){const(PI=3.14PI2=3.14)fmt.Printf("结果是:%v\n",PI)fmt.Printf("结果是:%v\n",PI2)}如果有多条语句使用常量时,如果一个常量没有被赋值,默认会与前一个常量的值同步。下面代码的运行结果和上面的代码是一致的。funcmain(){const(PI=3.14PI2)fmt.Printf("结果为:%v\n",PI)fmt.Printf("结果为:%v\n",PI2)}有一个特殊的称为iota的常量的特殊常量将在常量赋值过程中累积。funcmain(){const(A=iotaBC)fmt.Println(A,B,C)//012}在iota的累加过程中,可以中断。funcmain(){const(A=iotaBC="Shenfq"DE)fmt.Println(A,B,C,D,E)}这时候的输出结果是:这是因为我们把常量C改成了字符串"shenfq”,常量D和E默认会和前面的常量同步,所以会得到上面的结果。但是iota支持恢复累加,只需要在指定位置重新赋值iota一次即可。funcmain(){const(A=iotaBC="Shenfq"D=iota//恢复累加状态E)fmt.Println(A,B,C,D,E)}由于C占据了2原来的位置,所以恢复了D之后也是从3开始。iota的累加特性特别像我们在其他语言中使用的枚举,所以在go语言中,我们可以直接使用iota作为枚举。typeButtonTypeintconst(DefaultButtonType=iotaPrimaryWarningError)