函数

Go语言 函数是反过来声明 变量类型和  函数返回值

一。一个返回值

package main
import "fmt"func max(a int,b int) int  {  //先参数 后返回值if a>b  {return a}return b
}func main()  {fmt.Println(max(4,5))
}

二。两个返回值

package main
import "fmt"
func main()  {v,e:=multi_ret("one")fmt.Println(v,e)  //输出1 truev, e = multi_ret("four")fmt.Println(v,e)   //输出0 false//通常的用法 注意分号后有 eif v,e=multi_ret("four");e{//正常返回} else {//错误返回}
}func multi_ret(key string)(int,bool){m:=map[string]int{"one":1,"two":2,"three":3}var err boolvar val intval,err=m[key]return val,err
}

三。参数数量不定

package mainimport "fmt"
func sum(nums ...int){fmt.Println(nums," ")//输出如[1,2,3]之类数组total :=0for _,num:=range nums{//要的是值而不是下标total+=num}fmt.Println(total)
}func main(){sum(1,2)sum(1,2,3)//传数组nums :=[]int{1,2,3,4}sum(nums...)
}

四。函数的闭包和递归

(一)斐波那契数列

package main
import "fmt"
func nextNum() func() int  {i,j:=1,1return func() int {var tmp  =i+ji,j=j,tmpreturn tmp}
}func main()  { //打印下一个 斐波那契数nextNumFunc:=nextNum()for i:=0;i<10;i++{fmt.Println(nextNumFunc())}
}

(二)阶乘

package main
import "fmt"func fact(n int) int  {if n==0{return 1}return n*fact(n-1)
}func main()  {fmt.Println(fact(5))
}

(三)import另外的文件

结构体

package main
import "fmt"
type rect struct { //结构体width,height int}func (r *rect) area() int{//求面积return r.width*r.height
}func (r *rect) perimeter() int { //求周长return 2*(r.width+r.height)
}func main(){r:=rect{width:10,height:15}fmt.Println("面积:",r.area())fmt.Println("周长:",r.perimeter())rp:=&r  //指针fmt.Println("面积:",rp.area())fmt.Println("周长:",rp.perimeter())
}

接口 多态

package main
import "fmt"
import "math"
//----接口----//
type shape interface{
area() float64         // 计算面积
perimeter() float64    //计算周长
}
//----长方形----//
type rect struct {width float64height float64
}func (r *rect) area() float64{//求面积return r.width*r.height
}func (r *rect) perimeter() float64 { //求周长return 2 * (r.width + r.height)
}
//----圆形----//
type circle struct {radius float64
}func (c*circle) area() float64{   //面积return math.Pi*c.radius*c.radius
}
func (c*circle) perimeter() float64{   //周长return 2*math.Pi*c.radius
}//----接口的使用----//
func interface_test(){r :=rect{width:3,height:4}c :=circle{radius:5}s:=[]shape{&r,&c} //通过指针实现for _,sh:=range s{fmt.Println(sh)fmt.Println(sh.area())fmt.Println(sh.perimeter())}
}func main()  {interface_test()
}

go语言----函数 结构体 接口 多态相关推荐

  1. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

  2. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  3. c语言中结构体头文件是什么,函数形参里有结构体指针,为什么在头文件生

    满意答案 lam950 2017.04.08 采纳率:59%    等级:8 已帮助:913人 C语言用结构体指针作函数参数 这种方式比用结构体变量作函数参数效率高,因为无需传递各个成员的值,只需传递 ...

  4. C语言_函数结构体的调用

    C语言_函数结构体的调用 #include<stdio.h> //定义存储函数的结构体 struct map{//定义无参数类型返回void的函数指针void (*p)(); }; /** ...

  5. 专科 java转go 翱翔之路(一)基础语法:变量声明,匿名函数,结构体,函数,map

    本人专科!在太原干了一年了,想从java转go,上班中自学go,明年找go语言相关的工作 立帖为证! 待羽翼丰满,大风到来,便是我翱翔之时!!! 1.Go语言 1.命令 1.1 查看版本号 go ve ...

  6. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  7. Go语言基础 结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...

  8. C语言中结构体标签的使用

    C语言中结构体标签的使用 我们都知道,结构体标签就是结构体的名称,为结构体命名可以方便我们在后续继续使用该结构体. 如 struct student {char* name;int age; }str ...

  9. 【剑仙教程】易语言的结构体。自定义数据类型。

    1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...

最新文章

  1. Springboot 多文件上传
  2. 《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用
  3. Visual Studio下载、安装、运行教程
  4. mysql分隔字符串转变为多行_【mysql】将以固定分隔符分隔的字符串转成多行的形式...
  5. linux rsync 安装教程,linux下的rsync配置和使用教程
  6. Radware:应用交付向云端扩展
  7. PyTorch 1.8版本!正式支持AMD GPU
  8. sql 大于某个日期_图解面试题:如何比较日期数据?
  9. 有效提高作品率的UI设计技巧,你知道多少?
  10. ssh配置公钥_CentOS配置SSH免密登陆
  11. uni-app在h5端和app端的使用。/deep/ css兼容性问题如何解决?
  12. Java If Else 语句
  13. 高级售前客户服务专员题库
  14. PLC数据采集解决方案及数采网关
  15. centos中使用goaccess分析nginx日志,goaccess分析多个nginx日志
  16. webstack开源网站导航源码
  17. 数字电视标准大全DVB/ATSC/ISDB/CMMB/DMBTH/DAB
  18. e3 v3服务器芯片组,E3 V5专用主板特别在哪?华硕E3 PRO GAMING评测-太平洋电脑网
  19. Windows 10 版本 1507 中的新 AppLocker 功能
  20. php控制打印机打印设置,专为控制打印设计的CSS样式

热门文章

  1. 基于深度法向约束的稀疏雷达数据深度补全(商汤科技和香港大学联合提出)
  2. 将二进制流转换为图片
  3. 利用追赶法来求解方程Ax=b的C++程序
  4. React + Threejs + Swiper 实现全景图效果
  5. 分享一下我的初中生活
  6. Android文件的下载
  7. Case study:数据库网页构建原理和实践
  8. 计算机组装安全常识,计算机组装与维护宝典
  9. 在线作图|2分钟在线绘制RDA图
  10. CEJ:西安理工赵亚乾组冠状病毒在水中传播特征、可能遏制策略与研究挑战