关于golang中下划线(_)的语义说明

在阅读k8s代码的过程中,经常可以看到下划线出现在不同的地方,有时候我们并不清楚下划线代表的具体含义是什么,有什么作用,但是又会经常选择性的忽略这些细节,实际上却非常重要。
下面我来总结一下下划线(_)出现的三种场合

用在返回值

这个应该是最简单的用途,比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,这样的话代码可以这样写:

v1, v2, _ := function(...)

用在变量(特别是接口断言)

例如我们定义了一个接口(interface):

type Foo interface {
     Say()
}

然后定义了一个结构体(struct)

type Dog struct {
}

然后我们希望在代码中判断Dog这个struct是否实现了Foo这个interface

var _ Foo = Dog{}

上面用来判断Dog是否实现了Foo, 用作类型断言,如果Dog没有实现Foo,则会报编译错误

用在import package

假设我们在代码的import中这样引入package:

import _ "test/foo"

这表示呢在执行本段代码之前会先调用test/foo中的初始化函数(init),这种使用方式仅让导入的包做初始化,而不使用包中其他功能
例如我们定义了一个Foo struct,然后对它进行初始化

package foo
import "fmt"
type Foo struct {
        Id   int
        Name string
}
func init() {
        f := &Foo{Id: 123, Name: "abc"}
        fmt.Printf("init foo object: %v\n", f)
}

然后在main函数里面引入test/foo

package main
import (
        "fmt"
        _ "test/foo"
)
func main() {
        fmt.Printf("hello world\n")
}

运行结果如下

init foo object: &{123 abc}
hello world

我们可以看到:在main函数输出"hello world"之前就已经对foo对象进行初始化了!

时间: 2024-10-29 17:38:45

关于golang中下划线(_)的语义说明的相关文章

Python中下划线的使用方法

这篇文章主要介绍了Python中下划线的使用方法,是为python编程学习中的基本知识,需要的朋友可以参考下     本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用: 1.在解释器中:在这种情况下,"_"代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. ? 1

Python中下划线的使用方法_python

本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情况下,会在以下3种场景中使用: 1.在解释器中:在这种情况下,"_"代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): File "&l

PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法_php技巧

最近在做公司项目的时候,发现一个奇怪的问题,递交一个正常表单,竟然发现不能正常获取到递交的值,这一发现,不免让我开始的时候一头雾水,开始的时候一度认为是我的服务有问题,不能正常的写入数据库,后来侦测SQL语句发现,原来问题竟然出现在获取数据上,获取到的数据竟然都是空的,后来一调试发现,原来递交到后端的所有变量,都已经不是预期中的变量,竟然被PHP转化了. 提供测试代码如下: 复制代码 代码如下: <html> <head> <title>测试表单提交</title

XStream的bug,比如在定义别名中的下划线“_”转换为xml后会变成“__”

问题描述 XStream的bug,比如在定义别名中的下划线"_"转换为xml后会变成"__"比如:XStreamstream=newXStream();stream.alias("person",Person.class);Stringmessage=stream.toXML(person);如果person类中有个字段为per_name有_转换为XML后会出现__<per__name></per__name>这个需要怎么

golang下划线(underscore) 总结

一.概述 "_" 可以简单理解为赋值但以后不再使用,在golang中使用的比较多,使用的场合也很多,稍作总结: 二.场景 1.import 1 import _ "net/http/pprof" 引入包,会调用包中的初始化函数,这种使用方式仅让导入的包做初始化,而不适用包中其他功能: 2.用在返回值 1 for _, v := range Slice {} 2 _, err := func() 表示忽略某个值.单函数有多个返回值,用来获取某个特定的值 3.用在变量

javascript正则匹配汉字、数字、字母、下划线_基础知识

javascript正则检测只含有汉字.数字.字母.下划线不能以下划线开头和结尾 遇到一个用户名检测的的问题,查了一下,总结例子如下: 复制代码 代码如下: var reg = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$/;if (!reg.test(实际取值的字符串)) {    alert('请输入5-24位字符:支持中文.英文.数字."_",推荐使用中文');}

Word中下划线怎么打出来

一.设置字符的下划线 在设置字符下划线时,一般应选中文字,如果先单击下划线按钮,再键入字符,那么在没有取消下划线之前,所键入的文字都会有添加下划线. 可以使用以下方法设置字符的下划线. 使用功能区中的下划线按钮 选中文字后,单击"开始"功能区中的下划线按钮,就会把选定字符加上默认的下划线格式.如果单击下划线按钮右侧的三角,可以打开一个简单下划线样式的选择,如下图所示,在这里可以选择常用的下划线样式.如果列出的下划线样式都不能满足用户的需求,还可以单击"其他下划线"命

Scala中下划线的用途

存在性类型: def foo(l: List[Option[_]]) = def f(m: M[_]) 高阶类型参数: case class A[K[_],T](a: K[T]) def f[M[_]] 临时变量: val _ = 5 临时参数: List(1, 2, 3) foreach { _ => println("Hi") } //List(1, 2, 3) foreach { t => println("Hi") } 通配模式: Some(5)

div+css网页布局中下划线text-decoration使用教程

常见和常用的下划线样式 1.文字带下划线的方式显示 使用html中<u>标签即可对加u标签的文字加下划线   但是注意的时候u标签是以<u>开始</u>结束的一对标签,<u>我是被加下划线的</u> 2.超链接文字下划线-css 超链接详细介绍 我们常常需要让带超链接的文字,以有下划线方式显示,而鼠标放上去下划线不显示方式显示带链接的文字,接下来我们通过css对超链接下划线设置 使用代码text-decoration,可进css手册查看text-