code: func (l *State) PushFString(format string, args ...interface{}) string {
  	n, i := 0, 0
  	for {
  		e := strings.IndexRune(format, '%')
  		if e < 0 {
  			break
  		}
  		l.checkStack(2) // format + item
  		l.push(format[:e])
  		switch format[e+1] {
  		case 's':
  			if args[i] == nil {
  				l.push("(null)")
  			} else {
  				l.push(args[i].(string))
  			}
  			i++
  		case 'c':
  			l.push(string(args[i].(rune)))
  			i++
  		case 'd':
  			l.push(float64(args[i].(int)))
  			i++
  		case 'f':
  			l.push(args[i].(float64))
  			i++
  		case 'p':
  			l.push(fmt.Sprintf("%p", args[i]))
  			i++
  		case '%':
  			l.push("%")
  		default:
  			l.runtimeError("invalid option " + format[e:e+2] + " to 'lua_pushfstring'")
  		}
  		n += 2
  		format = format[e+2:]
  	}
  	l.checkStack(1)
  	l.push(format)
  	if n > 0 {
  		l.concat(n + 1)
  	}
  	return l.stack[l.top-1].(string)
  }
docs: // PushFString pushes onto the stack a formatted string and returns that
  // string.  It is similar to fmt.Sprintf, but has some differences: the
  // conversion specifiers are quite restricted.  There are no flags, widths,
  // or precisions.  The conversion specifiers can only be %% (inserts a %
  // in the string), %s, %f (a Lua number), %p (a pointer as a hexadecimal
  // numeral), %d and %c (an integer as a byte).
  //
  // http://www.lua.org/manual/5.2/manual.html#lua_pushfstring