go函数初级
一、简介
在go语言中,函数的功能是非常强大的,以至于被认为拥有函数式编程语言的多种特性。
二、介绍
1、一个程序中包含了很多的函数:函数式基本的代码块
2、函数编写的顺序是无关紧要的;鉴于可读性的需求,最好把main()函数写在文件的前面
3、编写函数的目的,在于封装,将一个功能编写到一个函数中,已完成功能的封装,已便重复利用
三、函数的定义
- 格式
func functionName([parameter list]) [return_type]{
函数体
}
- 不正确的定义方式
func G() // "{" 必须与函数名在同一行
{
}
- 函数定义解析
1、func :关键字 ,函数声明,表明这是一个函数
2、functionName : 函数名
3、paramete list :函数参数,非必须
4、return_type :返回类型,函数返回值(非必须)
5、函数体:函数定义的代码的集合
- 如下
func sum(num1,num2 int)int{
return num1 + num2
}
四、函数调用
函数名([参数])
package main
import "fmt"
func main(){
n1,n2 := 2,3
fmt.Println(sum(n1,n2))
}
func sum(num1,num2 int)int{
return num1 + num2
}
五、函数参数
- 单个参数
func maxArr(nums [5]int)int{
var num int
for _,v := range nums{
if num < v{
num = v
}
}
return num
}
- 两个参数
// func max(num1,num2 int)int{} // 这个是推荐写法,与下面的方式一样
func max(num1 int,num2 int)int{
if num1 < num2 {
return num2
} else{
return num1
}
}
- 三个参数
// 返回两个参数
func calc(num1,num2 int,operator string) (int,bool){
switch operator {
case "+":
return num1+num2,true
case "-":
return num1-num2,true
case "*":
return num1*num2,true
case "/":
return num1/num2,true
default:
return 0,false
}
}
- 可变长参数
// 可变长参数 .. s实际类型是数组,只是不确定数组的个数
func concat(s ...string)string{
str := ""
for _,v := range s{
str += v
}
return str
}
- 实例
package main
import "fmt"
func main(){
arr := [5]int{1,2,3,4,5}
fmt.Println(maxArr(arr))
fmt.Println(max(2,3))
fmt.Println(calc(7,8,"+"))
fmt.Println(concat("jmz ","is ","man"))
}
// 单个参数
func maxArr(nums [5]int)int{
var num int
for _,v := range nums{
if num < v{
num = v
}
}
return num
}
// 两个参数
// func max(num1,num2 int)int{} // 这个是推荐写法,与下面的方式一样
func max(num1 int,num2 int)int{
if num1 < num2 {
return num2
} else{
return num1
}
}
// 多个参数
// 返回两个参数
func calc(num1,num2 int,operator string) (int,bool){
switch operator {
case "+":
return num1+num2,true
case "-":
return num1-num2,true
case "*":
return num1*num2,true
case "/":
return num1/num2,true
default:
return 0,false
}
}
// 可变长参数 .. s实际类型是数组,只是不确定数组的个数
func concat(s ...string)string{
str := ""
for _,v := range s{
str += v
}
return str
}
结果:
5
3
15 true
jmz is man
- 可变长参数的坑
package main
import "fmt"
func main(){
ids := []int64{13,32,43}
get(ids...) // 这样不可以的
// get(13,32,43) // 这样可以
}
func get(ids ...interface{}){
for k,v:= range ids{
fmt.Printf("%v-%v",k,v)
}
}
上面的运行会编译报错。
为什么不行,我也不知道。
如果
ids := []interface{}{13,32,43} // 这样是可以的
我猜想可能是因为 类型不同吧,,,,奇怪
六、函数返回值
- 返回一个参数
func min(nums ...int)int{
num := nums[0]
for _,v:=range nums{
if num > v{
num = v
}
}
return num
}
- 返回两个参数
func swap(x int,y int)(int,int){
return y,x
}
- 命名函数
函数在调用阶段就已经赋予的返回初始零值
函数会直接返回已经命名的变量
func calc(num1,num2 int,operator string) (num int,ok bool){
switch operator {
case "+":
num = num1+num2
ok = true
case "-":
num = num1-num2
ok = true
case "*":
num = num1*num2
ok = true
case "/":
num = num1/num2
ok = true
}
return
}
- 实例
package main
import "fmt"
func main(){
fmt.Println(min(4,19,34,12,5,10))
num1,num2 := 3,5
num1,num2 = swap(num1,num2)
fmt.Println(num1,num2)
num,ok := calc(3,4,"+")
fmt.Println(num,ok)
}
// 返回一个参数
func min(nums ...int)int{
num := nums[0]
for _,v:=range nums{
if num > v{
num = v
}
}
return num
}
// 返回两个参数
// 调换函数
func swap(x int,y int)(int,int){
return y,x
}
// 命名返回值
// 函数在调用阶段就已经赋予的返回初始零值
func calc(num1,num2 int,operator string) (num int,ok bool){
switch operator {
case "+":
num = num1+num2
ok = true
case "-":
num = num1-num2
ok = true
case "*":
num = num1*num2
ok = true
case "/":
num = num1/num2
ok = true
}
return
}
结果:
4
5 3
7 true
如果喜欢看小说,请到183小说网
go函数初级的更多相关文章
- python笔记2小数据池,深浅copy,文件操作及函数初级
小数据池就是在内存中已经开辟了一些特定的数据,经一些变量名直接指向这个内存,多个变量间公用一个内存的数据. int: -5 ~ 256 范围之内 str: 满足一定得规则的字符串. 小数据池: 1,节 ...
- day_10初级函数
今天讲了函数初级 函数:完成特定功能的代码块,作为一个整体对其进行特定的命名,该名字就是代表函数 --现实中很多问题要通过一些工具进行处理 ,,可以将工具提前准备好并命名 通过名字就可以找到这个工具 ...
- Scala入门之函数
/** * 函数可以被简单的被认为是包裹了一条或者几条语句的代码体,该代码体接收若干参数,经过代码体处理后返回结果,形如数学中的f(x) = x + 1 * 在Scala中函数式一等公民,可以向变量一 ...
- Python map,filter,reduce函数
# -*- coding:utf-8 -*- #定义一个自己的map函数list_list = [1,2,4,8,16] def my_map(func,iterable): my_list = [] ...
- Day 09 函数基础
函数初级 简介 # 函数是一系列代码的集合,用来完成某项特定的功能 优点 '''1. 避免代码的冗余2. 让程序代码结构更加清晰3. 让代码具有复用性,便于维护''' 函数四部分 '''1. 函数名: ...
- Python-JS基础(基础结构~函数)
程序本质上分为三大结构: 顺序结构.分支结构.循环结构JavaScript中的程序结构也是这样,下面我们来分别介绍JS中的三种基本程序结构:我们上篇博客中介绍到的使用逻辑运算符&&实现 ...
- python函数完整语法和分类
函数初级 简介 # 函数是一系列代码的集合,用来完成某项特定的功能 优点 '''1. 避免代码的冗余2. 让程序代码结构更加清晰3. 让代码具有复用性,便于维护''' 函数四部分 '''1. 函数名: ...
- 前端(十二)—— JavaScript基础操作:if语句、for循环、while循环、for...in、for...of、异常处理、函数、事件、JS选择器、JS操作页面样式
JavaScript基础操作 一.分支结构 1.if语句 if 基础语法 if (条件表达式) { 代码块; } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通 ...
- 第六十四天 JS基础操作
一.分支结构 1.if语句 if基础语句 if(条件表达式){ 代码块: } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通表达式 // 0.undefined ...
随机推荐
- What is the difference between Gradle Build and Gradle Sync?
Gradle Build helps you to compile your Android app into an APK while Gradle Sync will sync up all yo ...
- jenkins执行python脚本
参考: https://blog.csdn.net/qq_39247153/article/details/81003244 https://blog.csdn.net/huashao0602/art ...
- JNI数组操作
在Java中数组分为两种: 1.基本类型数组 2.对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用) 一个能通用于两种不同类型数组的函数: GetArrayLength(ja ...
- poj3176-Cow Bowling【dp】
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...
- Linux之iptables(一、防火墙的概念)
防火墙的概念 一.安全技术 入侵检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化.定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供 ...
- RHEL6 配置Yum库
在/mnt目录下创建子目录“/cdrom”(用于将iso文件挂载到此目录下) 镜像状态确定为“已连接”(“已连接”未勾选的情况下无法获得iso文件) 配置自动挂载文件 (系统开机时会主动读取“/etc ...
- PHP排序算法之快速排序
原理:找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组left.rignt,遍历整个数组元素,如果遍历到的元素比当前的元素小就放到数组left,比当前的元素大放到rignt ...
- 搭建 Seafile 专属网盘
准备域名 任务时间:15min ~ 20min 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可以参考下面的视频. 视频 - 在腾讯云上购买域名 域名解析 域名购买完成后, 需要将域名解析到实验 ...
- ISNUMERIC()检测是否为数字
ISNUMERIC ( expression )当输入表达式得数为一个有效的整数.浮点数.money 或 decimal 类型,那么 ISNUMERIC 返回 1:否则返回 0.返回值为 1 确保可以 ...
- Django——13 Auth系统 登陆注册实例 权限的实现
Django Auth系统中的表 注册登陆实例 权限的实现 登陆权限 操作权限 组操作 Auth系统中的表 从表的名称我们就能看出,auth_user,auth_group,auth_permiss ...