Go语言之旅
Go By Example
package main // 定义main包
//使用圆括号分组形式导入别的包
import (
"fmt"
"math"
"math/rand" //包名与导入路径的最后一个元素一致,"math/rand" 包中的源码均以 package rand 语句开始
)
func main() {
fmt.Println(math.Pi) //math包中的Pi以大写字母开头,是导出名,可以在包外访问
fmt.Println("My favorite number is", rand.Intn(10))
}
基本类型:
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名
// 表示一个 Unicode 码点
float32 float64
complex64 complex128
var关键词
声明变量:
package main
import "fmt"
//var语句可以出现在包、函数级别
var e1, e2 int
//var关键词用于声明一个变量列表,类型声明跟在后面
//var变量在声明的时候也可以直接初始化
var num3, num4 int = 3, 4
//同样可以采用分组的形式进行变量声明
var (
// 在声明时初始化值已经存在的话,可以忽略类型声明
num1, num2 = 1, 2
)
func main() {
//var语句可以出现在包、函数级别
var c, python, java = true, false, "no!"
fmt.Println(num1, num2, num3, num4, c, python, java)
// 没有明确初始值的变量声明会被赋予零值
// 在Java中这样使用局部变量的话,已经会因为没有给局部变量初始化而报错了
var i int // 0
var f float64 // 0
var b bool // false
var s string // ""
fmt.Printf("%v %v %v %v %v %q", e1, e2, i, f, b, s)
}
输出:
1 2 3 4 true false no!
0 0 0 0 false ""
短变量声明:
:=
可在类型明确的地方替代var关键词
声明,函数外的语句都必须以关键词开始(var, fun等等),因此:=
不能在函数外使用。
:=
或者var 变量=
语法,否则还是采用var 变量 变量类型
的形式package main
import "fmt"
func main() {
//类型明确的地方使用,相比于上面类型明确的var变量声明还更加简洁了一个var关键词
i := 1
j := 2
fmt.Println(i, j)
//变量类型明确时的,变量类型右值推导
var k = i
l := i
fmt.Println(k)
fmt.Println(l)
//不同类型的项之间赋值需要显式转换
var f float64
o := 42
f = float64(o)
fmt.Println(f
}
常量:
常量用const关键词
声明,只能用=
声明。
package main
import "fmt"
//同样可以分组定义,类型明确省去了类型声明
const (
i = 1
j = 2
)
func main() {
//函数中也可以声明常量
const k = 3
fmt.Println(i, j, k)
}
package main
import "fmt"
// 和一般函数声明一样,只是了类型放在变量后面,返回值也放在后面
func subtract(i int, j int) int {
return i - j
}
//相同类型的parameters只需要声明一次类型
func add(i, j int) int {
return i + j
}
//多值返回,func声明的时候用(,..)表示返回值,return 的时候直接,分隔
func swap(i, j string) (string, string) {
return j, i
}
//命名返回值
func divide(i, j int) (x, y int) {
x = i / 10
y = i % 10
return
}
func main() {
fmt.Println(add(1, 2))
fmt.Println(subtract(2, 1))
a, b := swap("hello", "world")
fmt.Println(a, b)
fmt.Println(divide(18, 10))
}
输出:
3
1
world hello
1 8