当前位置: 首页 > 科技观察

一篇文章带你了解Go语言的基本功能(下)

时间:2023-03-17 14:45:53 科技观察

前言大家好,我是星期五,这次我们继续学习Go的基本功能。为什么需要函数?函数在所有编程语言中都被称为函数。Java、PHP、Python、JS等都叫函数。函数的作用一般是这样描述的:函数可以把重复的或者特定的功能封装成一个方便调用的东西。注意:在Go中,函数支持闭包。不使用该函数时,代码packagemainimport"fmt"funcmain(){//模拟打开一个文件,向文件写入一行内容,关闭文件functionvarfile_name="a.txt"//文件名varw_content="LovemyChina"//写入内容fmt.Println(fmt.Sprintf("打开%s文件",file_name))fmt.Println(fmt.Sprintf("将%s写入%s文件",file_name,w_content))fmt.Println(fmt.Sprintf("Close%sfile",file_name))//如果要向其他文件写入内容,需要重新复制varfile_name2="b.txt"//文件名varw_content2="Chinamighty"//写入内容fmt.Println(fmt.Sprintf("打开%s文件",file_name2))fmt.Println(fmt.Sprintf("将%s写入%s文件",file_name2,w_content2))fmt.Println(fmt.Sprintf("Close%sfile",file_name2))}使用函数将同一个函数封装成一个函数。packagemainimport"fmt"funcw_file(filenamestring,w_contentstring){fmt.Println(fmt.Sprintf("Open%sfile",filename))fmt.Println(fmt.Sprintf("Wrote%sto%sfile",filename,w_content))fmt.Println(fmt.Sprintf("Close%sfile",filename))}funcmain(){//把同一个函数封装成函数w_file("a.txt","LovemyChina")w_file("b.txt","China'smightypower")}以上代码执行结果如下ps:但可以明显看出,使用函数提取相同的函数,代码会变得简洁整洁。使用函数名命名规则函数名尽量采用驼峰式命名,例如:getName、connectData等。语法在Go中,func关键字用于定义函数语言。funcfunctionname([参数1参数类型1,参数2参数类型2,...])[(返回值返回值类型,...)]{逻辑码}//括号表示可选参数无参数,不返回valuepackagemainimport"fmt"funcsay1(){fmt.Println("我终于可以说话了...")}有参数,无返回值funcsay2(cstring){fmt.Println("我终于可以说话了"+c+"了")}有无参数,返回值funcsay3(cstring)(string){fmt.Println("我终于可以说"+c+"")return"ohyeah"}mainfunctionfuncmain(){say1()say2("Hello")result:=say3("Hello")fmt.Printf(result)}resultpackagemainimport"fmt"funcsay()string{fmt.Println("我终于可以说话了...")return""}funcmain(){//函数名+括号调用函数say()//结果:我终于可以说话了...}注意:如果函数有返回值,则不需要接收。函数参数特点在Go中,如果函数参数都是同一类型,可以这样写。//arg1,arg2,arg3,arg4参数类型都是stringfuncsay(arg1,arg2,arg3,arg4string){fmt.Println("我终于可以说话了...")}//arg1,arg2参数都是int类型,arg4,arg4是字符串类型,funcsay(arg1,arg2,int,arg3,arg4string){//表示arg1,arg2,arg3,arg4参数类型都是stringfmt.Println("我终于可以说话了...")}它大概意思就是如果参数没有写类型,以后遇到的类型为准。函数的...parameters...parameters,也叫变长参数,有点像Python中的*args。作用是当你不知道接收多少个参数时,接收多的参数会放在.......参数需要排在最后。代码packagemainimport"fmt"funcsay(namestring,content...string){fmt.Println(content)//result:[666双击ok]fmt.Printf("%T\n",content)//result:[]string,是slice类型fmt.Println("Iam"+name,"Isaid:")//循环slicefor_,v:=rangecontent{fmt.Println(v)}}funcmain(){//函数名+括号调用函数say("张三","666","双击","ok","ohyeah")//result:Ifinallycanspeak...}结果如图图注:参数的类型是...,其值是slice类型。函数的返回值Thereturnvalueisapackagemainimport"fmt"//返回值是一个funcsay1()string{return"ok"}有多个返回值,需要用括号括起来//返回值为多个,需要括号funcsay2()(int,string){return1,"ok"}returnvaluesarenamed//返回值有命名,无论是多个返回值还是一个返回值,括号都是必需的//if是命名返回值,需要赋值给逻辑代码中的变量funcsay3()(aint,bstring){//逻辑代码a=18b="666"/*直接返回即可,不需要returna,breturn默认是a和b不需要返回同上,返回具体值*/return}mainfunctionfuncmain(){s:=say1()fmt.Println(s)a1,b1:=say2()fmt.Println(a1,b1)a2,b2:=say3()fmt.Println(a2,b2)}结果总结以上我们学习了围棋的基本函数。