Skip to main content
0
goProgramming Language

āļŠāļĢāđ‰āļēāļ‡ Serverless apps āļ”āđ‰āļ§āļĒāļ āļēāļĐāļē Go

āļĢāļđāđ‰āļˆāļąāļāļāļąāļšāļ āļēāļĐāļē Go āđāļšāļšāļŠāļąāđ‰āļ™āđ†

  • āļŠāļĢāđ‰āļēāļ‡āđ‚āļ”āļĒ Google āļšāļēāļ‡āļ„āļĢāļąāđ‰āļ‡āđ€āļĢāļĩāļĒāļāļ§āđˆāļē golang
  • āļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āđ€āļžāļ·āđˆāļ­āđāļāđ‰āđ„āļ‚āļ‚āđ‰āļ­āļšāļāļžāļĢāđˆāļ­āļ‡āļ‚āļ­āļ‡ C++
  • āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš: āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļšāđāļĨāļ°āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļ—āļĩāđˆāļ›āļĢāļąāļšāļ‚āļ™āļēāļ”āđ„āļ”āđ‰
  • āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡
  • āļĄāļĩāđ„āļ§āļĒāļēāļāļĢāļ“āđŒāļ—āļĩāđˆāļ­āđˆāļēāļ™āļ‡āđˆāļēāļĒ

āđ€āļ‚āļĩāļĒāļ™āđ‚āļ”āļĒ
Sirasit Boonklang – BorntoDev Co., Ltd.

Serverless architecture āđ€āļ›āđ‡āļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđāļ­āļ›āđāļšāļšāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰ logic āļ‹āļķāđˆāļ‡āļˆāļ°āđƒāļŠāđ‰āļ‡āļēāļ™āļšāļ™āļĢāļ°āļšāļšāļ„āļĨāļēāļ§āļ”āđŒ āđ‚āļ”āļĒāļĄāļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ infrastructure āļ‚āļ­āļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļ™āđ‰āļ­āļĒāļĨāļ‡

 

Azure Functions āļ„āļ·āļ­āļšāļĢāļīāļāļēāļĢāļŦāļ™āļķāđˆāļ‡āđƒāļ™ Microsoft Azure āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ Serverless architecture āđ‚āļ”āļĒāļˆāļ°āļĄāļĩāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ‚āļ„āđ‰āļ”āļŦāļĢāļ·āļ­āļŠāļļāļ”āļ„āļģāļŠāļąāđˆāļ‡āļ•āļēāļĄāļ—āļĩāđˆāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļˆāļąāļ”āđ€āļ•āļĢāļĩāļĒāļĄāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđ€āļ­āļ‡

 

āđ‚āļ”āļĒ Azure Functions āļˆāļ°āļĄāļĩāļĢāļąāļ™āđ„āļ—āļĄāđŒāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļ āļēāļĐāļē āļ‹āļķāđˆāļ‡āļŦāļēāļāđ„āļĄāđˆāļĄāļĩāļ āļēāļĐāļēāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āđ€āļĢāļēāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļ•āļąāļ§āļˆāļąāļ”āļāļēāļĢāđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āļŦāļĢāļ·āļ­āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Custom handlers āđ„āļ”āđ‰

 

Custom handlers āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

Custom handlers āļ„āļ·āļ­āđ€āļ§āđ‡āļšāđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļ—āļĩāđˆāļĢāļąāļš events āļˆāļēāļ Functions host
āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļĢāļēāļˆāļ°āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āđƒāļ™āļ āļēāļĐāļēāļ—āļĩāđˆāđ€āļĢāļē Request āđ€āļžāļ·āđˆāļ­āļĢāļ­āļĢāļąāļš response āļ•āđˆāļ­ events āļ™āļąāđ‰āļ™ āđ† āđāļĨāļ°āļ āļēāļĐāļēāļ—āļĩāđˆāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļāđ‡āļ„āļ·āļ­āļ āļēāļĐāļēāļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļš HTTP āļ™āļąāđ‰āļ™āđ€āļ­āļ‡ āļ‹āļķāđˆāļ‡Â  Go āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļ™āļ°āļ„āļĢāļąāļšÂ 

 

