This is a great question. I haven't thought in much detail about this before.
I would probably still go with with exposing it as fields, and document that they're read only. It's definitely an alien concept to Go programs.
The reason to use a variable for me is mostly because it's shorter, simpler code. Also, func calls tend to appear more "expensive" since it's hard to know how much computation is done to return the answer, so I'd be tempted to do this silly thing:
name := f.Name()
Where f.Name() is implemented as return f.Get("name").String().
The reason using a variable should be okay is because:
a) it's can/should be documented as read-only
b) people using it should be familiar with the JS equivalent and not expect the Go wrapper to do something different
c) no reasonable code would try to change it, again, because it'd go against the Go (documented as read-only) and JS (documented as read-only) APIs
It's still unsafe, but it's as unsafe as dereferencing a nil pointer. Don't do it, and your program won't panic. But you can't stop someone from doing it on purpose.