GoLang学习笔记(二) GoLang基础
一、包
Go程序从 main
包开始运行,程序内通过导入路径来使用其他的包。
Go中的约定是,包名与导入路径的最后一个元素一致。
如"math/rand"
包中的代码都是以package rand
开头
package main//main包 程序运行
//包的导入
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("hello go ", rand.Intn(100))
}
-
包的导入
Go可以通过编写多个导入语句进行导包
import "fmt" import "math
也可以通过上面代码中的分组导入语句进行导包
上述代码中通过路径
"fmt"
和"math/rand"
导入了两个包。 -
导出
Go中,如果一个名称的首字母是大写的,那么这个名称是已导出的,这个方法是其他包可见的,相当与Java中是由
public
关键字修饰。若一个名称是以小写字母开头,那么这个名称未导出的,是其他包不可见的。
相当与Java中
private
关键字修饰。package main import ( "fmt" "math" ) func main() { fmt.Println(math.pi)//此处pi为未导出的 }
运行结果为
修改为
math.Pi
程序正常运行
二、变量
-
基本类型
bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 rune // int32 的别名 // 表示一个 Unicode 码点 float32 float64 complex64 complex128 //复数 complex64为32位实数+32位虚数 complex128为64位实数+64位虚数
注意:
int
,uint
和uintptr
在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。 -
变量声明
var
用于一个变量的声明 声明格式为var 变量名 变量类型
行尾无须分号,Go代码中不需要分号结尾
若多个变量为相同类型,通过
var
+变量名2
+,
+变量名1
+变量类型
的形式声明var a,b,c int
批量声明 类似与包的批量导入 使用
var
和括号将一组变量放在一起声明var ( a int b string c []float32 d func() bool e struct { x int } )
短变量声明
使用
:=
可以代替var
进行变量的声明package main import ( "fmt" ) func main() { k := 3 c, python, java := true, false, "no!" fmt.Println(k, c, python, java) }
运行结果为:
注意:
:=
结构不能在函数外使用 应为Go语言中,函数外的每个语句都必须以关键字开始(var
,func
等等)
:=
声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。 -
变量的初始化
没有明确初始值的变量声明它们会被赋予:
- 数值类型为
0
, - 布尔类型为
false
, - 字符串为
""
(空字符串)。
- 数值类型为
-
类型转换
Go中不同类型之前的转换必须通过显示转换,不支持隐式转换
var i int = 42 var f float64 = float64(i)
-
类型推导
当声明了一个不指定类型的变量时,Go会帮助我们进行类型推导,更具右边的值推导得出变量的类型
三、常量
由const
关键字声明,定义格式语法与变量类似
常量的值必须是能够在编译时就能够确定的,可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。所有常量的运算都可以在编译期完成,这样不仅可以减少运行时的工作,也方便其他代码的编译优化,当操作数是常量时,一些运行时的错误也可以在编译时被发现。
const (
e = 2.7182818
pi = 3.1415926
)
四、函数
-
参数
函数可以无参也可以是多个参数
package main import "fmt" func add(x int, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) }
若两个参数类型相同简写为:
package main import "fmt" func add(x, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) }
-
返回值
Go支持一个函数拥有任意个数的返回值 并且这些返回值可以进行命名。
返回值被命名后,会被视作定义在函数顶部的变量
package main import "fmt" func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } func main() { fmt.Println(split(17)) }
没有参数的
return
语句会返回以及命名的返回值。package main import "fmt" func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } func main() { fmt.Println(split(17)) }
没有参数的
return
语句会返回以及命名的返回值。在较长的函数中不建议使用直接返回,这样会影响代码的可读性。