获得徽章 0
#青训营 x 字节后端训练营# 通过学习和使用Go Web开发套装中的这些工具和框架,我能够更高效地构建和开发Web应用程序。Gin提供了灵活的路由和中间件机制;Gorm简化了与数据库的交互;Viper管理了应用程序的配置;Validator用于验证数据的有效性;Zap记录了应用程序的日志;Go-Redis简化了对Redis的操作;GRPC实现了高性能的RPC通信;而新版本的Golang包管理则使依赖管理更加方便和可靠。这些工具和框架使我能够更专注于业务逻辑的实现,提高了开发效率,并帮助我构建出高质量、可靠和可扩展的应用程序。
展开
评论
#青训营 x 字节后端训练营#
一. 零值、空值、空切片与空结构

1.零值

- 值类型 → [Bool: false] [Number: 0] [String: “”] ,初始值取决于元素或字段
- 引用类型 → 均nil ,包括pointer指针、function函数、interface接口、slice切片、channel管道、map映射

- 考虑安全性,通常需要为变量赋予一个默认值,例如

```go
package main

import "sync"

type Value struct {
mu sync.Mutex //互斥锁类型,保护共享资源的并发访问
val int
}

//递增操作的方法
func (v *Value)Incr(){
defer v.mu.Unlock() //解锁

v.mu.Lock() //上互斥锁,确保只有一个goroutine能进入临界区
v.val++
}

func main() {
var i Value //默认0值

i.Incr()
}

// 主要实现互斥锁(Mutex)实现并发安全的操作
// 使用了互斥锁,保证了对共享资源的安全访问,避免了并发访问导致的数据竞争和不一致性。
```

⚠️:`:=`是**声明并且初始化变量,已经被分配了内存地址,故不是零值nil**

```go
var s1 []string
s2 := []string{} // 或者等同于 var s2 = []string{}

//其中,s1、s2输出都为 -> [],但一个是零值nil,一个是空字符串
fmt.Println(s1 == nil) // true
fmt.Println(s2 == nil) // false
```

2.nil

- 主要是用来表示引用类型的零值,是Golang的标识符

- nil ≠ nil 问题原因 → interface
- inteface有两个属性**Type**and**Value**


- 可以有两种方式解决,可以分别将类型和值分别和nil比较或者使用反射包reflect
展开
评论
关注了
个人成就
文章被点赞 6
文章被阅读 735
掘力值 79
收藏集
2
关注标签
0
加入于