golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值
不可或缺的函数,在Go中定义函数的方式如下:
func (p myType ) funcName ( a, b int , c string ) ( r , s int ) {
return
}
通过函数定义,我们可以看到Go中函数和其他语言中的共性和特性
共性
- 关键字——func
- 方法名——funcName
- 入参——— a,b int,b string
- 返回值—— r,s int
- 函数体—— {}
特性
Go中函数的特性是非常酷的,给我们带来不一样的编程体验。
为特定类型定义函数,即为类型对象定义方法
在Go中通过给函数标明所属类型,来给该类型定义方法,上面的 p myType
即表示给myType声明了一个方法, p myType
不是必须的。如果没有,则纯粹是一个函数,通过包名称访问。packageName.funcationName
如:
//定义新的类型double,主要目的是给float64类型扩充方法
type double float64
//判断a是否等于b
func (a double) IsEqual(b double) bool {
var r = a - b
if r == 0.0 {
return true
} else if r < 0.0 {
return r > -0.0001
}
return r < 0.0001
}
//判断a是否等于b
func IsEqual(a, b float64) bool {
var r = a - b
if r == 0.0 {
return true
} else if r < 0.0 {
return r > -0.0001
}
return r < 0.0001
}
func main() {
var a double = 1.999999
var b double = 1.9999998
fmt.Println(a.IsEqual(b))
fmt.Println(a.IsEqual(3))
fmt.Println( IsEqual( (float64)(a), (float64)(b) ) )
}
上述示例为 float64 基本类型扩充了方法IsEqual,该方法主要是解决精度问题。 其方法调用方式为: a.IsEqual(double)
,如果不扩充方法,我们只能使用函数IsEqual(a, b float64)
入参中,如果连续的参数类型一致,则可以省略连续多个参数的类型,只保留最后一个类型声明。
如 func IsEqual(a, b float64) bool
这个方法就只保留了一个类型声明,此时入参a和b均是float64数据类型。 这样也是可以的: func IsEqual(a, b float64, accuracy int) bool
变参:入参支持变参,即可接受不确定数量的同一类型的参数
如 func Sum(args ...int)
参数args是的slice,其元素类型为int 。经常使用的fmt.Printf就是一个接受任意个数参数的函数 fmt.Printf(format string, args ...interface{})
支持多返回值
前面我们定义函数时返回值有两个r,s 。这是非常有用的,我在写C#代码时,常常为了从已有函数中获得更多的信息,需要修改函数签名,使用out ,ref 等方式去获得更多返回结果。
而现在使用Go时则很简单,直接在返回值后面添加返回参数即可。
摘自:http://www.cnblogs.com/howDo/archive/2013/06/04/GoLang-function.html
golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值的更多相关文章
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- python计算非内置数据类型占用内存
getsizeof的局限 python非内置数据类型的对象无法用sys.getsizeof()获得真实的大小,例: import networkx as nx import sys G = nx.Gr ...
- Python内置数据类型之Dictionary篇
1.查看函数XXX的doc string. Python的函数是有属性的,doc string便是函数的属性.所以查看函数XXX的属性的方法是模块名.XXX.__doc__ 2.模块的属性 每个模块都 ...
- Hive内置数据类型
Hive的内置数据类型可以分为两大类:(1).基础数据类型:(2).复杂数据类型.其中,基础数据类型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBL ...
- 二、JAVA基本数据类型:内置数据类型,引用类型
变量的值存储在内存中,内存管理系统通过变量的类型分配存储空间,且该空间只能存储该类型数据,通过定义不同的变量,在内存中储存不同类型的数据. JAVA的两大数据类型 1. 内置数据类型 2.引用数据类型 ...
- Python的四个内置数据类型list, tuple, dict, set
Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...
- Python笔记004-Python最基本内置数据类型和运算符
第二章(1)Python编程基础概念 1. 最基本内置数据类型和运算符 每个对象都有类型,Python 中最基本的内置数据类型: 1. 整数 整数,2345 ,10 ,50 2. 浮点型 小数,3.1 ...
- Python作业---内置数据类型
实验2 内置数据类型 实验性质:验证性 一.实验目的 1.掌握内置函数.列表.切片.元组的基本操作: 2.掌握字典.集合和列表表达式的基本操作. 二.实验预备知识 1.掌握Python内置函数的基/本 ...
- Python内置数据类型总结
python的核心数据类型:(很多语言之提供了数字,字符串,文件数据类型,其他形式的数据类型都以标准库的形式表示 也就是用之前需要import ) ,但是python有很多都是内置的,不需要impor ...
随机推荐
- 使用Java中Calendar类测试当前年月日
import java.util.Calendar; public class time { public static void main(String[] args) { Calendar cal ...
- 充当别的mcu的外部存储器(51类)
// 锁存地址 - STC12C5A60S2 reg [15:0]rAddr_51; //存放51单片机传过来的地址 读51地址寄存器 always @ (posedge MCLKout or neg ...
- RabbitMQ整合spring----https://www.cnblogs.com/woms/p/7040902.html
https://www.cnblogs.com/woms/p/7040902.html
- [POJ3162]Walking Race(DP + 单调队列)
传送门 题意:一棵n个节点的树.wc爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要在这n个距离里取连续的若干天,使得这些天里最大距离和最小距离 ...
- noip模拟赛 算
[问题背景]zhx 帮他妹子做数学题.[问题描述]求: 如 N=3, M=3, 这个值为 1^1+1^2+1^3+2^1+2^2+2^3+3^1+3^2+3^3=56. [输入格式]仅一行, 包含两个 ...
- hdu 1853 KM算法
#include<stdio.h> #include<math.h> #include<string.h> #define N 200 #define inf 99 ...
- Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)
描述 在唐山一中,吃饭是一件很令人头疼的事情,因为你不可能每次都站在队伍前面买饭,所以,你最需要做的一件事就是——跑饭.而跑饭的道路是无比艰难的,因为路是单向的(你要非说成是双向的我也没法,前 ...
- 通过JQUERY获取SELECT OPTION中选中的值
遇到一样学一样. 一个是取KEY,一个是取VALUE,一个是取所有文本. var dbuser_select = $("#dbuser_select option:selected" ...
- kuangbin专题最短路 D - Silver Cow Party
#include<iostream> #include<cstring> #include<algorithm> #include<iomanip> # ...
- 洛谷——P1082 同余方程
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输 ...