Giter Site home page Giter Site logo

Comments (6)

Fenny avatar Fenny commented on May 6, 2024 3

@yossizahn, you have a good point and we can provide an Immutable option so return values within the handler are immutable. Update the docs that by default all context values are valid until you return from the handler. This way we can keep zero memory allocation conversion enabled by default.

func main() {
  app := fiber.New(&fiber.Settings{
    Immutable: true, 
  })
  app.Get("/:number", func(c *fiber.Ctx) {
    number := c.Params("number") // immutable
    go func() {
      time.Sleep(1 * time.Second)
      fmt.Println("number: ", number)
    }()
  })
  app.Listen(3000)
}

from fiber.

welcome avatar welcome commented on May 6, 2024

Thanks for opening your first issue here! 🎉 Be sure to follow the issue template!

from fiber.

Fenny avatar Fenny commented on May 6, 2024

We use the same method as Fasthttp to convert strings and bytes without memory allocation, but proper use requires you to never change the original byte array, but that's a reasonable contract in many cases. I did not see many use-cases to persist values after returning from the handler, so this is an interesting topic.

from fiber.

yossizahn avatar yossizahn commented on May 6, 2024

It is true that it is possible to reproduce the same behavior in Fasthttp, but in Fasthttp it is more forgivable since a) it is clearly documented and b) there is no implicit contract implied in returning a []byte saying that it won't change under your feet.
It would seem to me that returning a string constitutes an implicit contract that it will follow string conventions such as being immutable.

from fiber.

Fenny avatar Fenny commented on May 6, 2024

I'm closing this issue because it will be addressed in v1.8.0, feel free to re-open!

from fiber.

calbot avatar calbot commented on May 6, 2024

I wish the strings returned from the context were wrapped in a new unsafestring struct so when you wrote the code you are forced to call getUnsafeString() or something so it's obvious what you're doing. That way I would pass around unsafestring into functions so I know the string is mutable! All the other go docs say strings are immutable.

from fiber.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.