Go语言基础

53 阅读2分钟

1 基本语法

fmt包:输入输出字符串、格式化字符串
%v:可以打印任何类型的变量;%+v、%#v:可以得到更详细的信息,通常在结构体中
运行:

  • go run main.go
    • go build main.go
    • ./main

1.1 变量

1.变量类型:整型、字符串、浮点型
2.变量声明:

  • var a = "hello" // 自动推导类型
  • var a,b int = 1,2 // 自定义类型
  • f := float(e) // f = e的值
  • 常量:const s string = "constant"

1.2 if else

if 7%2 == 0{    //if后面没有括号
    fmt.Println("7 is even")
}else{
    fmt.Println("7 is odd")
}

1.3 循环 for

只有for循环

for{
    fmt.Println("loop")
    break
}
for j := 7; j < 9; j++{
    fmt.Println(j)
}

switch:不需要break,也可以在每个case里写条件分支

a := 2
switch a{
case 1:
    fmt.Println("one")
case 2:
    fmt.Println("two")
case 3:
    fmt.Println("three")
case 4:
    fmt.Println("four")
default:
    fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
    fmt.Println("one")
default:
    fmt.Println("two")

1.4 数组

具有编号且长度固定的元素序列,var a [5]int a[4]=100

1.5 切片

可变长度的数组,用make来创建一个切片
s := make([]string, 3)
s = append(s, "d")
s[2:5] 包含左不含右

1.6 map

s := make(map[string]int) string:key的类型,int:value的类型
m["one"] = 1
读取:fmt.Println(m["one"])

1.6 range

用range快速遍历,会返回两个值,一个是索引,一个是对应位置的值

1.7 函数

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
}

1.8 指针

对传入的参数进行修改

func add2ptr(n *int) {
    *n += 2
}
add2ptr(&n)

1.9 结构体

结构体带类型的字段集合

type user struck{
    name string
    password string
}

a := user{name: "liu", password: "1024"}
b := user{"liu", "1024"}

a.name = "miao"

1.10 错误处理

如果该函数可能会出错,那么需要在返回值添加error,同时返回值也是两个
返回值之后要先判断error是否有值

func findUser(users [], name string) (v *user, err error) {
    for _, u := range users{
        if u.name == name{
            return &u, nil
        }
    }
    return nil, error.Now("Not found")
}
u, err := findUser([]user{{"wang","1024"}}),"wang")
if err != nil{
    fmt.Println(err)
    return 
}
fmt.Println(u.name)  // wang

1.11 字符串操作

image.png

1.12 时间处理

now := time.Now()  //当前时间
t := time.Date(2022,5,16,17,23,1,4,time.UTC())   //指定时间