第十课 go语言函数
1 内置函数
len() 函数可以接受不同类型参数并返回该类型的长度。
如果我们传入的是字符串则返回字符串的长度,
如果传入的是数组,则返回数组中包含的元素个数。
2 自定义函数
// 函数返回单个值
func Max(a, b int) int {
if a > b {
return a
} else {
return b
}
} // 函数返回多个值
func Swap(a, b int) (int, int) {
return b, a
}
3 值传递 和 引用传递
var aa, bb int = ,
Swap2(&aa, &bb) fmt.Println(aa)
fmt.Println(bb) func Swap2(a *int, b *int) () {
var temp int
temp = *a
*a = *b
*b = temp
}
4 函数方法
方法就是一个包含了接受者的函数(注意: 在go中,函数和方法是不一样的!!),接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集
package main import "fmt" type Circle struct { //定义结构体
radius float64
} func main() {
var c Circle
c.radius = 10.00
fmt.Println("Area of c is ", c.getArea()) // 可以直接调用结构体的方法 } func (c Circle) getArea() float64 { // 这个方法是结构体的方法
return 3.14*c.radius*c.radius
}
5 函数闭包
6 接触到go之前,一般认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。
函数:
首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例
func main()
{
fmt.Println("Hello go")
}
在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。
方法:
package main
import "fmt"
type myint int
//乘2
func (p *myint) mydouble() int {
*p = *p * 2
return 0
}
//平方
func (p myint) mysquare() int {
p = p * p
fmt.Println("mysquare p = ", p)
return 0
}
func main() {
var i myint = 2
i.mydouble()
fmt.Println("i = ", i)
i.mysquare()
fmt.Println("i = ", i)
}
方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型(上面的type myint int就是重定义基本类型)。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。
第十课 go语言函数的更多相关文章
- python六十课——高阶函数之map
1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...
- 【C语言探索之旅】 第一部分第十课:练习题+习作
内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三 ...
- NeHe OpenGL教程 第二十九课:Blt函数
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- GO语言学习(十二)Go 语言函数
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- NeHe OpenGL教程 第四十课:绳子的模拟
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第三十课:碰撞检测
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十课:蒙板
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十课:3D世界
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- 【bzoj3238】差异[AHOI2013](后缀数组+单调栈)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3238 这道题从大概半年以前就开始啃了,不过当时因为一些细节没调出来,看了Sakits神犇 ...
- 机器学习-chapter1机器学习的生态系统
1.机器学习工作流程 获取->检查探索->清理准备->建模->评估->部署 2.搭建机器学习环境 1..通过安装Python,配置相关环境变量 2.强烈建议直接安装ana ...
- linux jdk安装。
我使用的centos 7: 安转sun公司的jdk要先检查系统中是否安装jdk,一般来说Centos系统会默认会安装OpenJDK,但是openJDK部分内容 与SUN JDK不兼容,因此下面进行重新 ...
- 泛型学习第二天——C#中的List<string>泛型类示例
在C#代码中使用一系列字符串(strings)并需要为其创建一个列表时,List<string>泛型类是一个用于存储一系列字符串(strings)的极其优秀的解决办法.下面一起有一些Lis ...
- Linux Ctrl+Z VS Ctrl+C 以及+Z的使用方法
问题及处理: Ctrl+Z是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/bg操作继续前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任 ...
- 【转载】IntelliJ IDEA WEB项目的部署配置
最近使用了一下IDEA,确实强大.在部署时出现了些问题.看了这篇文章,对ieda的一些部署配置有了些许了解,在此感谢原博.原文链接:http://blog.csdn.net/z69183787/art ...
- review22
程序再运行期间,可能需要从外部的存储媒介或其他程序中读入所需要的数据,这就需要使用输入流. 程序可能经常需要获取磁盘上文件的有关信息或在磁盘上创建新的文件等,这就需要学习使用File类. 创建一个Fi ...
- tortoisegit推送ssh-key需要输入用户信息
修改了测试代码,却在提交代码时候又跳出来请输入用户名和密码, 后来发现,github push有两种方式,ssh方式和https方式.而https方式是不同的,具体来说,就是url信息的不同,实际的验 ...
- 搭建svn服务器小结
最开始是用VisualSVN-Server来搭建服务器的,某一天安装了eset杀毒软件后,发现不能用了,每次打开配置页时报错.Visualsvn server 0x80070005 百度搜索,找到相同 ...
- Adobe Reader 的直接下载地址
页面:https://get.adobe.com/reader/direct/ 选择操作系统.选择语言.选择版本,然后点击立即下载. https://ardownload2.adobe.com/pub ...