Learning Go - 1 basic
1. 包
package main // Go程序都是由包组成的,入口是包main
import ( // 更好的 打包导入,也可以分开写
"fmt"
"math/rand" // 包名与导入路径的最后一个目录一致,即rand
)
func main() {
rand.Seed(5) // 首字母大写的名称是被导出的, seed报错不允许导出
fmt.Println("My favorite number is", rand.Intn(10)) // 逗号 自带空格
}
2. 函数
// 类型 在变量名 之后,且可以省略前边相同的类型
// 函数可以返回 任意数量的返回值
func swap(x, y string) (string, string) { //func关键字必须有!
return y, x
}
// 返回值可以被命名,并且像变量那样使用
func split(sum int) (x int, y int) {
x = sum * 4 / 9
y = sum - x
return // 没有参数的 return 语句返回结果的当前值。也就是`直接`返回 return x, y
}
func main() {
a,b := swap("hello", "world")
fmt.Println(a, b)
fmt.Println(split(17))
}
3. 变量
var c, python bool // 变量列表,类型在后,必须有类型
var a, b = 3, 4 // 可以初始化,有且只有 每个变量对应一个,类型可以不写(编译器推导出来了)
func main() {
var i int // var的作用范围:函数内或外边的包内
var s string
fmt.Println(i, c, python, s) // 默认值:0 false false ""
x := "no!" // := 简洁赋值语句,用于替代 var 定义; := 不能在函数外用
var f float64 = math.Sqrt(float64(x*x + y*y))
x = int(f) // 不同类型之间的项目赋值需要显式转换,删掉int报错
}
4. 基本类型
Basic types:
bool
string
int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr //The int, uint, and uintptr types are usually 32 bits wide on 32-bit systems and 64 bits wide on 64-bit systems. 一般就使用int即可
byte // uint8 的别名
rune // int32 的别名,代表一个Unicode码
float32 float64
complex64 complex128
var ( // 变量的定义也可以“打包”在一个语法块中。
ToBe = false
MaxInt uint64 = 1<<64 - 1
z complex128 = cmplx.Sqrt(-5 + 12i)
)
func main() {
const f = "%T (%v)\n" // printf函数,格式可以存成 const常量
fmt.Printf(f, ToBe, ToBe) // bool (false)
fmt.Printf(f, MaxInt, MaxInt) // uint64 (18446744073709551615)
fmt.Printf(f, z, z) // complex128 ((2+3i))
}