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
语句会返回以及命名的返回值。
在较长的函数中不建议使用直接返回,这样会影响代码的可读性。