go中函数的调用机制

一 图解函数调用

程序员调用方法:给方法必要的输入,方法返回结果。

二 函数调用过程实战

1 传入一个数+1

说明

a 在调用一个函数时,会给该函数分配一个新的空间,编译器会通过自身的处理让这个新的空间和其它的栈的空间区分开来。

b 在每个函数对应的栈中,数据空间是独立的,不会混淆。

c 当一个函数调用完毕后,程序会销毁这个函数对应的栈空间。

2 计算两个数,并返回结果

代码

package main

import (
   "fmt"
)

// 一个函数 getSum
func getSum(n1 int, n2 int) int {
   sum := n1 + n2
   fmt.Println("getSum sum = ", sum) // 30
   //当函数有return语句时,就是将结果返回给调用者
   //即谁调用我,就返回给谁
   return sum
}

func main() {
   sum := getSum(10, 20)
   fmt.Println("main sum = ", sum) // 30
}

测试

getSum sum =  30
main sum =  30

三 return 语句

1 基本语法

func 函数名 (形参列表) (返回值列表){
    执行语句...
    return 返回值列表
}

2 说明

a 如果返回多个值,在接收时,希望忽略某个返回值,则使用_符号表示占位忽略。

b 如果返回值只有一个,(返回值列表)可以不写()。

四 实战

1 需求

计算两个数的和和差,并返回结果。

2 代码

package main

import "fmt"

// 计算两个数的和和差,并返回结果
func getSumAndSub(n1 int, n2 int) (int, int) {
   sum := n1 + n2
   sub := n1 - n2
   return sum, sub
}

func main() {
   //调用getSumAndSub
   res1, res2 := getSumAndSub(1, 2) //res1 = 3 res2 = -1
   fmt.Printf("res1=%v res2=%v\n", res1, res2)
   //希望忽略某个返回值,则使用 _ 符号表示占位忽略
   _, res3 := getSumAndSub(3, 9)
   fmt.Println("res3=", res3)
}

3 测试

res1=3 res2=-1
res3= -6

4 说明

希望忽略某个返回值,则使用 _ 符号表示占位忽略。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Golang提供了一种称为"Cgo"的机制,允许直接调用C语言函数。通过Cgo,你可以在Golang代码调用C语言函数,并在C和Golang之间传递数据。 要在Golang调用C语言函数,首先需要在Golang代码导入`"C"`包。然后,可以使用特殊的`C.`前缀来调用C语言函数。 在调用C语言函数时,需要注意以下几点: 1. 函数声明:在Golang代码,需要使用`//export`注释来声明要导出的C语言函数。这样,这些函数才能在Golang调用。 2. 数据类型转换:Golang和C语言的数据类型可能存在差异,因此需要进行适当的数据类型转换。 3. 内存管理:在涉及到内存分配和释放的操作时,需要小心处理内存管理问题,以避免内存泄漏或访问无效内存。 下面是一个简单的示例,展示了如何在Golang调用C语言函数: ```go package main /* #include <stdio.h> void helloFromC() { printf("Hello from C!\n"); } */ import "C" func main() { C.helloFromC() } ``` 在上述示例,我们在Golang代码声明了一个要导出的C函数`helloFromC()`,然后通过`C.helloFromC()`来调用它。 需要注意的是,Cgo机制需要依赖C编译器来编译相关代码,所以在构建Golang代码时,需要使用`go build`或`go run`命令,而不是直接使用`go`命令。另外,Cgo还提供了更高级的功能,例如在Golang使用C语言的数据结构、调用C语言库等。更多关于Cgo的详细信息可以参考Golang官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值