Go基础 | 青训营笔记

41 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

变量定义

  1. 可以使用var定义变量,如:
var a = "initial"
var e float64 //默认值为0
var p = float32(2)
  1. 可以使用 := 方法定义
f := float32(e)
j := 1
  1. 可以使用const定义常量
const s string = "constant"

for

for {
    fmt.Println("loop")
  }//死循环
for j := 7; j < 9; j++ {
    fmt.Println(j)
  }//一般循环

if

if不需要加括号

if 8%4 == 0 {
    fmt.Println("8 is divisible by 4")
  }

Switch

  1. go中的switch和c中的不同,当进入到case之后,尽管没有break,也不会继续执行下面的case
a := 1
switch a {
case 1:
  fmt.Println("one")//不会执行case 2
case 2:
  fmt.Println("two")
  1. 可以不用在case后面写变量,在case中直接写表达式即可
t := time.Now()
switch {
case t.Hour() < 12:
  fmt.Println("It's before noon")
default:
  fmt.Println("It's after noon")
}

array

定义

var a [5]int //一维数组定义
var twoD [2][3]int //二维数组定义
b := [5]int{1, 2, 3, 4, 5} //赋初值定义

slice(切片)

定义

s := make([]string, 3) //方法1
var s = make([]string,3) //方法2

赋值方法

s[0] = "a"
s = append(s, "d")

使用切片方法取值

//s = {"a","b","c","d","e","f"}
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5])  // [a b c d e]
fmt.Println(s[2:])  // [c d e f]

map

go中的map是随机存储的 没有顺序

定义

m := make(map[string]int)
//map[索引类型]值类型
m2 := map[string]int{"one": 1, "two": 2} //赋值定义1
var m3 = map[string]int{"one": 1, "two": 2} //赋值定义2

赋值

m["one"] = 1

可以返回两个值,第一个为值,第二个为该项是否存在(bool)

r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false

删除

delete(m, "one")

range

nums := []int{2, 3, 4}
for i, num := range nums {
		if num == 2 {
		fmt.Println("index:", i, "num:", num) // index: 0 num: 2
	}
}

m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
	fmt.Println(k, v) // b 8; a A
}
for k := range m { // 单独只有一个 是key
	fmt.Println("key", k) // key a; key b
}

函数

func add(a int, b int) int {
	return a + b
}

//利用指针 改变原来值
//原来值+2
func add2ptr(n *int) {
	*n += 2
}

//一个函数可以返回多个值
//func 函数名称(函数参数及其类型)(函数返回类型)
func exists(m map[string]string, k string) (v string, ok bool) {
	v, ok = m[k]
	return v, ok
}

结构体

定义

type user struct {
	name     string
	password string
}

赋值

a := user{name: "wang", password: "1024"}
b := user{"wang", "1024"}
c := user{name: "wang"}//此时c的password为空字符串

//也可以通过.的形式赋值
var d user
d.name = "wang"
d.password = "1024"

与函数结合

//func (结构体) 函数名(函数参数及其类型)(函数返回类型)
func (u user) checkPassword(password string) bool {
	return u.password == password
}
func main() {
	a := user{name: "wang", password: "1024"}
	fmt.Println(a.checkPassword("2048")) // true
}

异常处理

通过函数的多个返回结合if来进行错误捕捉