Go- 函数参数和返回值
发布于: 1 小时前

Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
函数形式
函数参数按值传递和按引用传递
命名的返回值
改变外部变量的值
代码示例可以直接运行
package main
import ( "fmt")
/* func1可采用以下三种声明方式*///func func1(a int, b int) (x int, y int, z int) {//func func1(a, b int) (x, y, z int) { // a, b为函数形参func func1(a, b int) (int, int, int) { // 非命名返回值,糟糕的实现 return a, b, 3}
/* 即使返回值只有一个参数,也要用()括起来func func2() x int { // 编译错误:syntax error: unexpected int after top level declarationfunc func2() int { // 编译错误:missing return at end of function fmt.Println("func2")}*/
func func3(p *int) { fmt.Println(p) // 输出:0xc00000a0d0---num的地址 fmt.Println(*p) // 输出:10 *p = 100 fmt.Println(*p) // 输出:100}
func func4(a int) (x int, y int) { x = a * 2 y = a * 3 return}
func func5(a int) (x int, y int) { m := a * 2 n := a * 3 return m, n}
func func6(a int) (x int, y int) { x = a * 2 y = a * 3 return x, y}
func multiply(a, b int, result *int) { // 使用指针改变result的值,函数不再需要返回值 *result = a * b}
func main() { /* 函数形式 函数返回值的格式和接收变量的个数必须相等,否则编译错误 */ a, b, c := func1(1, 2) // 1, 2为函数实参 fmt.Println(a, b, c)
/* 按值传递 Go 默认使用按值传递参数,即传递参数的副本 以上func1 func2的调用即是按值传递参数 */
/* 按引用传递 按引用传递即传递参数的地址 */ var num int = 10 fmt.Println(&num) // 输出:0xc00000a0d0---num的地址 fmt.Println(num) // 输出:10 func3(&num) fmt.Println(num) // 输出:100
/* 命名的返回值 */ x, y := func4(2) fmt.Println(x, y)
x, y = func5(2) fmt.Println(x, y)
x, y = func6(2) fmt.Println(x, y)
_, y = func6(100) // 空白符将第一个返回值丢弃 fmt.Println(y)
/* 改变外部变量的值 */ var result int multiply(3, 5, &result) fmt.Println(result)}复制代码
划线
评论
复制
发布于: 1 小时前阅读数: 2
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/91e25ef30cada8dcaebd9ada7】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介











评论