测试
不得不说,学这个之前我只会APIfox点一点……
回归测试:质量保证人员手动测试项目可用性(刷抖音、看评论)top1
集成测试:对系统功能的测试(对暴露的接口自动化测试)top2
单元测试:开发者对单独的函数模块测试 top3
单元测试规则
所有测试文件都以 _test.go 结尾
测试函数写成 func TextXxx(t *testing.T)
初始化逻辑放到 TestMain 中(准备测试的数据->跑测试->释放资源)
123└─test print.go print_test.go
如果要测试print.go中的函数输出是否正确
123456// print.gopackage testfunc HelloTom() string { return "John"}
然后建立print_test.go,其实这个时候会发现这个吉祥物就有点不一样,而且整个goland文件有入口可以运行了,而不是只能从main.go进入,下面就填写Testxxxx(T &testint.T){}
最后三角 ...
Goroutine
Goroutine
并发x并行x串行并发: 并发是一个核运行多线程程序,说人话就是一个程序分为好多个子程序,然后一个人干,这个人一会干这个一会干那个,类似于ABCBCABCA….这样子干,因为计算机运行速度很快,就给人一种“多线程”的感觉,一个人在同时做很多事情
并行: 并行就是多核运行多线程程序,说人话就是多个人一起干多个程序
串行: 多线程程序中,要先干完线程A,再干线程B……
并发就是一个人同时吃三个馒头,并行是三个人吃三个馒头
在Go实战中描述
并行是让不同的代码片段在不同的物理处理器上执行,关键是同时做很多事情
并发是指同时管理很多事情,这些事情可能做了一半就被暂停就去做别的事情了
一般来说,我们总觉得并行更好,因为他多步进行,但是事实上操作系统上的资源总是少得可怜,从”使用较少的资源做更多的事情”的哲学出发,并发只使用了很少的资源,却能够管理很多事情,注意这里是管理。
线程和协程线程: 内核态,线程跑多个协程,栈MB级别
协程: 用户态,轻量级线程,栈KB级别
没啥好理解的,反正协程就是轻量
12345678910func hello(i int) { ...
Socks5
这个是NX的Socks5的书写,实不相瞒,写完后Any告诉我这个都没什么用,配网啥的都是靠工具来配的,看个乐子就行
原理RFC 1928 - SOCKS 5 协议中文文档「译」 - 光韵流转 (quarkay.com)
认证
客户端向服务端发送
12345678910// +----+----------+----------+// |VER | NMETHODS | METHODS |// +----+----------+----------+// | 1 | 1 | 1 to 255 |// +----+----------+----------+// VER: 协议版本,socks5为0x05// NMETHODS: 支持认证的方法数量// METHODS: 对应NMETHODS,NMETHODS的值为多少,METHODS就有多少个字节。RFC预定义了一些值的含义,内容如下:// X’00’ NO AUTHENTICATION REQUIRED// X’02’ USERNAME/PASSWORD
服务端响应
12345// +----+--------+/ ...
在线字典
学习链接
流程
控制台输入单词 go run main.go world
将这个 world 当作请求的body一部分,传给相应的翻译网站
网站翻译后获取Responsebody
print result
难题
如何连接相应的翻译网站
如何获取相应的翻译网站
如何实现通用
准备的翻译网站
其实具体连接获取代码都是有网站可以实现的
只要输入相应的URL bash
就可以转成相应的Go语言
具体的怎么操作就不展现了,反正就是跟着NX做的
有个小问题就是那个转Go的网站翻译出来的有问题
所以我直接抄NX的代码,发现可以用就直接用了
123456789101112131415161718192021222324252627282930313233343536373839404142434445package mainimport ( "fmt" "io/ioutil" "log" "ne ...
猜随机数
随机数12345maxNum := 100fmt.Println("Create a random number")//rand.Seed(time.Now().UnixNano())random := rand.Intn(maxNum)fmt.Println(random)
不用设立种子也能生成随机数。
用户输入输出猜随机数小游戏
1234567891011121314151617181920212223242526272829303132func main() { maxNum := 100 secretNumber := rand.Intn(maxNum) // fmt.Println("The secret number is ", secretNumber) fmt.Println("Please input your guess") reader := bufio.NewReader(os.Stdin) for { input, err := reader.ReadString(' ...
事务
普通事务/嵌套事务1234567891011121314151617181920212223242526272829// 事务操作type TMG struct { ID uint Name string}func TestTransaction() { Db.AutoMigrate(&TMG{}) flag := false // 如果外层的事务出错,内层事务完好,则所有事务都不能执行 // 如果内层的事务出错,外层事务完好,则除了内层事务之外的操作都能执行 if err := Db.Transaction(func(tx *gorm.DB) error { tx.Create(&TMG{Name: "汉子"}) tx.Create(&TMG{Name: "威武"}) // 多重事务开启 tx.Transaction(func(tx *gorm.DB) error { tx.Create ...
多态
什么是多态
一开始我也不是很理解,那么我用我学了三天的JAVA基础来理解
首先多态只存在于 Has One 和 Has Many 中
把多态用类的思想去理解,把一整个结构体当作一个类
而某个类的属性,比如说纸飞机类,有很多人的纸飞机类
由此就会产生多态
12345678910111213141516171819type A struct { ID uint Name string C C `gorm:"polymorphic:Owner;"`}type B struct { ID uint Name string C C `gorm:"polymorphic:Owner;"`}type C struct { ID uint Name string OwnerType string OwnerID uint}
GORM 入门笔记(九)多态的概念与使用 | NX の 博客 (nickxu.me)
算了描述不清楚………..
到时候用到了再 ...
关联
tips:
关联自动创建,更新
关联模式Association()
要启动关联模式,请指定源模型和关系的字段名称。
源模型必须包含主键,并且关系的字段名称应与现有关联匹配。
12Db.Model(&User).Association(&Teacher)...// delete,replace,append...// Model-源模型 Teacher是关系的字段
关联标签
标签
描述
foreignKey
指定在联接表中用作外键的当前模型的列名。
references
指示连接表的外键映射到的引用表中的列名。
polymorphic
定义多态类型,通常为模型名称。
polymorphicValue
设置多态值,通常为表名(如果未另行指定)。
many2many
命名多对多关系中使用的联接表。
joinForeignKey
标识联接表中映射回当前模型表的外键列。
joinReferences
指向联接表中链接到引用模型表的外键列。
constraint
为关联指定关系约束,如 。OnUpdate``OnDelete
Be ...
Gorm配置
Gorm因为没有深入了解过Gorm,了解一下
配置之前连接有个细节没注意
1234567891011121314151617dsn := "user:password@tcp(127.0.0.1:3307)/shortURL?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.New(mysql.Config{ DSN: dsn, }), &gorm.Config{ SkipDefaultTransaction: false, //跳过事务控制,但是关掉后不保证数据一致性 NamingStrategy: schema.NamingStrategy{ TablePrefix: "test_", // 表名前缀,`User` 的表名应该是 `t_users` SingularTable: false, // 使用单数表名,启用该选项后,`User` 的表名应该是 `t_u ...
dockerfile尝试
给短链系统收个尾,写个dockerfile,本来就很害怕写这个东西
然后这个东西一写就是半天过去了
而且基本上就是在蒙蔽状态下度过的
代码写写很快,但是没啥用
Dockerfile1234567891011121314151617181920212223# 第一阶段:使用Go语言环境构建应用程序FROM golang:1.21 as builderENV GOPROXY https://goproxy.cn,direct# 设置工作目录WORKDIR /app# 将当前目录的内容复制到容器内的/app目录COPY . .# 构建应用程序,生成可执行文件RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o main .# 第二阶段:从一个空镜像创建最终的镜像FROM alpine:3.12WORKDIR /app# 复制第一阶段构建的可执行文件到最终镜像的/app目录COPY --from=builder /app/main /app/main# 暴露应用程序监听的端口EXPOSE 8080# 设置容器启动时运行的命令CMD [" ...