Concepts and flow āļ—āļĩāđˆāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡ Azure Functions

  • Triggers āļ„āļ·āļ­ events āļ—āļĩāđˆāđ€āļĢāļīāđˆāļĄāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļŸāļąāļ‡āļāđŒāļŠāļąāļ™
    āļ—āļĢāļīāļāđ€āļāļ­āļĢāđŒāđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ›āđ† āđ€āļŠāđˆāļ™ HTTP requests, queue messages, āļŦāļĢāļ·āļ­āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
  • Bindings āļ„āļ·āļ­ āđ‚āļ„āđ‰āļ”āļ•āļąāļ§āļŠāđˆāļ§āļĒāļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļąāļšāļšāļĢāļīāļāļēāļĢāļ„āļĨāļēāļ§āļ”āđŒāļ­āļ·āđˆāļ™ āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ­āļīāļ™āļžāļļāļ•āđāļĨāļ°āđ€āļ­āļēāļ—āđŒāļžāļļāļ• āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‚āđ‰āļēāđāļĨāļ°āļ­āļ­āļāļˆāļēāļāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āđ„āļ”āđ‰
  • Functions host āđ€āļ›āđ‡āļ™āļ„āļ§āļšāļ„āļļāļĄ event flow āļ‚āļ­āļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ āđ€āļĄāļ·āđˆāļ­ host āļˆāļąāļš events āļ•āļąāļ§āļˆāļąāļ”āļāļēāļĢāļˆāļ°āļ–āļđāļāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđāļĨāļ°āļŠāđˆāļ‡āļ„āļ·āļ™āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ‚āļ­āļ‡āļŸāļąāļ‡āļāđŒāļŠāļąāļ™

 

āđ€āļĢāļēāļĄāļēāđ€āļĢāļīāđˆāļĄāļŠāļĢāđ‰āļēāļ‡ REST API āļ”āđ‰āļ§āļĒ Go āļāļąāļ™āđ€āļĨāļĒ 

1.āđ€āļĢāļīāđˆāļĄāļˆāļēāļāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ REST API āđ‚āļ”āļĒāđƒāļŠāđ‰ Go āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļĨāļšāļĢāļēāļĢāļĩ fmt āđāļĨāļ° net/http āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢ routes āđāļĨāļ° requests āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĄāļē āđ‚āļ”āļĒāđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰

import (
    "fmt"
    "net/http"
)

 

2. āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļāļģāļŦāļ™āļ” routes āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļŠāđˆāļ§āļ™ logical āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāļ§āđˆāļē routes āļŦāļĢāļ·āļ­ āđ€āļŠāđ‰āļ™āļ—āļēāļ‡

routes  āļ„āļ·āļ­āļ—āļĩāđˆāļ­āļĒāļđāđˆāļ‚āļ­āļ‡ respond āđƒāļ™āđāļ­āļ› āđƒāļ™āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē routes āđƒāļŦāđ‰āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ” HandleFunc() āļšāļ™āļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒ http āđāļĨāļ°āļāļģāļŦāļ™āļ” routes āđ€āļžāļ·āđˆāļ­āļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āđˆāļ­āļ„āļģāļ‚āļ­Â  āđ‚āļ”āļĒāđƒāļ™āļāļĢāļ“āļĩāļ™āļĩāđ‰ āļˆāļ°āļ•āđ‰āļ­āļ‡āļŠāļĢāđ‰āļēāļ‡āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ handleRoute āđ€āļžāļ·āđˆāļ­āļˆāļąāļšāļ„āļđāđˆ requests āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĄāļēāļāļąāļš routes  “/”

http.HandleFunc("/", handleRequest)

 

