一、特殊常量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
)

运行结果

0 1 2 3
0 1 2 3

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

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

运行结果

1 2 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"
)

func a() (int, bool) {
	return 0, false
}

func main() {
	// 匿名变量定义
	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 string
var a string

func main() {
	if a == "aa" {
		my = "dsfds"
	} else {
		my = "2313431"
	}
	fmt.Println(my)
}

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

原文地址:https://blog.csdn.net/weixin_49015143/article/details/134399898

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45212.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注