Go语法阅读笔记
package main
import (
"errors"
"fmt"
"strconv"
"strings"
"time"
)
//结构体
type user struct {
name string
password string
}
type point struct {
x, y int
}
//函数
func add(a int, b int) int {
return a + b
}
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
func add2(n *int) {
*n += 2
}
func main() {
//if-else
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
// var
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)
//循环
i := 1
for {
fmt.Println("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
for i <= 3 {
fmt.Println(i)
i += 1
}
//switch
aa := 2
switch aa {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
//数组
var a1 [5]int
a1[4] = 100
fmt.Println(a1[4], len(a))
b1 := [5]int{1, 2, 3, 4, 5}
fmt.Println(b1)
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println(twoD)
//切片
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println(s[2])
fmt.Println(len(s))
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s)
c1 := make([]string, len(s))
copy(c1, s)
fmt.Println(c1)
fmt.Println(s[2:5])
fmt.Println(s[:5])
fmt.Println(s[2:])
good := []string{"g", "o", "o", "d"}
fmt.Println(good)
//map
m1 := make(map[string]int) //map[key]var
m1["one"] = 1
m1["two"] = 2
fmt.Println(m1)
fmt.Println(len(m1))
fmt.Println(m1["one"])
fmt.Println(m1["two"])
fmt.Println(m1["unknow"])
delete(m1, "one")
m2 := map[string]int{"one": 1, "two": 2}
fmt.Println(m2)
//range
nums := []int{2, 3, 4}
sum := 0
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:", i, "num:", num)
}
}
fmt.Println(sum)
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
fmt.Println(k, v)
}
for k := range m {
fmt.Println("key", k)
}
//指针
n1 := 5
add2(&n1)
fmt.Println(n1)
//结构体
a2 := user{name: "wang", password: "1024"}
b2 := user{"wang", "1024"}
c2 := user{name: "wang"}
c2.password = "1024"
var d2 user
d2.name = "wang"
d2.password = "1024"
fmt.Println(a2, b2, c2, d2)
fmt.Println(checkPassword(a2, "haha"))
fmt.Println(checkPassword2(&b2, "1024"))
u3, err1 := findUser([]user{{"wang", "1024"}}, "wang")
if err1 != nil {
fmt.Println(err1)
return
}
fmt.Println(u3.name)
//字符串操作
a3 := "hello"
fmt.Println(strings.Contains(a3, "ll"))
fmt.Println(strings.Count(a3, "l"))
fmt.Println(strings.HasPrefix(a3, "he"))
//字符串格式化
s3 := "hello"
n3 := 123
p3 := point{1, 2}
fmt.Println(s3, n3)
fmt.Println(p3)
fmt.Printf("s=%v\n", s3)
fmt.Printf("p=%v\n", p3)
fmt.Printf("p=%+v\n", p3)
fmt.Printf("p=%#v\n", p3)
//时间处理
now := time.Now()
fmt.Println(now)
t2 := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)
fmt.Println(t2)
//数字解析
n4, _ := strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n4)
}
func checkPassword(u user, password string) bool {
return u.password == password
}
func checkPassword2(u *user, password string) bool {
return u.password == password
}
//结构体方法&错误处理
func findUser(users []user, name string) (v *user, err error) {
for _, u := range users {
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}