3. āđ‚āļ”āļĒāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļąāļš requests āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĄāļēāđāļĨāļ°āļˆāļ°āļ•āđ‰āļ­āļ‡āļĄāļĩāļ•āļąāļ§āļ­āđˆāļēāļ™āļŠāļīāđˆāļ‡āļ•āđˆāļēāļ‡ āđ† āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĄāļēāļ­āļĩāļāļ”āđ‰āļ§āļĒ āđ€āļŠāđˆāļ™Â 

āđ€āļĢāļēāđ€āļ•āļ­āļĢāđŒ āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāļŦāļĢāļ·āļ­āđ€āļ™āļ·āđ‰āļ­āļŦāļēāļ•āđˆāļēāļ‡āđ† āļˆāļēāļāļ™āļąāđ‰āļ™āļˆāļ° respond āđ„āļ›āļĒāļąāļ‡ āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ—āļĩāđˆāļˆāļąāļ”āļāļēāļĢ requests āļ”āļąāļ‡āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰

func handleRequest(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "Hello")

}

 

4. āļŠāļĢāđ‰āļēāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŸāļąāļ‡āļ„āļģāļ‚āļ­āđ„āļ”āđ‰ āđ‚āļ”āļĒāļāļēāļĢāđ€āļĢāļīāđˆāļĄāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ āļˆāļ°āļ•āđ‰āļ­āļ‡āļĢāļ°āļšāļļāļŠāđˆāļ§āļ™āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļ„āļģāļ‚āļ­āđ„āļ”āđ‰ āđ‚āļ”āļĒāđ‚āļ„āđ‰āļ”āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ

package main

 

import (

    "fmt"

    "net/http"

)

 

func handleRequest(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "My Rest API")

}

 

func main() {

    http.HandleFunc("/", handleRequest)

    http.ListenAndServe(":3000", nil)

}

 

5. āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļ—āļģāļ‡āļēāļ™āđāļĨāđ‰āļ§āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļš requests āļšāļ™āļžāļ­āļĢāđŒāļ• 3000 āđ„āļ”āđ‰

 

āļāļēāļĢāđƒāļŠāđ‰ custom handler āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ serverless app āļ”āđ‰āļ§āļĒ Azure Function

6. āđ€āļ›āļīāļ” Visual Studio Code āđāļĨāđ‰āļ§āđ€āļĨāļ·āļ­āļ View > Command Palette

7. āđ€āļĨāļ·āļ­āļ Azure Functions: Create New Project

8. āđ€āļĨāļ·āļ­āļāđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒ āđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒāļ›āļąāļˆāļˆāļļāļšāļąāļ™

9. āđƒāļ™āđ€āļĨāļ·āļ­āļāļ āļēāļĐāļēāđ€āļ›āđ‡āļ™ Custom Handler

10. āđ€āļĨāļ·āļ­āļāđ€āļ—āļĄāđ€āļžāļĨāļ•āļŠāļģāļŦāļĢāļąāļšāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āđāļĢāļ āđ‚āļ”āļĒāđ€āļĨāļ·āļ­āļāđ€āļ›āđ‡āļ™ HttpTrigger

11. āļ•āļąāđ‰āļ‡āļŠāļ·āđˆāļ­āđāļ­āļ›āļ‚āļ­āļ‡āđ€āļĢāļē āđ‚āļ”āļĒāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āļŠāļ·āđˆāļ­āļ§āđˆāļē “myapp”

 

12. āđ€āļĨāļ·āļ­āļāļĢāļ°āļ”āļąāļšāļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāđ€āļ›āđ‡āļ™ anonymous (āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ„āļ”āđ‰āđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡)

13.āđ‚āļ”āļĒāļĢāļ°āļšāļšāļˆāļ°āļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđāļ­āļ›āļĨāļąāļāļĐāļ“āļ°āļ”āļąāļ‡āļ™āļĩāđ‰

14.āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ–āļąāļ”āđ„āļ›āļ„āļ·āļ­āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļ—āļĩāđˆāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āđˆāļ­ HTTP trigger āđ„āļ”āđ‰

āļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒāļŠāļ·āđˆāļ­ server.go āļ—āļĩāđˆ root āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ

15. āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ„āļĨāļšāļĢāļēāļĢāļĩāļŠāļģāļŦāļĢāļąāļšāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ› HTTP  āļ”āđ‰āļ§āļĒāđ‚āļ„āđ‰āļ”āļ”āļąāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰

package main

 

import (

 "fmt"

 "io/ioutil"

 "log"

 "net/http"

 "os"

)

 

16. āđ€āļžāļīāđˆāļĄāđ‚āļ„āđ‰āļ”āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļŦāļĨāļąāļ‡āļ„āļģāļŠāļąāđˆāļ‡āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļĨāļšāļĢāļēāļĢāļĩ

func main() {

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")

    if !exists {

      customHandlerPort = "8080"

    }

    mux := http.NewServeMux()

    fmt.Println("Go server Listening on: ", customHandlerPort)

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))

  }

 

17. āđ‚āļ”āļĒāļŸāļąāļ‡āļāđŒāļŠāļąāđˆāļ™ main() āļˆāļ°āļ–āļđāļāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ‚āļ”āļĒāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ āđāļĨāļ°āļˆāļ°āļ­āđˆāļēāļ™āļ•āļąāļ§āđāļ›āļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļˆāļēāļ FUNCTIONS_CUSTOM_HANDLER_PORT  āļ”āļąāļ‡āđ‚āļ„āđ‰āļ”āļ”āđ‰āļēāļ™āļĨāđˆāļēāļ‡

customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")

 

18. āļ•āđˆāļ­āļˆāļēāļāļ™āļąāđ‰āļ™āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļˆāļ°āđ€āļŠāđ‡āļ„āļ§āđˆāļēāļĄāļĩāļžāļ­āļĢāđŒāļ•āļ­āļĒāļđāđˆāđ„āļŦāļĄ āļ–āđ‰āļēāđ„āļĄāđˆāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļˆāļ°āļāļģāļŦāļ™āļ”āļžāļ­āļĢāđŒāļ•āđ€āļ›āđ‡āļ™ 8080

if !exists {

      customHandlerPort = "8080"

    }

 

19. āļŠāļĢāđ‰āļēāļ‡āļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒāļ‚āļ­āļ‡ HTTP server

mux := http.NewServeMux()

 

20. āļšāļĢāļĢāļ—āļąāļ”āļŠāļļāļ”āļ—āđ‰āļēāļĒāļ„āļ·āļ­āđ€āļĢāļīāđˆāļĄāļŸāļąāļ‡āļžāļ­āļĢāđŒāļ•āđ€āļ‰āļžāļēāļ°āđāļĨāļ°āļŠāđˆāļ‡āļŠāļąāļāļāļēāļ“āļ§āđˆāļēāļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļĢāļąāļš requests āļ”āđ‰āļ§āļĒāđ€āļĄāļ˜āļ­āļ” ListenAndServe():

log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))

 

21. āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ„āļĨāļšāļĢāļēāļĢāļĩāđāļĨāļ°āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ main() āđƒāļŦāđ‰āđ€āļžāļīāđˆāļĄāđ‚āļ„āđ‰āļ”āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰

func helloHandler(w http.ResponseWriter, r *http.Request) {

    w.Header().Set("Content-Type", "application/json")

    if r.Method == "GET" {

      w.Write([]byte("hello world"))

    } else {

      body, _ := ioutil.ReadAll(r.Body)

      w.Write(body)

    }

  }

 

āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ helloHandler() āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ›āļĢāļ°āđ€āļ āļ—āđ€āļ™āļ·āđ‰āļ­āļŦāļēāđ€āļ›āđ‡āļ™ application/json āđ‚āļ”āļĒāļˆāļ°āļ•āļ­āļšāļāļĨāļąāļšāļ”āđ‰āļ§āļĒāļ„āļģāļ§āđˆāļē “hello world”  

 

