Go语法阅读笔记

34 阅读2分钟

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")
}