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 ...
随机推荐
- 字符串str
字符串: #字符串的索引从0开始的,如果倒数最后一位是-1,索引的位置是唯一的.var1 = var[0:2] #从第一个字符到第2个字符var2 = var[:] #从第一个到最后var3 = va ...
- 【GC】
using 语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以 try-finnaly 来实现,因为嵌套的 using 语句可能存在隐藏的 Bug.内层 using 块引发异常时,将不能 ...
- [luogu4728 HNOI2009] 双递增序列 (dp)
传送门 Solution 前几天刚做了类似题,这种将一个序列拆分为两个单调序列的题一般都是设\(dp[i]\)表示i为一个单调序列的末尾时,另一个序列的末尾是多少 然后应用贪心的思想,在这道题中就是让 ...
- The Forth Week
1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. cp -r /etc/skell /home/tuser1 ; ...
- CF410div2 A. Mike and palindrome
/* CF410div2 A. Mike and palindrome http://codeforces.com/contest/798/problem/A 水题 */ #include <c ...
- N天学习一个linux命令之ping
用途 检测主机是否可到达,也就是说,目标主机是否可以联网,还可以用于检测网速.通过发送ICMP ECHO_REQUEST数据包检测. 用法 ping [options] destination 常用选 ...
- Linux vim 入门 配置 及 使用初步
网上能够找到的,关于VI的教程,更是多为能吓死人的上百页说明.事实上, 从我个人的实践看,全然不须要如此夸张.要完毕最主要的编辑.仅仅要熟悉几个命令,就是把VIM用得非常好. 这里就列举一下: Esc ...
- CF #319 div 2 D
这道题算不算脑洞题.. 可以发现,当一个排列中有循环节时长度为1或2时可能有解.当为1时,只需把全部点都连到这个题即可,当为2时,就要求所有循环节长度均为偶数,这很容易理解,因为如果存在为奇数,它们之 ...
- AVPlayer的使用,带缓冲
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...
- HDU 2206 IP的计算(字符串处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2206 Problem Description 在网络课程上,我学到了非常多有关IP的知识. IP全称叫 ...