速战速决 go - go 概述: 基本语法,nil

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

速战速决 go - go 概述: 基本语法,nil

示例如下:

summary.go

// go 概述 - 基本语法,nil
// 注:
// 1、go 是通过 GC 清理的
// 2、go 是通过开头字母大小写来控制可见性的
//    如果定义的常量、变量、类型、接口、接口中的方法,结构体、结构体中的成员、函数等的名称是大写字母开头,则表示能被其它包访问或调用,非大写字母开头就只能在包内使用

package main

import (
	"fmt"
	"math"
)

func summary() {
	summary_sample1()
	summary_sample2()
}

// 基本语法
func summary_sample1() {

	// 运算符 =, +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=, ||, &&, |, ^, &, ==, !=, <, <=, >, >=, <<, >>, +, -, *, /, %, !, *, &, ++, --

	// 变量的声明和初始化
	var a int = 1
	var b = 2           // 编译器推导类型
	var c, d int = 3, 4 // c, d int 的意思是 c 和 d 都是 int 类型
	var (
		e int = 5
		f     = 6
	)

	// 声明的简短格式(必须要初始化,必须要由编译器推导类型,只能在函数内部声明)
	g := 7
	h, i := 8, 9

	// const 常量
	const pi = math.Pi
	// _ 表示匿名变量,后续是不可使用的,如果你使用这个变量则会报错
	var _ int = 10

	fmt.Println(a, b, c, d, e, f, g, h, i, pi) // 1 2 3 4 5 6 7 8 9 3.141592653589793

	// 通过 {} 构造数组或切片或字典时,需要注意
	// } 与最后一个元素在同一行时,最后一个元素后面不用加逗号
	j := [3]int{1, 2, 3}
	// } 与最后一个元素不在同一行时,最后一个元素后面要加逗号
	k := [3]int{
		1, 2, 3,
	}
	fmt.Println(j, k) // [1 2 3] [1 2 3]

	l := &struct {
		a int
	}{}
	// 虽然 l 是指针,需要这么 (*l).a = 123 使用,但是 go 是支持语法糖(syntactic sugar)技术的,他会自动转换的,所以你可以这么 l.a = 456 使用
	(*l).a = 123
	l.a = 456
	fmt.Println(l) // &{456}
}

// nil
func summary_sample2() {
	// nil 和 nil 是不能做相等判断的,下面这句会编译时报错
	// fmt.Println(nil == nil)

	// 指针的默认值是 nil
	var a *int
	var b *int
	var c *string
	// 指针 a, b, c 本身的值都是 0x0
	fmt.Printf("%p, %p, %p\n", a, b, c) // 0x0, 0x0, 0x0
	// 判断指针是否为 nil 就用 == 即可
	fmt.Println(a == nil, b == nil, c == nil) // true true true
	// 指向相同类型的指针,如果他们都是 nil 则可以做相等判断(切片类型除外)
	fmt.Println(a == b) // true

	// 指向不同类型的指针,即使他们都是 nil 也不能做相等判断,下面这句会编译时报错
	// fmt.Println(a == c)

	var d []int
	var e []int
	// 可以通过 == 判断某一个切片是否为 nil
	fmt.Println(d == nil, e == nil) // true true
	// 但是因为切片类型是不能通过 == 做相等判断的,所以即使两个切片类型的指针都是 nil 也不能做相等判断,下面这句会编译时报错
	// fmt.Println(d == e)
}

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

posted @ 2022-02-08 14:11  webabcd  阅读(3)  评论(0编辑  收藏  举报