學習頁碼:32-52頁 | 學習頁數:20頁 | 學習時間:5.5h
一、變量(variables.go)
package main
func main() {
//1.變量聲明
var v1 int
var v2 string
var v3 [10]int
var v4 []int
var v5 map[string]int
var v6 struct {
f int
}
var v7 *int
var v8 func(a int) int
var (
v9 int
v10 [5]int
)
//2.變量初始化
var v11 int = 1
var v12 = 1
v13 := 1
//3.變量指派
var v14 int
v14 = 1
//1>多重指派
var i int = 1
var j int = 2
i, j = j, i
//4.匿名變量
_, _, nickName := GetName()
}
func GetName() (firstName, lastName, nickName string) {
return "May", "Chan", "Chibi Maruko"
}
二、常量(const.go)
package main
import "fmt"
//import "os"
func main() {
//1.字面常量
//2.常量定義
const PI float32 = 3.1415926
const P = 1
const (
AA int64 = 1024
BB int = 2
)
const A, B, C = 1, 2, "abc"
//const D = os.Getenv("HOME") // const initializer os.Getenv("HOME") is not a constant
fmt.Println(A, B, C)
//3.預定義常量
const (
A1 = iota
A2 = iota
A3 = iota
)
const (
B1 = iota
B2
B3
)
fmt.Println(A3, B3)
}
package main
import (
"fmt"
"math"
)
func main() {
//1.布爾類型
var a1 bool
a1 = true
a2 := (1 == 1)
var a3 bool
//a3 = 1 //cannot use 1 (type int) as type bool in assignment
fmt.Println(a1, a2, a3)
//2.整數類型
//1>類型表示
var b1 int32 //b1 declared and not used
b2 := 24
b1 = int32(b2) //cannot use b2 (type int) as type int32 in assignment
//2>數值運算 +、 、*、/和%
b1 = 5 % 2
fmt.Println(b1)
//3>比較運算 >、<、==、>=、<=和!=
//4>邏輯運算 x << y 左移 x >> y 右移 x^y 異或 x&y 與 x|y 或 ^x 取反
//3.浮點數
//1>浮點數表示
var c1 float32
c2 := 12.0
c1 = float32(c2) //cannot use c2 (type float64) as type float32 in assignment
fmt.Println(c1, c2)
//2>浮點數比較
var (
c3 float64 = 12.1
c4 float64 = 12.0
)
rs := isEqual(c3, c4, 0.001)
fmt.Println(rs)
//4.複數
//1>複數表示
var d1 complex64
d1 = 12 + 12i
d2 := 12 + 12i
d3 := complex(12, 12)
fmt.Println(d1, d2, d3)
//5.字元串
var str string
str = "Hello world"
ch := str[0]
fmt.Printf("The length of \"%s\" is %d \n", str, len(str))
fmt.Printf("The first character of \"%s\" is %c.\n", str, ch)
//1>字元串操作
var (
x string = "Hello"
y string = "123"
)
fmt.Printf("字元串連接配接\"%s\",字元串長度\"%s\",取字元\"%s\" \n", x+y, len(x), x[1])
//2>字元串周遊
n_str := "Hello,世界"
n := len(n_str)
for i := 0; i < n; i++ {
ch := n_str[i] // 的 為byte
fmt.Println(i, ch)
}
for i, ch := range n_str {
fmt.Println(i, ch) //ch的 為rune
}
//6.字元類型
var e1 byte
var e2 rune
fmt.Println(e1, e2)
//7.數組
//1>數組聲明
var f1 [32]float32
var f2 [2 * 2]int
var f3 [10]*float64
var f4 [2][2]int
fmt.Println(f1, f2, f3, f4)
//2>數組周遊
for i := 0; i < len(f2); i++ {
fmt.Println("Element", i, "of array is", f2[i])
}
for i, v := range f2 {
fmt.Println("Array element[", i, "]=", v)
}
//3>值類型
f5 := [5]int{1, 2, 3, 4, 5} // annot use f5 (type [5]int) as type [10]int in argument to modify
modify(f5)
fmt.Println("In main(), array values:", f5)
//8.數組切片
//1>建立數組切片 基于數組或直接建立
var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice []int = myArray[:5] // myArray[:]所有 myArray[5:]從第5個開始 myArray[:5]前5個
fmt.Println("Elements of myArray: ")
for _, v := range myArray {
fmt.Print(v, " ")
}
fmt.Println("\nElements of mySlice: ")
for _, v := range mySlice {
fmt.Print(v, " ")
}
//建立一個初始元素個數為5的數組切片,元素初始值為0:
mySlice1 := make([]int, 5)
//建立一個初始元素個數為5的數組切片,元素初始值為0,并預留10個元素的存儲空間:
mySlice2 := make([]int, 5, 10)
//直接建立并初始化包含5個元素的數組切片:
mySlice3 := []int{1, 2, 3, 4, 5}
fmt.Println("\n", len(mySlice1), len(mySlice2), len(mySlice3))
//2>元素周遊
//3>動态增減元素
mySlice4 := make([]int, 5, 10)
mySlice4 = append(mySlice4, 1, 2, 3)
mySlice4 = append(mySlice4, mySlice1...)
fmt.Println("len(mySlice4):", len(mySlice4))
fmt.Println("cap(mySlice4):", cap(mySlice4))
//4>基于數組切片建立數組切片
oldSlice := []int{1, 2, 3, 4, 5}
newSlice := oldSlice[:3]
for _, v := range newSlice {
fmt.Println("前三個元素", v)
}
//5>内容複制
slice1 := []int{1, 2, 3, 4, 5}
slice2 := []int{5, 4, 3}
copy(slice2, slice1)
for _, v := range slice2 {
fmt.Println("slice2", v)
}
slice1 = []int{1, 2, 3, 4, 5}
slice2 = []int{5, 4, 3}
copy(slice1, slice2)
for _, v := range slice1 {
fmt.Println("slice1", v)
}
}
func modify(array [5]int) {
array[0] = 10
fmt.Println("In modify(), array values:", array)
}
func isEqual(f1, f2, p float64) bool {
return math.Dim(f1, f2) < p
}
package main
import "fmt"
type PersonInfo struct {
ID string
Name string
Address string
}
func main() {
//1.變量聲明 personDB代表變量名 string代表鍵類型 PersonInfo代表值類型
var personDB map[string]PersonInfo
//2.建立,可指定存儲能力
personDB = make(map[string]PersonInfo, 20)
//建立并初始化
personDB2 := map[string]PersonInfo{"1234": PersonInfo{"1234", "tom", "room"}}
//3.元素指派
personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203,..."}
personDB["1"] = PersonInfo{"1", "Jack", "Room 101,..."}
//4.元素删除
delete(personDB2, "1")
//5.元素查找
person, ok := personDB["1234"]
if ok {
fmt.Println("Found person", person.Name, "with ID 1234.")
} else {
fmt.Println("Did not find person with ID 1234.")
}
}