比如说你有类似的东西,试图让这个例子尽可能简单。
#!/usr/bin/env node
var http = require('http')
, jade = require('jade')
, static = require('node-static')
, jadeRe = /\.jade$/
, path = process.argv.slice(2)[0]
, fileServer = new static.Server(path || '.')
http.createServer(function (req, res) {
if (req.url.match(jadeRe)) {
res.writeHead(200, {'Content-Type': 'text/html'})
res.end(jade.renderFile('.' + req.url, {
filename: '.' + req.url.replace(jadeRe, '')
}))
} else {
req.addListener('end', function () {
fileServer.serve(req, res)
}).resume()
}
}).listen(8080)
如何将字段名称或者您可以传递给函数?
type Home struct {
Bedroom string
Bathroom string
}
显然这不起作用......我能看到的唯一方法是使用两个函数,当struct变得非常大并且有很多相似的代码时会增加很多额外的代码。
func (this *Home) AddRoomName(fieldname, value string) {
this.fieldname = value
}
答案 0 :(得分:1)
答案 1 :(得分:0)
我想到的另一个想法就是这样,不确定它在你的情况下是否有意义:
func Set(field *string, value string) {
*field = value
}
home := &Home{"asd", "zxc"}
fmt.Println(home)
Set(&home.Bedroom, "bedroom")
Set(&home.Bathroom, "bathroom")
fmt.Println(home)
答案 2 :(得分:0)
在接口值上使用类型断言:
package main
import "fmt"
type Test struct {
S string
I int
}
func (t *Test) setField(name string, value interface{}) {
switch name {
case "S":
t.S = value.(string)
case "I":
t.I = value.(int)
}
}
func main() {
t := &Test{"Hello", 0}
fmt.Println(t.S, t.I)
t.setField("S", "Goodbye")
t.setField("I", 1)
fmt.Println(t.S, t.I)
}