当新浪防盗链时,我在想些什么?续


起步

在去年五月份的时候,新浪免费图床做了防盗链机制,羊毛就不能褥了。个人博客不挂图片忍忍也就过去,但在某些时候还是不便。后来我采用 docker 镜像 + 开源图床系统 lychee-docker 的方式,在自己的阿里服务器上搭建了一个简易图床。时移近一年,使用起来没有什么不对劲的地方。但当时我知道的东西还是太少,做了许多不规范的操作,现在想弥补。

我基于前文(当新浪防盗链时,我在想些什么?)在虚拟机里还原了过往操作,并将在此基础上弥补之前的不足。其用意是:倘若你不幸参看我写的教程部署了图床系统,那么我带你入坑的,我负责把你带出来。


GORM 字段使用自定义类型


起步

想在使用 GORM 时使用自定义类型必然事出有因,一般可有以下两种方式:

  • 方法 1:

    type MyString string
  • 方法 2:

    type MyString struct {
      string
    }

当需求比较简单时,可采取方法1,也就是类型别名;如果需求复杂,就不得不把数据字段嵌入自定义结构体中。字段是否匿名并不重要,主要是用来承载目的数据。


Go 方法接收器与接口


在写 Go 的时候,我们常会发现以下情况:

type Z struct {
}

func (zv Z) Hello() {
    log.Println("hello")
}

func (zp *Z) World() {
    log.Println("world")
}

func main() {
    {
        zv := Z{}
        zv.Hello()
        zv.World()
    } // 正常执行

    {
        zp := &Z{}
        zp.Hello()
        zp.World()
    } // 正常执行
}