You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Golang中可使用|符号传递多个值作为函数参数?

解答

os.OpenFile的第二个参数flag本质是位掩码类型的整数,设计上就是用来同时传递多个打开模式的,具体逻辑如下:

  • Go标准库的os包预先定义了一系列文件打开模式常量,这些常量本身都是合法的int类型值,每个常量对应二进制表示中独立的一位为1,分别控制不同的打开行为:
    • os.O_APPEND:写入操作自动追加到文件末尾
    • os.O_CREATE:如果目标文件不存在就自动创建
    • os.O_WRONLY:以只写模式打开文件
  • 代码中使用的|是按位或运算符,由于每个模式常量对应的1所在的二进制位互不重叠,按位或运算之后得到的新int值会保留所有传入模式的标记,相当于同时选中多个打开模式。
  • OpenFile内部执行时会通过按位与运算逐位校验传入的flag值,判断哪些模式被启用,进而执行对应的文件打开逻辑。

举个简化的例子说明位运算的作用:假设os.O_WRONLY对应二进制0001、os.O_APPEND对应0010、os.O_CREATE对应0100,三个值做按位或运算后得到的结果是0111,函数内部把0111分别和三个常量做按位与运算,结果不为0就代表对应模式已开启。

内容的提问来源于stack exchange,提问作者akko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:36:03