速戰速決 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章