helloworld
package main // 包名,当前文件属于哪个包
import (
"fmt"
"math"
) // 导入包
func main(){ // 每一个go项目都必须有一个main方法作为程序入口,如果有init()先执行init()
fmt.Printf("Hello World")
}
细节
导入必须调用,也可设置只导入不调用:
-
import _ "math" // 下划线表示匿名导入
禁止循环导入 包A导入了包B,包B也导入了包A
导出:想要对外暴露一个函数或者一个变量,只需要将其名称首字母大写即可
-
package e import "fmt" func Say() { fmt.Println("Helold") }
-
package main import ( "demo/src/main/e" "fmt" ) func main() { fmt.Println("Hello World") e.Say() }
标识符命名
- 只能由字母,数字,下划线组成
- 只能以字母和下划线开头
- 严格区分大小写
- 不能与任何已存在的标识符重复,即包内唯一的存在
- 不能与Go任何内置的关键字冲突
变量
声明
- int和float默认值是0
- string默认""
var a int
var b float32
var c float32, d float64
var c, d float64 //c、d类型相同可只写一个
赋值
e, f := 9, 10 //不能写变量类型;必须使用否则报错
var g = "Ricardo" //自动推导变量类型
匿名变量
在赋值后,会被立即释放
func main() {
// 调用函数,仅仅需要第二个返回值,第一,三使用匿名变量占位
_, v, _ := getData()
fmt.Println(v) //4
}
func getData() (int, int, int) {
// 返回3个值
return 2, 4, 8
}
全局变量
函数外部的变量
常量
x const XXX = "xxxx"
判断
func pow(x, n, lim float64) float64 {
v := math.Pow(x, n)
if v < lim {
return v
}
return lim
}
循环
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
for {} //无限循环
}
数组
声明
var a [10]int
切片
- 切片并不存储任何数据,它只是描述了底层数组中的一段。
- 更改切片的元素会修改其底层数组中对应的元素。
- 与它共享底层数组的切片都会观测到这些修改
b := a[low : high] //包含从下标low到high-1的元素
b[0] = 1 //a[low] = 1