Emove

  • 首页
  • 归档
  • 分类
  • 标签

  • 搜索
context 反射 channel LRU BeanDefinition JVM 装饰者模式 MyBatis 快慢指针 归并排序 链表 hash表 栈 回溯 贪心 主从复制 二分查找 双指针 动态规划 AOF RDB 规范 BASE理论 CAP B树 RocketMQ Sentinel Ribbon Eureka 命令模式 访问者模式 迭代器模式 中介者模式 备忘录模式 解释器模式 状态模式 策略模式 职责链模式 模板方法模式 代理模式 享元模式 桥接模式 外观模式 组合模式 适配器模式 建造者模式 原型模式 工场模式 单例 UML 锁 事务 sql 索引

下划线的含义

发表于 2020-10-16 | 分类于 Go | 0 | 阅读次数 50

1、下划线在import中

当导入一个包时,该包下的文件里所有init()函数都会执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是希望它执行init函数而已。这个时候就可以使用import引用该包。即使用import _ path只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。

2、下划线在代码中

package main
import ("os")

func main() {
	buf := make([]byte, 1024)
	f,_ := os.Open("/Users/****/Desktop/text.txt")
	defer f.Close()
	for {
		n,_ := f.Read(buf)
		if n == 0 {
			break
		}
	}
	os.Stdout.Write(buf[:n])
}

解释:

  1. 下划线就是忽略这个变量的意思,比如:os.Open,返回值为*os.File,error。普通写法是f,err := os.Open("..."),此时如果不需要知道返回的错误值,就可以使用f,_ := os.Open("..."),忽略error变量

  2. 占位符,意思是哪个位置应该赋给某个值,但是在程序段中不需要这个值,所以就把值赋值给下划线,意思是丢掉不要。这个编译器可以更好的优化,任何类型的单个值都可以丢给下划线。这种情况是占位用的,方法返回两个结果,而你只想要一个结果,那另一个就用_占位,而如果用变量的话,不使用,编译器是会报错的

  3. 在使用多重赋值时,使用下划线忽略某个值时,该值也叫做匿名变量(anonymous variable)。匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。

# context # 反射 # channel # LRU # BeanDefinition # JVM # 装饰者模式 # MyBatis # 快慢指针 # 归并排序 # 链表 # hash表 # 栈 # 回溯 # 贪心 # 主从复制 # 二分查找 # 双指针 # 动态规划 # AOF # RDB # 规范 # BASE理论 # CAP # B树 # RocketMQ # Sentinel # Ribbon # Eureka # 命令模式 # 访问者模式 # 迭代器模式 # 中介者模式 # 备忘录模式 # 解释器模式 # 状态模式 # 策略模式 # 职责链模式 # 模板方法模式 # 代理模式 # 享元模式 # 桥接模式 # 外观模式 # 组合模式 # 适配器模式 # 建造者模式 # 原型模式 # 工场模式 # 单例 # UML # 锁 # 事务 # sql # 索引
new和make
协程
  • 文章目录
  •   |  
  • 概览
林亦庭

林亦庭

less can be more

87 文章
11 分类
54 标签
RSS
Github
Creative Commons
© 2021 林亦庭
粤ICP备20029050号