go 初始化结构体问题

type User struct{
      Name          string
      NeedName string 
}
one := User{
     Name: "somename",
     NeedName: func() string {
         //这里我想获取上面Name的值
        return ""
     }(),
}

请问这个可以获取吗?可以的话怎么写的


先感谢一下@kumfo大佬回答

其实这个问题是想偷懒一下,奇怪代码的心路历程在下面
衍生问题是:golang有没有类似JS this.Name 这样获取值的办法

func main() {
    // 正常写法
    user := User{}
    user.Name = "somename"
    // 需要根据user.Name构建NeedName
    user.NeedName = needName(user.Name)
    
    // 偷懒:
    //1. 下面的needName函数就这一个地方使用,不想单独写
    user.NeedName = func(s string) string {
        //some code
        return ""
    }(user.Name)
    //2. 不想写很多 user.xx = xx, 所以直接 ‘大成代码’
    user1 := User{
        Name: "somename",
        NeedName: func() string {
            //some code
            // JS: name = this.Name
            return ""
        }(),
    }
}
func needName(s string) string {
    // some code with s
    return ""
}

感谢浏览,欢迎回答

阅读 1.4k
2 个回答

你这是什么奇奇怪怪的操作啊,不知道你哪里带来的语法习惯。正常的代码应该是这样子的:

type User struct{
    Name          string
    NeedName string
}

func (user *User) getName() string {
    return user.Name
}

func main() {
    one := User{
        Name: "somename",
    }
    fmt.Println(one.getName())
}
新手上路,请多包涵

正常正确写法 ↓

type User struct {
    Name     string
    NeedName string
}

func (u User) setNeedName() string {
    name := u.Name
    //some code with name
    return name + "need"
}

func main() {
    user := User{}
    user.Name = "somename"
    user.NeedName = user.setNeedName()

    fmt.Println(user.NeedName)
}

偷懒失败,记录一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题