0


一、Go基础知识2、iota、匿名变量与变量作用域的小细节

一、特殊常量iota

1、iota是特殊常量,可以理解为是一个可被编译器修改的常量。
2、iota中有一个计数器,会自动加1,自增类型默认是int类型。
3、如果中断了iota则必须显示恢复。参考示例二。
4、iota简化了const类型的定义。
5、每次出现const的时候,iota归零。

示例一:

const(
    err1 =iota
    err2 =iota
    err3 =iota
    err99 =iota)const(
    err1 =iota
    err2
    err3
    err99
)

运行结果:

01230123

两个const打印出来的结果都是相同的,当err2及其之后的err常量未定义时,会沿用err1的常量值iota,iota会自动递增。
示例二:

const(
    err1 =iota+1
    err2
    err3 ="haha"
    err99
    err100 =iota)

运行结果:

12 haha haha 4

为什么会出现这种结果呢?
答:因为当iota经过err3和err99时,虽然这两个都是"haha",但是实际上iota经过它们时也是会继续增加计数器的。所以整个err1到err100的iota计数是0、1、2、3、4,只是err1和err2都是iota+1所以展现出来的值是1、2。就算将err3的"haha"替换成整数50,结果也是不变的,并不会影响iota计数。

二、匿名函数

package main

import("fmt")funca()(int,bool){return0,false}funcmain(){// 匿名变量的定义var_int// 正常使用
    r, ok :=a()if ok {
        fmt.Println(r)}// 匿名变量的使用_, ok =a()if ok {return}}

注意上面这段代码,第一段r, ok := a()中,r变量使用了Println打印了,即视为定义后已使用。而第二段_, ok = a()中,代替了原来r变量的位置,因为在后续中,我们不需要使用这个_变量,所以使用匿名变量,否则r定义后未使用在Go中是会报错的。
可以理解匿名函数_其实是一个占位符。

三、变量的作用域

全局变量在任何一个函数中都能使用。
局部变量只能在自己所属的函数中使用。

if a =="aa"{
    b :="11"}
fmt.Println(b)

请注意,Println是无法成功打印b变量的,因为b只是if a == “aa” {}中的局部变量。
外部访问需要这样做:

package main

import("fmt")var my stringvar a stringfuncmain(){if a =="aa"{
        my ="dsfds"}else{
        my ="2313431"}
    fmt.Println(my)}

在局部作用域外定义变量,然后在局部作用域内赋值,这样处理就能成功打印my的值了~


本文转载自: https://blog.csdn.net/weixin_49015143/article/details/134399898
版权归原作者 风不归 所有, 如有侵权,请联系我们删除。

“一、Go基础知识2、iota、匿名变量与变量作用域的小细节”的评论:

还没有评论