分享
golang 函数定义及其接口实例
u012798391 · · 1563 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
/有返回值且返回一个funcmax(aint,bint)int{ifa>b{returna}returnb}//有返回值且返回二个funcmulti_ret(keystring)(int,bool){m:=map[string]int{"ont":1,"two":2,"three":3}varerrboolvarvalintval,err=m[key]returnval,err}//多个参数,相当于传进取一个数组funcsum(nums...int){fmt.Println(nums,"")total:=0for_,num:=rangenums{total+=num}fmt.Println(total)}//返回值为函数funcnextNum()func()int{i,j:=0,1returnfunc()int{vartmp=i+ji,j=j,tmpreturntmp}}//递归返回整数funcfact(nint)int{ifn==0{return1}returnn*fact(n-1)}//结构typerectstruct{widthfloat64heightfloat64}//结构函数func(r*rect)area()float64{returnr.width*r.height}func(r*rect)perimeter()float64{return2*(r.height*r.height)}//结构typecirclestruct{radiusfloat64}func(c*circle)area()float64{returnmath.Pi*c.radius*c.radius}func(c*circle)perimeter()float64{return2*math.Pi*c.radius}//接口注意rect和circle均实现了shape接口typeshapeinterface{area()float64perimeter()float64}funcinterface_test(){r:=rect{width:2,height:4}c:=circle{radius:4.3}s:=[]shape{&r,&c}for_,sh:=ranges{fmt.Println(sh)fmt.Println(sh.area())fmt.Println(sh.perimeter())}}//自定义错误typemyErrorstruct{arginterrMsgstring}func(e*myError)Error()string{returnfmt.Sprintf("%d-%s",e.arg,e.errMsg)}funcerror_test(argint)(int,error){ifarg<0{return-1,errors.New("BadArguments,negtive")}elseifarg>256{return-1,&myError{arg,"BadArguments,toolarge"}}returnarg*arg,nil}funcCopyFile(dstNamestring,srcNamestring)(writtenint64,errerror){src,err:=os.Open(srcName)iferr!=nil{fmt.Println("openfailed")}defersrc.Close()dst,err:=os.Create(dstName)iferr!=nil{fmt.Println("Createfailed")return}deferdst.Close()returnio.Copy(dst,src)}
查看原文:http://www.zoues.com/2016/10/27/golang-%e5%87%bd%e6%95%b0%e5%ae%9a%e4%b9%89%e5%8f%8a%e5%85%b6%e6%8e%a5%e5%8f%a3%e5%ae%9e%e4%be%8b/
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1563 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
/有返回值且返回一个funcmax(aint,bint)int{ifa>b{returna}returnb}//有返回值且返回二个funcmulti_ret(keystring)(int,bool){m:=map[string]int{"ont":1,"two":2,"three":3}varerrboolvarvalintval,err=m[key]returnval,err}//多个参数,相当于传进取一个数组funcsum(nums...int){fmt.Println(nums,"")total:=0for_,num:=rangenums{total+=num}fmt.Println(total)}//返回值为函数funcnextNum()func()int{i,j:=0,1returnfunc()int{vartmp=i+ji,j=j,tmpreturntmp}}//递归返回整数funcfact(nint)int{ifn==0{return1}returnn*fact(n-1)}//结构typerectstruct{widthfloat64heightfloat64}//结构函数func(r*rect)area()float64{returnr.width*r.height}func(r*rect)perimeter()float64{return2*(r.height*r.height)}//结构typecirclestruct{radiusfloat64}func(c*circle)area()float64{returnmath.Pi*c.radius*c.radius}func(c*circle)perimeter()float64{return2*math.Pi*c.radius}//接口注意rect和circle均实现了shape接口typeshapeinterface{area()float64perimeter()float64}funcinterface_test(){r:=rect{width:2,height:4}c:=circle{radius:4.3}s:=[]shape{&r,&c}for_,sh:=ranges{fmt.Println(sh)fmt.Println(sh.area())fmt.Println(sh.perimeter())}}//自定义错误typemyErrorstruct{arginterrMsgstring}func(e*myError)Error()string{returnfmt.Sprintf("%d-%s",e.arg,e.errMsg)}funcerror_test(argint)(int,error){ifarg<0{return-1,errors.New("BadArguments,negtive")}elseifarg>256{return-1,&myError{arg,"BadArguments,toolarge"}}returnarg*arg,nil}funcCopyFile(dstNamestring,srcNamestring)(writtenint64,errerror){src,err:=os.Open(srcName)iferr!=nil{fmt.Println("openfailed")}defersrc.Close()dst,err:=os.Create(dstName)iferr!=nil{fmt.Println("Createfailed")return}deferdst.Close()returnio.Copy(dst,src)}
查看原文:http://www.zoues.com/2016/10/27/golang-%e5%87%bd%e6%95%b0%e5%ae%9a%e4%b9%89%e5%8f%8a%e5%85%b6%e6%8e%a5%e5%8f%a3%e5%ae%9e%e4%be%8b/