go基础 | 青训营笔记

375 阅读2分钟

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

环境配置

安装golang

进入go.dev选择版本下载即可

安装编辑器或ide

VScode或goland进入官网下载即可

变量

var a = "initial"

var b int = 1

f := float32(e)

循环

for循环条件没有括号,带括号编译器会默认去除

只有for循环,没有while和do while循环

// for内不写条件 死循环
for {
    ...
    break
}

switch

每一个case分支会默认使用break,这与c++不同

switch a {
case 1:
    ...
case 2:
    ...
}

switch内可以使用任意的变量类型

切片

可变长数组

s := make([]string, 3)
// 使用append追加元素
s = append(s, "d")

map

go中的map是完全无序的

// []内为键的类型,后面为值的类型
m := maek(map[string]int)
// 使用delete删除
delete(m,"one")

函数

可以返回多个值

func exits(m map[string], k string)(v string, ok bool) {
    v, ok = m[k]
    return v, ok
}

指针

主要用于值修改

func add2ptr(n *int) {
    *n += 2
}
​
// 调用
add2ptr(&n)

结构体

type user struct {
    name string
    password string
}

可以用指针传参,方便对结构体修改,也能减少对大结构体拷贝的开销

结构体方法

类似类成员函数

func (u user) checkPassword(password string) bool {
    return u.passwordd == password
}
// 带指针
func (u *user) resetPassword(password string) {
    u.passwordd = password
}

错误处理

传入err类型如:err error

在函数错误中分两类返回,正确和错误

正确时进行正确业务逻辑处理,err 出返回空

错误时 return error.New("...")

字符串操作

a := "hello"
// 是否包含
strings.Contains(a, "ll") //true
// 个数
strings.Count(a, "l") // 2
// 长度
len(a) // 5
// 这里需要注意中文的长度不是字符个数

JSON处理

// 第一个字母大写
type userInfo struct {
    Name String
    Age int 'json:"age"' // 将输出时变为小写
    Hobby []string
}

加上'json:"age"'的输出为Name:...,age:...,Hobby:...

可以直接使用json.Marshal(a)进行序列化

运行

写代码时会自动import导包,相比其他语言更加方便

一个go代码要运行,package 需要main