GO学习之 函数和方法
一.函数的基本介绍
1.为什么使用函数
(1)代码冗余
(2)不利于维护
(3)函数可以解决这个问题
2.函数的定义
为完成某一功能的程序指令(语句)的集合,称为函数。
在GO中,函数分为:自定义函数、系统函数
基本语法:
func 函数名 (形参列表) (返回值类型列表) {
执行语句
return 返回值列表
}
1)形参列表:表示函数的输入
2)函数中的语句:表示为了实现某一个功能代码块
3)函数可以有返回值,也可以没有
举例:
package main import "fmt" func cal(n1 float64, n2 float64, operator byte) float64 { // 一个计算的函数 var res float64 switch operator { case '+': res = n1 + n2 case '-': res = n1 - n2 case '*': res = n1 * n2 case '/': res = n1 / n2 default: fmt.Println("操作符号错误...") } return res } func main() { // var n1 float64 = 1.2 var n2 float64 = 2.3 var operator byte = '-' result := cal(n1,n2,operator) fmt.Println("res=",result) }
二.包的基本介绍
1.包的引出
(1)在实际开发中,我们往往需要在不同的文件中,去调用其它文件的定义函数,比如main.go
中,去使用utils.go文件中的函数
(2)不同开发者的函数名取的也是有可能相同的
2.包的基本概念
说明:go的每一个文件都是属于一个包的,也就是说go是以包的形式来管理文件和项目目录结构的。
3.包的介绍
包的三大作用
(1)区分相同名字的函数、变量等标识符
(2)当程序文件很多时,可以很好的管理项目
(3)控制函数、变量等访问范围,即作用域
包的相关说明
包需要开头首字母大写才能被使用。
打包的基本语法
package utils
引包的基本语法
import “包的路径”
4.一个基本引包的例子
目录结果如上图
其中utils.go内代码是:
package utils import "fmt" func Cal(n1 float64, n2 float64, operator byte) float64 { // 一个计算的函数 var res float64 switch operator { case '+': res = n1 + n2 case '-': res = n1 - n2 case '*': res = n1 * n2 case '/': res = n1 / n2 default: fmt.Println("操作符号错误...") } return res }
main.go内的代码为:
package main import ( "fmt" "gotest01/chapter_06/oa_demo/utils" // 默认从src开始 // 注意这个utils是文件夹的名字 ) func main() { // var n1 float64 = 1.2 var n2 float64 = 2.3 var operator byte = '-' result := utils.Cal(n1,n2,operator) // 这个utils是utils.go下package 后面的名字 fmt.Println("result=",result) }
此demo绝对路径为:C:\gostu\code\src\gotest01\chapter_06\oa_demo\
导包的路径需要从src目录下开始导包
最后运行结果为:
5.包的主要事项和使用细节
(1)在给文件打包时,该包对应一个文件夹,比如utils文件对应的包名就是utils,文件的包名通常和文件所在的文件夹名一直,一般为小写字母。[不是一定的]
(2)当一个文件要使用其他包函数或变量时,需要先引入对应的包[包名是另外一个文件package后面的那个名字]
1)引入方式1: import “包名”
2)引入方式2:
import (
“包名1”
“包名2”
)
3)package 指定在文件第一行,然后是import指令。
4)在import包时,路径从$GOPATH的src下开始,不用带src,编译器会自动从src下开始引入。
(3)为了其他包的文件,可以访问到本报的函数的首字母需要大写,类似其他语言的类。这样才能跨包访问。[变量想要被其他包引用,变量也需要首字母大写]
(4)在访问其他包函数或变量时,其语法为: 包名.函数名 包名.变量名
(5)如果包名较长,GO支持给包取别名,语法为:
import 别名 “包路径”
(6)在同一个包下不能有相同的函数名或变量名
(7)如果你要编译成一个可执行程序文件,就需要将这个包声明为main,即package main
这个是语法规范,如果是写一个库可以自定义。
编译一个可执行文件,在$GOPATH下运行go build main包路径