āđ€āļĄāļ·āđˆāļ­āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āđ€āļŠāļĢāđ‡āļˆāđāļĨāđ‰āļ§ āļ•āđˆāļ­āđ„āļ›āļˆāļ°āļāļģāļŦāļ™āļ”āļ„āđˆāļēāđ€āļžāļ·āđˆāļ­āļšāļ­āļāļ§āđˆāļēāđ„āļŸāļĨāđŒ exe āļ­āļĒāļđāđˆāļ—āļĩāđˆāđ„āļŦāļ™ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđ‚āļŪāļŠāļ•āđŒ Function āļŠāļēāļĄāļēāļĢāļ–āļŦāļēāđ„āļ”āđ‰ āđ‚āļ”āļĒāļ•āđ‰āļ­āļ‡āļāļģāļŦāļ™āļ”āļ„āđˆāļē routing āđāļĨāļ°āļĢāļ°āļšāļļāļ§āđˆāļēāđāļ­āļ›āļ™āļĩāđ‰āđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļš HTTP triggers āđāļĨāļ°āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļ›āļĢāļ°āđ€āļ āļ—āļ­āļ·āđˆāļ™

 

22. āđ€āļ›āļīāļ”āđ€āļ—āļ­āļĢāđŒāļĄāļīāļ™āļąāļĨāļĢāļąāļ™āļ„āļģāļŠāļąāđˆāļ‡ go build server.go āđƒāļ™ root āđ‚āļ›āļĢāđ€āļˆāđ‡āļāļ•āđŒ āļˆāļ°āđ„āļ”āđ‰āđ„āļŸāļĨāđŒ server.exe āđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āļĄāļē

23. āđ€āļ›āļīāļ”āđ„āļŸāļĨāđŒ host.json āđāļĨāļ°āļŦāļē defaultExecutablePath āļ āļēāļĒāđƒāļ™ customHandler āđ€āļžāļīāđˆāļĄ.\server

24. āđƒāļ™ customHandler āđƒāļŦāđ‰āđ€āļžāļīāđˆāļĄ enableForwardingHttpRequest āđāļĨāļ°āļāļģāļŦāļ™āļ”āļ„āđˆāļēāđ€āļ›āđ‡āļ™ True 

25.āļˆāļēāļāļ™āļąāđ‰āļ™āđ€āļ›āļīāļ”āđ€āļ—āļ­āļĢāđŒāļĄāļīāļ™āļąāļĨāđƒāļŦāđ‰āļĢāļąāļ™ func start āđƒāļ™ root āđ‚āļ›āļĢāđ€āļˆāđ‡āļāļ•āđŒ āđ€āļžāļ·āđˆāļ­āđ€āļĢāļīāđˆāļĄāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ Functions app 

āļĒāļīāļ™āļ”āļĩāļ”āđ‰āļ§āļĒāļ„āļĢāļąāļš! āļ•āļ­āļ™āļ™āļĩāđ‰āļ„āļļāļ“āđ„āļ”āđ‰āļĨāļ­āļ‡āļŠāļĢāđ‰āļēāļ‡ serverless app āļ”āđ‰āļ§āļĒ Go āđ€āļšāļ·āđ‰āļ­āļ‡āļ•āđ‰āļ™āđ€āļŠāļĢāđ‡āļˆāđ€āļĢāļĩāļĒāļšāļĢāđ‰āļ­āļĒāđāļĨāđ‰āļ§ 🚀

 

āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ serverless app āļ”āđ‰āļ§āļĒāļ āļēāļĐāļē Go āđ„āļ”āđ‰āļ—āļĩāđˆ
Build Serverless Apps using Go with Chris Noring | Web Wednesday | Channel 9 (msdn.com)

āļŦāļēāļāļ„āļļāļ“āļŠāļ™āđƒāļˆāļžāļąāļ’āļ™āļē āļŠāļ•āļēāļĢāđŒāļ—āļ­āļąāļž āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™
āđāļĨāļ° āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩāļ‚āļ­āļ‡āļ•āļąāļ§āđ€āļ­āļ‡ ?

