(1)基础语法
【1】Go 程序的一般结构: basic_structure.go
// 当前程序的包名
package main
// 导入其他包
import . "fmt"
// 常量定义
const PI = 3.14
// 全局变量的声明和赋值
var name = "gopher"
// 一般类型声明
type newType int
// 结构的声明
type gopher struct{}
// 接口的声明
type golang interface{}
// 由main函数作为程序入口点启动
func main() {
Println("Hello World!")
}
【2】go 1.9版本对于数字类型,无需定义int及float32、float64,系统会自动识别。
package main
import "fmt"
func main() {
var a = 1.5
var b =2
fmt.Println(a,b)
}
## 运行结果 1.5 2
【3】在 Go 中,布尔值的类型为 bool,值是 true 或 false,默认为 false。
//示例代码
var isActive bool // 全局变量声明
var enabled, disabled = true, false // 忽略类型的声明
func test() {
var available bool // 一般声明
valid := false // 简短声明
available = true // 赋值操作
}
【4】局部变量声明后必须被使用,否则会抛出异常eclared but not used.全局变量是允许声明但不使用的。 同一类型的多个变量可以声明在同一行。
【5】多变量在同一行进行赋值
func main() {
//多变量在同一行进行赋值
a, b, c := 5, 7, "abc"
fmt.Print(a,b,c)
}
【6】Go语言条件分支
func main() {
var age int = 23
if age == 25 {
fmt.Println("true")
} else if age < 25 {
fmt.Println("too small")
} else {
fmt.Println("too big")
}
}
【7】值交换方式可以直接写成如下方式
a := 100
b := 200
a, b = b, a
print(a,b)
【8】Go 语言中变量可以在三个地方声明:
函数内定义的变量称为局部变量;函数外定义的变量称为全局变量;函数定义中的变量称为形式参数
(2)指针和引用
变量是一种使用方便的占位符,用于引用计算机内存地址。
Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
&:返回变量存储地址,&a将给出变量的实际地址
*:指针变量,*a是一个指针变量
一个变量指向内存中值所在的内存地址,我们称这个变量为指针类型
func main() {
var num int = 1
//类型前加 * 表示这是指针类型,指针类型的初始值为nil ,和其他语言的NUll,None一样
var ptr *int
fmt.Println("ptr 指针初始值:",ptr)
// & 表示获取num 变量的内存地址。 因为ptr 是指针,指向的是内存地址,所以需要赋值操作的是内存地址
ptr = &num
fmt.Println("ptr 指针的值:", ptr)
//*取指针内存地址所指向的值
fmt.Println("*ptr 指针的值:", *ptr)
*ptr = 2
fmt.Println("*ptr 指针更新后的值:", *ptr)
fmt.Println("原变量num的值:", num)
}
【1】指针类型存放的是一个引用的地址,因此可以直接修改变量的值;
【2】在指针类型前面加上 * 号(前缀)来获取指针所指向的内容,通过指针类型可以来操作对应变量,如上例所示ptr = 2可以直接操作num变量
【3】如果此时变量num发生了更新,那么ptr的值也会更新。ptr 是指针类型,并被赋予了 num 的内存地址,当num值发现变化时,实际也就是 ptr 内存地址所对应的值变了,因为 ptr内存地址所对应的 内存值就是num的值。
【4】var ptr *int; ptr是内存地址,*ptr是内存指向的对应数据值
【5】空指针,当一个指针被定义后没有分配到任何变量时,它的值为 nil。nil 指针也称为空指针。nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。
(3)数组
// 数组初始化
var arr1 = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
fmt.Println(arr1)
//声明一个长度不确定的数组
var arr2 = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
fmt.Println(arr2)
//通过下标来初始化数组元素,其中初始化了下标1和下标4的值,其他默认0
var arr3=[5]float32{1:1000,4:3000}
fmt.Println(arr3)