【青训营】第一节课笔记|青训营笔记

175 阅读2分钟

【青训营】第一节课笔记|青训营笔记

字节、美团、滴滴、百度、腾讯、七牛云、paypal、Facebook、google、bilibili都在用go

字节跳动用go: 早期业务团队没有java背景,用python 2014python开始出现性能问题 用golang重写了python服务,并且得到推广

var定义

:=会根据上下文自动确定类型

if else

和python一样,没有括号(也可以写括号)

循环

只有一种for循环,初始化;结束条件;自增

如果只有condition(结束条件)那就是while循环

如果什么都没有那就是while true

for initialization; condition; post {
    // zero or more statements
}

switch

golang里面switch是不需要每一个都break的

golang的switch可以不写输入变量的语句,直接写条件分枝,还可以写判断

t := time.Now()
switch {
case t.Hour() < 12:
   fmt.Println("It's before noon")
default:
   fmt.Println("It's after noon")
}

数组

很少用数组,因为他的长度是固定的

切片 slice

用make创造切片

append添加元素,但是必须赋值回去 copy拷贝且表

map 哈希或者字典

用make创建新的map

可以用方括号写入,也可以用方括号读取

用方括号读取的时候,r, err = mode['key'],可以判断读取是否正确

range

对于数组/slice,返回“索引,值” 对于字典,返回“key,value”

函数

变量类型后置

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
}

指针

和c++的差不多,都是函数里用的 函数传入参数的时候,用*来表示该变量是指针

结构体

带类型的字段的集合

用结构体名称初始化,后面跟着大括号

type user struct {
   name     string
   password string
}


a := user{name: "wang", password: "1024"}

c := user{name: "wang"}
没有初始化的话就初始化为空值

这里有个问题,如果我已经复制了一段代码,想再复制一段代码在这个代码段中,就被自动再次判断一次,我觉得没必要

会进行一次这种文档解析 image.png

然后变成下面这样

type user struct {
  name     string
  

a := user{name: "wang", password: "1024"}

  
  password string
}

用指针传入结构体

结构体方法

不带指针就是直接调用 带指针就是修改

错误处理

喜欢在函数return的时候第二个值放错误处理

字符串操作

直接查表就行

字符串格式化

在“”里面放%

一般用%v,表示任何类型

%+v,%#v都是更加详细的输出

%.2f

json操作

最简单的方法不用操作,直接对于结构体字段的第一个字母大写

  • 对于结构体字段的第一个字母大写
  • 使用json.Marshal(a)序列化成byte数组(强制类型转换可以打印出字符串)
  • json.Unmarshal(a)返序列化到一个空的变量

时间处理

查表即可 主要是这个不太好理解

time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")

时间戳是最常用的

字符串和数字的转换:strconv

也是查表

进程信息

标题:「Go 语言上手-基础语言」第三届字节跳动青训营 - 后端专场

网址:live.juejin.cn/4354/yc_bas…