当前位置:网站首页> 一文了解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语言 函数 方法内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
- Jarvis OJ Flag
- [first lecture on robot coordinate system]
- Timestamp strtotime the day before or after the date
- [Jianzhi offer] 66 Build product array
- Is it safe to open a securities account by mobile phone? Detailed steps of how to buy stocks
- [729. My Schedule i]
- Zhang Ping'an: accelerate cloud digital innovation and jointly build an industrial smart ecosystem
- Wsl2.0 installation
- Use byte stream to read Chinese from file to console display
- 一个满分的项目文档是如何书写的|得物技术
猜你喜欢
Judge whether a string is a full letter sentence
Iphone14 with pill screen may trigger a rush for Chinese consumers
[first lecture on robot coordinate system]
【Web攻防】WAF检测技术图谱
干货!半监督预训练对话模型 SPACE
Deeply cultivate 5g, and smart core continues to promote 5g applications
Games101 notes (III)
ternary operator
WSL2.0安装
Judge whether a number is a prime number (prime number)
随机推荐
Zhang Ping'an: accelerate cloud digital innovation and jointly build an industrial smart ecosystem
thinkphp模板的使用
机器学习02:模型评估
Jarvis OJ webshell analysis
浏览器渲染原理以及重排与重绘
Iphone14 with pill screen may trigger a rush for Chinese consumers
33:第三章:开发通行证服务:16:使用Redis缓存用户信息;(以减轻数据库的压力)
【beanshell】数据写入本地多种方法
Solution of vant tabbar blocking content
Embedded UC (UNIX System Advanced Programming) -1
CMake教程Step1(基本起点)
[729. My Schedule i]
WR | 西湖大学鞠峰组揭示微塑料污染对人工湿地菌群与脱氮功能的影响
外盘期货平台如何辨别正规安全?
时间戳strtotime前一天或后一天的日期
【剑指 Offer】66. 构建乘积数组
Use JDBC technology and MySQL database management system to realize the function of course management, including adding, modifying, querying and deleting course information.
什么是ROM
ECU introduction
[61dctf]fm