获得徽章 0
赞了这篇沸点
点赞一百, 明天裸辞, 干不下去了
448
#青训营 x 字节后端训练营#
协程和线程
协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。
线程:一个线程上可以跑多个协程,协程是轻量级的线程。
评论
#青训营 x 字节后端训练营#
进程和线程
A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。
B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。
展开
评论
#青训营 x 字节后端训练营#
Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。

指针地址和指针类型
每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int、*int64、*string等。
展开
评论
#青训营 x 字节后端训练营#
在 Go 中,与 C 数组变量隐式作为指针使用不同,Go 数组是值类型,赋值和函数传参操作都会复制整个数组数据。
func main() {
arrayA := [2]int{100, 200}
var arrayB [2]int

arrayB = arrayA

fmt.Printf("arrayA : %p , %v\n", &arrayA, arrayA)
fmt.Printf("arrayB : %p , %v\n", &arrayB, arrayB)

testArray(arrayA)
}

func testArray(x [2]int) {
fmt.Printf("func Array : %p , %v\n", &x, x)
}
展开
评论
#青训营 x 字节后端训练营#
方法定义:
func (recevier type) methodName(参数列表)(返回值列表){}

参数和返回值可以省略
举个例子:
package main

import (
"fmt"
)

//结构体
type User struct {
Name string
Email string
}

//方法
func (u User) Notify() {
fmt.Printf("%v : %v \n", u.Name, u.Email)
}
func main() {
// 值类型调用方法
u1 := User{"golang", "golang@golang.com"}
u1.Notify()
// 指针类型调用方法
u2 := User{"go", "go@go.com"}
u3 := &u2
u3.Notify()
}
展开
评论
#青训营 x 字节后端训练营#
切片:
1. 切片:切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。
2. 切片的长度可以改变,因此,切片是一个可变的数组。
3. 切片遍历方式和数组一样,可以用len()求长度。表示可用元素数量,读写操作不能超过该限制。
4. cap可以求出slice最大扩张容量,不能超出数组限制。0 <= len(slice) <= len(array),其中array是slice引用的数组。
5. 切片的定义:var 变量名 []类型,比如 var str []string var arr []int。
6. 如果 slice == nil,那么 len、cap 结果都等于 0。
展开
评论
#青训营 x 字节后端训练营#
数据库设计思路

1. 用户信息的基本属性:该用户表包含了用户的基本属性,包括用户名、用户账号、用户密码、用户电话、用户邮箱、用户状态、用户角色等。这些属性可以用于对用户进行基本的身份验证和管理。
2. 用户信息的补充属性:该用户表还包含了一些补充属性,例如用户昵称、用户头像、用户性别等。这些属性可以丰富用户的信息,提高用户体验,但也需要注意这些属性是否为必填项,以及如何保护用户的隐私。
3. 用户状态的设计:该用户表设计了用户状态字段,可以表示用户的状态,例如是否被锁定、是否被禁用等。这样可以方便对用户进行管理和维护。
4. 用户角色的设计:该用户表还设计了用户角色字段,可以表示用户的角色,例如普通用户、管理员、超级管理员等。这样可以方便对用户权限进行控制,实现更精细的权限控制。
5. 时间戳的设计:该用户表设计了创建时间和更新时间两个字段,分别记录用户数据的创建时间和最后一次更新时间。这样可以方便对用户数据的管理和维护。
展开
评论
#青训营 x 字节后端训练营#
ip地址和mac地址的区别
1. 层次不同:IP地址是网络层(第三层)协议中的地址,用于标识网络上的设备;而MAC地址是数据链路层(第二层)协议的地址,用于标识网络上的网卡。
2. 地址类型不同:IP地址是一个32位或128位的数字地址,通常使用点分十进制表示法或冒号十六进制表示法;而MAC地址是一个48位的二进制地址,通常使用十六进制表示法。
3. 分配方式不同:IP地址由网络管理员进行配置和管理,通过互联网号码分配机构(IANA)和互联网服务提供商(ISP)进行分配;而MAC地址由设备厂商预设,不可更改。
4. 使用场景不同:在网络通信中,IP地址通常用于标识网络上的设备,确定数据包的目的地以及路由选择等;而MAC地址通常用于直接通信和数据帧的发送和接收。
5. 协议不同:IP地址是互联网协议(IP)的一部分,支持不同的协议和服务,如TCP、UDP、HTTP等;而MAC地址是数据链路层协议的一部分,用于实现数据帧的发送和接收。
展开
评论
#青训营 x 字节后端训练营#
在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型。

自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如:

//将MyInt定义为int类型
type MyInt int
通过Type关键字的定义,MyInt就是一种新的类型,它具有int的特性。
展开
评论
#青训营 x 字节后端训练营#
fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。

向外输出
标准库fmt提供了以下几种输出相关函数。

Print
Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。
Fprint
Fprint系列函数会将内容输出到一个io.Writer接口类型的变量w中,我们通常用这个函数往文件中写入内容。
展开
评论
#青训营 x 字节后端训练营#
内置函数:
append -- 用来追加元素到数组、slice中,返回修改后的数组、slice
close -- 主要用来关闭channel
delete -- 从map中删除key对应的value
panic -- 停止常规的goroutine (panic和recover:用来做错误处理)
recover -- 允许程序定义goroutine的panic动作
real -- 返回complex的实部 (complex、real imag:用于创建和操作复数)
imag -- 返回complex的虚部
make -- 用来分配内存,返回Type本身(只能应用于slice, map, channel)
new -- 用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
cap -- capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
copy -- 用于复制和连接slice,返回复制的数目
len -- 来求长度,比如string、array、slice、map、channel ,返回长度
print、println -- 底层打印函数,在部署环境中建议使用 fmt 包
展开
评论
#青训营 x 字节后端训练营#
Go语言特性:
1. 高效的并发编程:Go语言天生支持并发编程,通过goroutine和channel等机制,可以轻松地实现高效的并发编程,这在处理大规模数据、高并发请求等场景下非常有用。
2. 简单易学:Go语言的语法简单易懂,学习曲线平缓,相比其他语言,入门门槛较低。
3. 快速编译:Go语言的编译速度非常快,特别适合大型项目和快速迭代,可以提高开发效率。
4. 内存管理:Go语言使用垃圾回收机制,自动管理内存,让开发者从手动管理内存的烦恼中解脱出来,提高了开发效率和代码质量。
5. 跨平台支持:Go语言可以编译成不同平台的二进制文件,支持Windows、MacOS、Linux等多个操作系统,可以方便地跨平台开发。
6. 应用广泛:Go语言在很多领域都有广泛的应用,例如云计算、网络编程、区块链等领域。
展开
评论
下一页
个人成就
文章被阅读 297
掘力值 31
收藏集
4
关注标签
23
加入于