(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)