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 ...
随机推荐
- inflate(int resource, ViewGroup root, boolean attachToRoot)见解
/** * Inflate a new view hierarchy from the specified xml resource. Throws * {@link InflateException ...
- 8.mysql执行语句的顺序
mysql执行语句的顺序 一.group by + where group by 字句和where条件语句结合在一起使用,where在前,group by 在后.即先对select xx fr ...
- 【Codeforces 1106D】Lunar New Year and a Wander
[链接] 我是链接,点我呀:) [题意] 让你遍历n个节点,访问过的节点不操作. 如果是没有访问过的点,那就把它加到序列的末尾. 问你形成的最小字典序的序列是多少. [题解] 显然每次找最小的标号 用 ...
- bx值
bx值 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem De ...
- Source Insight 与 Source Navigator ,Understand ,Crystal FLOW 源代码阅读工具
http://www.sourceinsight.com/update.html http://www.oschina.net/p/sourcenavigator/ http://www.cnblog ...
- [Vue] Code split by route in VueJS
In this lesson I show how to use webpack to code split based on route in VueJS. Code splitting is a ...
- 整理100道 .net面试题
前段时间,我在准备面试的时搜到的一套 net开发人员面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需. 1. .NET和C#有什么区别 答:.NET一般指 ...
- mongodb mapreduce使用总结
文章来自本人个人博客: mongodb mapreduce使用总结 大家都知道,mongodb是一个非关系型数据库.也就是说.mongodb数据库中的每张表是独立存在的,表与表之间没有不论什么依赖 ...
- ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals
感觉自己做有关区间的题目方面的思维异常的差...有时简单题都搞半天还完全没思路,,然后别人提示下立马就明白了...=_= 题意:给一个含有n个元素的数组和k,问存在多少个区间的和值为k的次方数. 题解 ...
- 开启我的PHP学习之旅
第二课 LAMP: Linux apache ngix PHP 第三课 搭建server方式: 1.集成安装环境 XAMPP软件包:www.apachefriends.org 2.单独配置 第四课 X ...