如果为空,则将值分配给struct中的字段

时间:2017-11-20 17:01:22

标签: go

我有一个结构定义

type data struct {
  invitecode string
  fname string
  lname string
}

我在解析

后检索表单数据时填充
...

r.ParseForm()

new user := &data{
  invitecode: r.FormValue("invitecode"),
  fname: r.FormValue("fname")
  lname: r.FormValue("lname")
}

我想检查从表单中获取的invitecode字段是否为空,如果是,则通过调用函数填充它,但如果不是,则用检索到的值填充它(invitecode:if newUser .invitecode ==“”{“Mr”} else {lnames.title},)。我知道go没有我想要使用的tenary运算符并且阅读问题hereherehere& here暗示使用if else语句,但我似乎无法使其工作。最好,我正在寻找一种在分配新变量时检查的解决方案。尝试下面的代码似乎不起作用。任何帮助将不胜感激。

package main

import (
    "fmt"
)

type data struct {
    invitecode string
    fname      string
    lname      string
}

func main() {
    var user data

    newUser := map[string]string{"invitecode": "", "fname": "Dude", "lname": "Did"}
    user = &data{
        invitecode: if newUser.invitecode == "" {"Mr"} else {lnames.title},
        fname:      newUser.fname,
        lname:      newUser.lname,
    }
    fmt.Println(user)
}

2 个答案:

答案 0 :(得分:2)

Go没有三元组,也不能像你在代码中看到的那样进行内联import React from 'react'; import ReactDOM from 'react-dom'; class AddButton extends React.Component{ constructor(props){ super(props); this.state = { isHidden: false, title: '', }; } sendData = (data) => { console.log(data); this.setState({ title: data }) }; toggleHidden = () => { this.setState({ isHidden: !this.state.isHidden }) } render(){ return( <div> <div onClick={this.toggleHidden.bind(this)} className="addtask__btn"> + </div> {this.state.isHidden && <AddTaskBox handleClose={this.toggleHidden.bind(this)} handleClick={this.sendData.bind(this)}/>} </div> ); } } class AddTaskBox extends React.Component{ constructor(props){ super(props); this.state = { title: '', description: '' }; this.handleChange = this.handleChange.bind(this); this.handleClick = this.handleClick.bind(this); } handleChange = (e) => { this.setState({ [e.target.name]: e.target.value }) } handleClick = () => { this.props.sendData(this.state.title); } render(){ return( <div className="addtask__box" > <div className="addtask__close" onClick={this.props.handleClose}>X</div> <form > <input type="text" name="title" placeholder="Nazwa Czynności" value={this.state.title} onChange={this.handleChange}/> <textarea name="description" value={this.state.description} onChange={this.handleChange} placeholder="Opis czynności"> </textarea> <input className="btn" type="submit" value="submit" onClick={this.handleClick}/> </form> </div> ); } } export {AddButton, AddTaskBox}; 。你必须做一个正常的if块:

if

等等。你可以将它提取到一个函数中:

user = &data{}
if newUser.inviteCode = "" {
    user.invitecode = "Mr"
} else {
    user.invitecode = lnames.title
}

并像这样使用它:

func coalesce(args ...string) string {
    for _,str := range args {
        if str != "" {
            return str
        }
    }
    return ""
}

当然,如果您处理多种类型(不仅仅是字符串),每种类型都需要一个这样的函数。

答案 1 :(得分:1)

您不能像使用其他语言中的三元运算符(或if / else语句)一样使用内联if ... else语句,您只需按程序执行:

user := &data{ /* ... */ }

if user.invitecode == "" {
  user.invitecode = "Mr"
} else {
  user.invitecode = lnames.title
}