还未发布过话题
  • 👍

  • 其实没啥不一样的,Go 社区也是社区,其目的是提供一个地方让一起讨论 Go,社区更多的注意力应该放在内容上,放在运营,推广,活跃度等等,用什么实现就无所谓了。

    很多时候社区会利用 “用 Go 语言实现一个社区” 来搞搞热度,吸引人气,然后用 “xxx Go 社区,一个真正用 Go 语言实现的社区” 来做噱头进行推广

    然后你就发现,目的还是为社区推广,运营 😂

  • 这种例子很多,其实大部分原因是: "有那么好的现成不用,为什么要自己做呢?"

    像我们开发时,你会考虑用开源项目而不是自己手撸轮子吧?如果 redis 满足了你的需求,你肯定不会考虑自己写一套对吧,各种成本问题是很现实的。

    除非,你有其他考虑

  • 代码设计问题 at 2020年07月07日

    如 #1, #2 所说

    type 自定义类型相对于直接使用基础类型是有些考虑点的,如果你觉得这些你都不需要,那么我觉得你就没有必要再定义一个新的类型了

    • 自定义类型后本身的类型命名具有更贴切的可读意义,例如
    // 类型可读性
    type Color uint
    
    const (
        min Color = iota
        Red
        Blue
        Green
        ...
        max
    )
    
    // 参数可读性
    func PrintColor(c Color) {
        fmt.Println("this color is %s", c)
    }
    
    // 返回值可读性
    func MakeColor(i uint) Color {
        c := Color(uint)
        if !c.Valud() {
            panic(fmt.Sprintf("%d is an invalid color value", c))
        }
        return c
    }
    
    • 自定义类型可以扩展自定义方法和重写底层类型的方法等
    // 自定义校验
    func (c Color) Valud() bool {
        return c > min && c < max
    }
    
    // 重写 String
    func (c Color) String() string {
        switch c {
        case Red:
            return "Red"
        ...
        }
    }
    
  • 结构体 方法问题 at 2020年05月31日
    func (user *User) CreateUser(name string) error {
    ....
        return  Error
    }
    
    
    func CreateUser(name string) error {
    
    ....
        return  Error
    }
    

    从上面的代码示例中猜测,你可能想知道从外部 new 一个 User call CreateUser 和在 CreateUser 自己内部 new 一个 User 来 Create 的区别

    其实 Create 的部分没有任何区别,但 call 的时候有区别

    func main() {
        // 第一个 func
        user := new(User)
        err := user.CreateUser("张三")
        if err != nil {
            panic(err)
        }
        fmt.Println(user) // user{ ID: 1, Name: 张三 }
    
        // 第二个 func
         err := CreateUser("张三") // 你除了 error 什么都获取不到
        if err != nil {
            panic(err)
        }
    }
    
  • 结构体 方法问题 at 2020年05月27日
    func CreateUser(name string) error {
        return db.Create(&user).Error
    }
    

    你的这部分代码没有定义 user 不会报错吗?