āļ­āļĒāđˆāļēāļĢāļ­āļŠāđ‰āļē ! āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ—āļąāļāļĐāļ°āļ”āđ‰āļēāļ™āļ”āļīāļˆāļīāļ—āļąāļĨāđ€āļžāļ·āđˆāļ­āļ­āļąāļžāđ€āļāļĢāļ”āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡āļ„āļļāļ“
āđ€āļĢāļīāđˆāļĄāļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāļ·āđ‰āļ™āļāļēāļ™ āļžāļĢāđ‰āļ­āļĄāļ›āļāļīāļšāļąāļ•āļīāļˆāļĢāļīāļ‡āđƒāļ™āļĢāļđāļ›āđāļšāļšāļŦāļĨāļąāļāļŠāļđāļ•āļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ§āļąāļ™āļ™āļĩāđ‰

Sirasit Boonklang

Author Sirasit Boonklang

More posts by Sirasit Boonklang
Close Menu

āđ€āļĢāļēāđƒāļŠāđ‰āļ„āļļāļāļāļĩāđ‰āđ€āļžāļ·āđˆāļ­āļžāļąāļ’āļ™āļēāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđāļĨāļ°āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļ—āļĩāđˆāļ”āļĩāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡āļ„āļļāļ“ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļĻāļķāļāļĐāļēāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđ„āļ”āđ‰āļ—āļĩāđˆ āļ™āđ‚āļĒāļšāļēāļĒāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§āđ€āļ­āļ‡āđ„āļ”āđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āđ„āļ”āđ‰āđ€āļ­āļ‡āđ‚āļ”āļĒāļ„āļĨāļīāļāļ—āļĩāđˆ āļ•āļąāđ‰āļ‡āļ„āđˆāļē

āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§

āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ„āļļāļāļāļĩāđ‰āđ‚āļ”āļĒāđ€āļ›āļīāļ”/āļ›āļīāļ” āļ„āļļāļāļāļĩāđ‰āđƒāļ™āđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āđ„āļ”āđ‰āļ•āļēāļĄāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ āļĒāļāđ€āļ§āđ‰āļ™ āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

āļĒāļ­āļĄāļĢāļąāļšāļ—āļąāđ‰āļ‡āļŦāļĄāļ”
āļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§
  • āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™
    āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āļĨāļ­āļ”

    āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļĄāļĩāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ›āļāļ•āļī āđāļĨāļ°āđ€āļ‚āđ‰āļēāļŠāļĄāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒ āļ„āļļāļ“āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ›āļīāļ”āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļ™āļĩāđ‰āđƒāļ™āļĢāļ°āļšāļšāđ€āļ§āđ‡āļšāđ„āļ‹āļ•āđŒāļ‚āļ­āļ‡āđ€āļĢāļēāđ„āļ”āđ‰
    āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļļāļāļāļĩāđ‰

  • āļ„āļļāļāļāļĩāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ—āļēāļ‡āļāļēāļĢāļ•āļĨāļēāļ”

    āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ„āļļāļāļāļĩāđ‰āļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒ āđāļĨāļ° āļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™ āļŠāļīāļ™āļ„āđ‰āļē āļĢāļ§āļĄāļ–āļķāļ‡āļŦāļĨāļąāļāļŠāļđāļ•āļĢāļŸāļĢāļĩ āđāļĨāļ° āļŠāļīāļ—āļ˜āļīāļžāļīāđ€āļĻāļĐāļ•āđˆāļēāļ‡ āđ† āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļ›āļīāļ”āļ„āļļāļāļāļĩāđ‰āļ›āļĢāļ°āđ€āļ āļ—āļ™āļĩāđ‰āđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāđˆāļ‡āļœāļĨāļ•āđˆāļ­āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļŦāļĨāļąāļ āđ€āļ§āđ‰āļ™āđāļ•āđˆāļāļēāļĢāļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™āļ—āļĩāđˆāļ­āļēāļˆāđ„āļĄāđˆāļ•āļĢāļ‡āļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ
    āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļļāļāļāļĩāđ‰

āļšāļąāļ™āļ—āļķāļāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē