go语言----函数 结构体 接口 多态

函数

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 true
	 v, e = multi_ret("four")
	fmt.Println(v,e)   //输出0 false

	//通常的用法 注意分号后有 e
	if 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 bool
	var val int
	val,err=m[key]
	return val,err
}

三。参数数量不定

package main

import "fmt"
func sum(nums ...int){
	fmt.Println(nums," ")//输出如[1,2,3]之类数组
    total :=0
    for _,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,1
	return func() int {
		var tmp  =i+j
		i,j=j,tmp
		return 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 float64
	height 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()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangchuang2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值