当前位置:网站首页> 一文了解Go语言中的函数与方法的用法
一文了解Go语言中的函数与方法的用法
2022-07-05 16:42:00 【1024问】
函数定义语法
函数定义示例
无返回值函数
单一返回值函数
多返回值函数
方法(Method)定义
方法(Method)示例
基本类型
结构体类型
函数定义语法与大部分语言一致,Go语言中的函数定义与其他语言基本一致
func function_name(Parameter-list) { // function body...}func function_name(Parameter-list) Return-Type { // function body...}func function_name(Parameter-list) (Multiple Return-Types){ // function body..}func: 函数定义关键字
function_name: 函数名称,Go语言主要使用camel-case(驼峰)命名的方式,还根据函数的性质,用首字母大小写区分作用,具体会在后面专门的章节讲解Go语言的规范
Parameter-list: 参数列表,如果没有可以忽略
Return-Type/Multiple Return-Types: 返回值的类型,即return返回值的类型,这里特别将三种形式进行了区分:
无返回值/单一返回值/多返回值
另外两种的细小的区别在于括号的使用,单一返回类型一般不再添加括号,而多返回值则需要添加括号
另外为了美观,参数列表后面的括号,建议与返回类型之间有一个空格
函数定义示例无返回值函数func HelloFunc() { fmt.Println("Hello, World")}单一返回值函数本示例中演示了参数定义方法和返回值类型定义方法
func HelloFunc(msg string) string { return "Hello, " + msg}多返回值函数第二个返回值的类型通常用于回传错误,这样方便程序进行异常处理
func HelloFunc(msg string) (string, error) { return "Hello, " + msg, nil}我们再来看一下完整的代码实现,主函数中调用HelloFunc时,也需要两个变量接收相应的值
package mainimport "fmt"func HelloFunc(msg string) (string, error) { return "Hello, " + msg, nil}func main() { printString, err := HelloFunc("World") if err == nil { fmt.Println(printString) }}方法(Method)定义Go语言中并没有类,所以在Go语言中提供了一种类似函数定义的方法定义,通过在函数名称前增加Reciever类型,实现一种类似类中方法的定义,方法可以使用Reciver的属性。我们来看一下语法:
func (Reciever-Name Type) function_name(Parameter-list) (Multiple Return-Types){ // function body..}由于大部分定义内容与上述函数定义相同,这里就不再赘述,只介绍一下新增的部分:
Reciever-Name:类型必须是自定义类型,不能是内置的int, string等,使用的话,在编译阶段就会报错
方法(Method)示例基本类型我们来看一个通过基本类型实现的方法,这里使用到了一个未曾学习到的知识点——自定义类型type,后面还会详细讲解,不用在此处纠结。这句含义就是通过自定义类型mystring再次定义的变量,本质上与string同一类型。
type mystring string这里注意我们的函数定义,在函数名前,多了(msg mystring)的定义,而在函数体内,我们也可以直接使用msg
func (msg mystring) HelloFunc() { str := "Hello, " + msg fmt.Println(str)}而在main函数中进行调用时,与上面的函数调用不同,我们直接使用调用mymsg的方法HelloFunc,实现了与上面例子类似的方法
var mymsg mystringmymsg = "World"mymsg.HelloFunc()完整代码如下所示
package mainimport "fmt"type mystring stringfunc (msg mystring) HelloFunc() { str := "Hello, " + msg fmt.Println(str)}func main() { var mymsg mystring mymsg = "World" mymsg.HelloFunc()}结构体类型其实从各个项目的源代码来看,方法还是更多的与结构体(struct)和接口(interface)一起使用,这些都会在后面进行详细讲解,这里只需要了解即可。这里介绍一个简单的例子,我们来计算长方形的面积。
定义了一个结构体rect,其中包含长和宽两个属性
计算面积的方法area(),Reciver定义为结构体类型,这样方法体内,就可以使用长和宽计算面积
主函数中,定义了一个结构体,并且初始化长和宽分别为3和4
调用自定义结构体的r.area()完成面积计算
package mainimport "fmt"type rect struct { width float64 height float64}func (r rect) area() float64 { return r.width * r.height}func main() { r := rect{3, 4} rectArea := r.area() fmt.Printf("Rect area is %v\n", rectArea)}到此这篇关于一文了解Go语言中的函数与方法的用法的文章就介绍到这了,更多相关Go语言 函数 方法内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
- 国产芯片产业链两条路齐头并进,ASML真慌了而大举加大合作力度
- It is forbidden to copy content JS code on the website page
- The first lesson of EasyX learning
- 调查显示传统数据安全工具面对勒索软件攻击的失败率高达 60%
- Embedded-c Language-1
- [Web attack and Defense] WAF detection technology map
- Learnopongl notes (II) - Lighting
- [Jianzhi offer] 63 Maximum profit of stock
- 外盘期货平台如何辨别正规安全?
- winedt常用快捷键 修改快捷键latex编译按钮
猜你喜欢

Embedded-c Language-1

机器学习01:绪论

调查显示传统数据安全工具面对勒索软件攻击的失败率高达 60%

DenseNet

npm安装

The two ways of domestic chip industry chain go hand in hand. ASML really panicked and increased cooperation on a large scale

【729. 我的日程安排錶 I】
MYSQL group by 有哪些注意事项

Embedded UC (UNIX System Advanced Programming) -2

激动人心!2022开放原子全球开源峰会报名火热开启!
随机推荐
Jarvis OJ shell traffic analysis
NPM installation
高数 | 旋转体体积计算方法汇总、二重积分计算旋转体体积
机器学习01:绪论
Embedded-c Language-4
【剑指 Offer】66. 构建乘积数组
張平安:加快雲上數字創新,共建產業智慧生態
兰空图床苹果快捷指令
PHP人才招聘系统开发 源代码 招聘网站源码二次开发
Is it safe to open futures accounts online? Will there be more liars online? Doesn't feel very reliable?
China Radio and television officially launched 5g services, and China Mobile quickly launched free services to retain users
C# TCP如何限制单个客户端的访问流量
阈值同态加密在隐私计算中的应用:解读
Games101 notes (I)
【机器人坐标系第一讲】
【性能测试】jmeter+Grafana+influxdb部署实战
CMake教程Step1(基本起点)
Read the basic grammar of C language in one article
启牛商学院股票开户安全吗?靠谱吗?
Judge whether a string is a full letter sentence