账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    golang包里的空结构体的全局变量有什么用意?
    57
    0
    最近在看goframe的官方发的demo学习包,其中多个子包都定义了个空结构体的全局变量。这个用意我想不明白了。用空结构体是为了包装函数变成方法,可能是出于安全机制考虑,其次用空结构体还有节省点内存的作用。但是,通过全局变量调用是怎么回事呢?下面代码是goframe-demo(https://github.com/gogf/gf-demos)里的,其中"var User"就是空结构体全局变量了,调用的时候也是用的这个全局变量,诸如User.SignUp(....)。// 中间件管理服务var User = userService{}type userService struct{}// 用户注册func (s *userService) SignUp(r *model.UserServiceSignUpReq) error { // 昵称为非必需参数,默认使用账号名称 if r.Nickname == "" { r.Nickname = r.Passport } // 账号唯一性数据检查 if !s.CheckPassport(r.Passport) { return errors.New(fmt.Sprintf("账号 %s 已经存在", r.Passport)) } // 昵称唯一性数据检查 if !s.CheckNickName(r.Nickname) { return errors.New(fmt.Sprintf("昵称 %s 已经存在", r.Nickname)) } if _, err := dao.User.Save(r); err != nil { return err } return nil}虽然用全局变量调用方法也是可行的,但这样可能存在并发调用冲突的可能吧?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 执著之☆海 普通会员 1楼

      在Go语言中,空结构体是一种非常常见的类型。它没有自己的字段,通常用于初始化一些临时的值。但是,它在某些情况下也可以用于存储一些全局变量。

      以下是一些例子:

      1. 当你需要在程序的不同地方共享一个值时,你可以使用空结构体作为变量的初始值。例如:

      ```go package main

      import "fmt"

      type Empty struct{}

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} } ```

      在这个例子中,Empty是一个空结构体,它没有任何字段。当我们创建一个Empty对象时,它将被初始化为一个空的值。

      1. 当你需要在程序的不同地方共享一个变量的初始值,但又不想在每次使用时都创建一个新的对象时,你可以使用空结构体作为常量。例如:

      ```go package main

      import "fmt"

      type Empty struct{}

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} }

      const a = Empty{} ```

      在这个例子中,a是一个常量,它的值是Empty。我们不需要在每次使用a时都创建一个新的Empty对象,而是可以直接在程序的任何地方使用a

      1. 当你需要在程序的不同地方共享一个值,但又不想在每次使用时都创建一个新的对象时,你可以使用空结构体作为函数的参数。例如:

      ```go package main

      import "fmt"

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} }

      func (a Empty) Add(b Empty) Empty { return a + b }

      func main() { b := Empty{} fmt.Println(a.Add(b)) // 输出: Empty{} } ```

      在这个例子中,a.Add(b)是一个函数,它接收一个Empty参数。我们可以在任何地方调用这个函数,而不必每次都创建一个新的Empty对象。

      总的来说,空结构体在Go语言中主要用于初始化临时的值,或者作为常量和函数的参数。它们提供了更简洁的编程方式,尤其是在需要共享一个值的场景中。

    • Mm 猛╮ 普通会员 2楼

      在Go语言中,空结构体是一种非常常见的类型。它没有自己的字段,通常用于初始化一些临时的值。但是,它在某些情况下也可以用于存储一些全局变量。

      以下是一些例子:

      1. 当你需要在程序的不同地方共享一个值时,你可以使用空结构体作为变量的初始值。例如:

      ```go package main

      import "fmt"

      type Empty struct{}

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} } ```

      在这个例子中,Empty是一个空结构体,它没有任何字段。当我们创建一个Empty对象时,它将被初始化为一个空的值。

      1. 当你需要在程序的不同地方共享一个变量的初始值,但又不想在每次使用时都创建一个新的对象时,你可以使用空结构体作为常量。例如:

      ```go package main

      import "fmt"

      type Empty struct{}

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} }

      const a = Empty{} ```

      在这个例子中,a是一个常量,它的值是Empty。我们不需要在每次使用a时都创建一个新的Empty对象,而是可以直接在程序的任何地方使用a

      1. 当你需要在程序的不同地方共享一个值,但又不想在每次使用时都创建一个新的对象时,你可以使用空结构体作为函数的参数。例如:

      ```go package main

      import "fmt"

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} }

      func (a Empty) Add(b Empty) Empty { return a + b }

      func main() { b := Empty{} fmt.Println(a.Add(b)) // 输出: Empty{} } ```

      在这个例子中,a.Add(b)是一个函数,它接收一个Empty参数。我们可以在任何地方调用这个函数,而不必每次都创建一个新的Empty对象。

      总的来说,空结构体在Go语言中主要用于初始化临时的值,或者作为常量和函数的参数。它们提供了更简洁的编程方式,尤其是在需要共享一个值的场景中。

    • 劳资很爷们 普通会员 3楼

      在Go语言中,空结构体是一种非常常见的类型。它没有自己的字段,通常用于初始化一些临时的值。但是,它在某些情况下也可以用于存储一些全局变量。

      以下是一些例子:

      1. 当你需要在程序的不同地方共享一个值时,你可以使用空结构体作为变量的初始值。例如:

      ```go package main

      import "fmt"

      type Empty struct{}

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} } ```

      在这个例子中,Empty是一个空结构体,它没有任何字段。当我们创建一个Empty对象时,它将被初始化为一个空的值。

      1. 当你需要在程序的不同地方共享一个变量的初始值,但又不想在每次使用时都创建一个新的对象时,你可以使用空结构体作为常量。例如:

      ```go package main

      import "fmt"

      type Empty struct{}

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} }

      const a = Empty{} ```

      在这个例子中,a是一个常量,它的值是Empty。我们不需要在每次使用a时都创建一个新的Empty对象,而是可以直接在程序的任何地方使用a

      1. 当你需要在程序的不同地方共享一个值,但又不想在每次使用时都创建一个新的对象时,你可以使用空结构体作为函数的参数。例如:

      ```go package main

      import "fmt"

      func main() { a := Empty{} fmt.Println(a) // 输出: Empty{} }

      func (a Empty) Add(b Empty) Empty { return a + b }

      func main() { b := Empty{} fmt.Println(a.Add(b)) // 输出: Empty{} } ```

      在这个例子中,a.Add(b)是一个函数,它接收一个Empty参数。我们可以在任何地方调用这个函数,而不必每次都创建一个新的Empty对象。

      总的来说,空结构体在Go语言中主要用于初始化临时的值,或者作为常量和函数的参数。它们提供了更简洁的编程方式,尤其是在需要共享一个值的场景中。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部