Go- 函数参数和返回值
发布于: 1 小时前
![Go- 函数参数和返回值](https://static001.geekbang.org/infoq/92/925d4edba5f2cd7ef9b5df990d1c5934.jpeg)
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 declaration
func 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】协议,转载请保留原文出处及本版权声明。
![用户头像](http://static001.geekbang.org/account/avatar/00/13/11/3e/925aa996.jpg?x-oss-process=image/resize,w_200,h_200)
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介
评论