go return返回值屏蔽

前言

最近需要写一个云环境的可执行程序,一般使用go语言,毕竟GC+原生运行,结合了不需要回收指针的能力和原生运行,但是在程序返回时,笔者看到一个sdk的源码懵了,返回的数据居然可以隐式返回。

准备

go return返回值屏蔽_第1张图片

go 版本

笔者看到的代码,可以明显看到返回值是没写的,go却是一个强类型语言,返回值不匹配是会报错的,那么可以推断,这个go编译器自己把返回值变量的数据返回,所以没有定义返回值变量的不能这样使用

go return返回值屏蔽_第2张图片

demo 

1. 没有任何数据的时候

func Hello() (str string, e error) {
	return
}

那么就会返回一个初始化的符合要求的值,即返回值的变量(因为返回值的变量会默认初始化一个值) 

go return返回值屏蔽_第3张图片

验证正确,空字符串+nil

2. 如果返回值不定义变量

func Hello() (string, error) {
	s, e := "", errors.New("error")
	fmt.Println(s, e)
	return
}

不可以,编译错误

go return返回值屏蔽_第4张图片

3. 如果不使用返回值定义的变量

可以,但是返回的数据是返回值变量定义的数据

func Hello() (str string, err error) {
	s, e := "123", errors.New("error")
	fmt.Println(s, e)
	return
}

返回数据 

go return返回值屏蔽_第5张图片

 4. 推断如果使用部分返回值变量

func Hello() (str string, err error) {
	s, err := "123", errors.New("error")
	fmt.Println(s, err)
	return
}

结果如下: 

go return返回值屏蔽_第6张图片

5. 全部使用返回值变量

func Hello() (str string, err error) {
	str, err = "123", errors.New("error")
	fmt.Println(str, err)
	return
}

 返回结果

go return返回值屏蔽_第7张图片

6. 部分返回值变量定义

func Hello() (str string, _ error) {
	str, err := "123", errors.New("error")
	fmt.Println(str, err)
	return
}

结果如下:

go return返回值屏蔽_第8张图片

总结

go语言一个特性,如果定义了返回值变量,那么直接使用return可以返回返回值变量的数据,如果没有修改返回值变量就使用默认初始化的值。也可以部分定义返回值变量,但是没有定义变量的返回值只能返回默认初始值。

你可能感兴趣的:(golang,golang,开发语言,后端)