包
go程序由一个个不同的包组成,程序的入口是名为main的包,比如我们创建一个main文件
main.go
package main
import "fmt"
func main(){
fmt.Println("hello")
}
go要求每一个go文件的非注释开头必须是``` package xxx``,也就是声明该文件属于哪个包
导出方式
首先我们创如下包文件夹:
我的项目
├─mytool
│ ├─ alg
│ │ ├─ cmp.go
│ │ └─ mod.go
│ └─ mod.go
└─其他文件
这样,如果我们在main.go
里面需要使用cmp.go
里面的函数的话需要添加这样的语句:
...
import "项目名称/mytool/alg"
...
alg.Cmp()
...
其中两个语句分别导出了 alg 包,和调用 alg 包下的 cmp 函数
分组导入
通常情况下,推荐使用分组导入包,也就是这种写法:
import(
"fmt"
"text/mytool/alg"
)
这是不推荐的写法,写起来也不方便:
import "fmt"
import "text/mytool/alg"
可导出与不可导出
go的包中支持不可导出函数,就像类中的私有函数,声明的方式为函数名首字母是否大小写
在 cmp.go 文件中添加如下两个函数:
func action() {
fmt.Println("action")
}
func Move(){
fmt.Printlm("move")
}
其中,只有 Move 函数是可以被调用的,而action函数由于首字母未大小写不可调用,因为他没有被导出
函数
go 中定义函数需要使用 func 关键字
参数
go 的函数可以没有参数,也可以有多个参数,如下:
func novar(){
}
func manyvar(a int, b int){
}
如果参数类型一致可以只写最后一个参数的类型,如下:
func manyvar(a,b int){
}
返回值
go 函数如果有返回值需要在参数后面声明,如下:
func havereturn() int{
}
它将返回一个 int 类型的返回值
返回值也可以有一个指定的名字,其目的是为了增加代码的可读性,如下:
func sum(a, b int) (ans int){
ans = a + b
return ans
}
如果一个函数十分的长,那么在开始就确定返回值的名字将大大增加可读性
go 支持函数返回多个返回值,如下:
func manyres() (int, error){
return 1 , nil
}
它分别返回了int和error类型两个返回值
变量
go 中的变量使用 var 关键字创建,并且在变量名后加变量类型,如下:
var a int
该代码创建了一个 int 类型的变量
变量也可以像其他语言一样通过等于号赋值和初始化,如下:
var a = 1//这叫初始化
//也可以一次初始化多个值
var b, c = false, "AMDYES!"
a = 2//这叫赋值
不想写 var 关键字怎么办,在函数里面可以这么写:
func text(){
a := 1//这样也相当于创建和初始化变量
}
函数外是不允许这么写的,go 中规定,函数外的每个语句必须以关键字作为开头。
go 中如果初始化没有明确初始值,统一赋值为 go 中默认的零值
go 中的类型转换方式为 T(变量) ,T代表一种变量类型
如下:
var a int = 1
var b = float64(a)
go 的类型推导会在你声明变量时不指定变量类型时触发。它会根据右边表达的结果类型来确定变量的类型,如下:
var a int =1
b := a//b的类型推导为int
c := 1//此时c被推导为int,也就是常数整型在 go 中为 int
d := 1.1//此时d被推导为float64
e := 1 + 1i//此时为complex128
go 中的常量声明通过const关键字,如下:文章来源:https://www.toymoban.com/news/detail-605558.html
const a int = 1
const b = 1.1//也可以不写类型让 go 自动推导
但是要注意的是 :=
只能声明出变量,常量无法用这个来进行声明文章来源地址https://www.toymoban.com/news/detail-605558.html
到了这里,关于go语言基础一(包、变量和函数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!