SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Go Serving
Building Server App With Go
Leong Hean Hong | hong@mrleong.net |
About
● Hong develops web services in Go and PHP.
● Built a server for proprietary GPS trackers using Go
○ My first experience with Go
○ As a way of introducing Go to the team
● This talk is for developers interested in adopting Go
Agenda
● Highlights of Go language
● What I did with Go
● How I did it
● Getting team to adopt Go
Highlights Of Go Language
Characteristics Of Go
● Compiled
● Statically typed
● With garbage collection
● Concurrency support
● Emits self-contained executable, with minimal dependencies
● Matured, stable
● Active communities
Variable Declaration
package main
import "fmt"
func main() {
var foo string
foo = "Answer:"
bar := 42
fmt.Println(foo, bar)
}
C Language Artifacts
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("Hello world!")
}
}
#include <stdio.h>
int main(void) {
int i;
for (i = 0; i < 10; i++) {
printf("Hello world!n");
}
return 0;
}
Go C
Multiple Return Values
package main
import "fmt"
func swap(a int, b int) (int, int) {
return b, a
}
func main() {
foo, bar := swap(123, 456)
fmt.Println(foo, bar) // “456 123”
}
Pointer
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{1, 2}
p := &v
p.X = 123 // Alternative: (*p).X = 123
fmt.Println(v)
}
Struct, Method
package main
import "fmt"
type Human struct {
Age int // Public variable
name string // Private variable
}
// Public function
func (human *Human) Walk() {
fmt.Println(human.name, "walked.")
}
// Private function
func (human *Human) foo() {
fmt.Println("Only accessible within this package.")
}
func main() {
bob := Human{name: "Bob"}
bob.Age = 42
bob.Walk()
}
Implicit Interface Implementation
package main
import "fmt"
type Flyable interface {
Fly()
}
type Bird struct {
Name string
}
// Implicit interface implementation
func (bird Bird) Fly() {
fmt.Println(bird.Name, "is flying.")
}
// Implement fmt.Stringer interface
func (bird Bird) String() (string) {
return bird.Name
}
func main() {
var burung Flyable = Bird{Name: "Bob"}
burung.Fly() // "Bob is flying."
fmt.Println(burung) // "Bob"
}
Defer
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://www.example.com")
if err != nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Printf("%s", body)
}
Goroutine
package main
import "fmt"
import "time"
func say(something string) {
fmt.Println(something)
}
func main() {
go say("world")
say("Hello")
time.Sleep(100 * time.Millisecond)
}
Visit https://tour.golang.org/list
for more
What I Did With Go
Server For GPS Tracker
Go Server
Data Processing
(PHP)
3rd
Party App
GPS Tracker
Server For GPS Tracker
● Communicate proprietary protocol over TCP connection
● Act as proxy between GPS tracker and applications, relay information
● Encode/decode data, does not process the data further
● Maintain persistent connections with multiple trackers
I used to be a programmer like
you, until I took an arrow in the
knee
How I Did It
Listener (net package)
listener, err := net.Listen("tcp", ":7700")
if err != nil {
// handle err
}
for {
conn, err := listener.Accept()
if err != nil {
// handle err
}
go HandleConnection(conn)
}
Send Data (net package)
func Send(data string, conn net.Conn) (err error) {
_, err = conn.Write([]byte(data))
if err != nil {
// handle err
}
return err
}
Receive Data
for {
data, err := bufio.NewReader(conn).ReadString('n')
if err != nil {
// handle err
}
fmt.Print(data)
}
Read Config File
● INI-style config file (sections, and key-value pairs)
● Create a wrapper around github.com/robfig/config to add support for default
values
c, _ = config.ReadDefault(somefile.cfg')
func GetInt(section string, option string, default int) {
value, err = c.Int(section, option)
if err != nil {
return default
}
return value
}
Tips
● Use runtime (https://golang.org/pkg/runtime/) package
for profiling
● Use systemd for managing server app (http://bit.
ly/1M517tk)
Getting Team To Adopt Go
● Start from creating simple, easy-to-implement, tools/microservice
● Share your learnings with team
● Share articles of Go usage in famous companies
● Lead by example, you create something useful first
● Create a culture that embraces experimentations and constant
learning
● Force them to use it. Have to start using it to appreciate it.
● Go has strength & weakness. Use it appropriately, not for the sake
of using it.
So long, and thanks for all the fish

Contenu connexe

Tendances

Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
niklal
 
Functional Pattern Matching on Python
Functional Pattern Matching on PythonFunctional Pattern Matching on Python
Functional Pattern Matching on Python
Daker Fernandes
 

Tendances (20)

From 0 to mine sweeper in pyside
From 0 to mine sweeper in pysideFrom 0 to mine sweeper in pyside
From 0 to mine sweeper in pyside
 
Concurrency in Golang
Concurrency in GolangConcurrency in Golang
Concurrency in Golang
 
Python utan-stodhjul-motorsag
Python utan-stodhjul-motorsagPython utan-stodhjul-motorsag
Python utan-stodhjul-motorsag
 
Sol8
Sol8Sol8
Sol8
 
Alta performance com Python
Alta performance com PythonAlta performance com Python
Alta performance com Python
 
Go ahead, make my day
Go ahead, make my dayGo ahead, make my day
Go ahead, make my day
 
Implementing Software Machines in Go and C
Implementing Software Machines in Go and CImplementing Software Machines in Go and C
Implementing Software Machines in Go and C
 
Go Concurrency
Go ConcurrencyGo Concurrency
Go Concurrency
 
Python Training Tutorial for Frreshers
Python Training Tutorial for FrreshersPython Training Tutorial for Frreshers
Python Training Tutorial for Frreshers
 
Functional Pattern Matching on Python
Functional Pattern Matching on PythonFunctional Pattern Matching on Python
Functional Pattern Matching on Python
 
Docopt
DocoptDocopt
Docopt
 
Don't do this
Don't do thisDon't do this
Don't do this
 
Go Containers
Go ContainersGo Containers
Go Containers
 
Sol9
Sol9Sol9
Sol9
 
Programming Under Linux In Python
Programming Under Linux In PythonProgramming Under Linux In Python
Programming Under Linux In Python
 
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RIThe Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
 
Music as data
Music as dataMusic as data
Music as data
 
Basic NLP with Python and NLTK
Basic NLP with Python and NLTKBasic NLP with Python and NLTK
Basic NLP with Python and NLTK
 
Defer, Panic, Recover
Defer, Panic, RecoverDefer, Panic, Recover
Defer, Panic, Recover
 
Python легко и просто. Красиво решаем повседневные задачи
Python легко и просто. Красиво решаем повседневные задачиPython легко и просто. Красиво решаем повседневные задачи
Python легко и просто. Красиво решаем повседневные задачи
 

En vedette (9)

UBS Global Financial Services Conference, New York
UBS Global Financial Services Conference, New YorkUBS Global Financial Services Conference, New York
UBS Global Financial Services Conference, New York
 
Budget Seminar 2016
Budget Seminar 2016Budget Seminar 2016
Budget Seminar 2016
 
Management assignments swot analysis
Management assignments swot analysisManagement assignments swot analysis
Management assignments swot analysis
 
HSBC Strategy Update
HSBC Strategy Update HSBC Strategy Update
HSBC Strategy Update
 
HSBC Our Vision
HSBC 	Our VisionHSBC 	Our Vision
HSBC Our Vision
 
Affin Bank Berhad Analysis
Affin Bank Berhad AnalysisAffin Bank Berhad Analysis
Affin Bank Berhad Analysis
 
HSBC Project or Presentation
HSBC Project or Presentation HSBC Project or Presentation
HSBC Project or Presentation
 
102466719 full-assignment-bpm
102466719 full-assignment-bpm102466719 full-assignment-bpm
102466719 full-assignment-bpm
 
chapter 3 : commercial bank
chapter 3 : commercial bank chapter 3 : commercial bank
chapter 3 : commercial bank
 

Similaire à Go serving: Building server app with go

10〜30分で何となく分かるGo
10〜30分で何となく分かるGo10〜30分で何となく分かるGo
10〜30分で何となく分かるGo
Moriyoshi Koizumi
 

Similaire à Go serving: Building server app with go (20)

Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1
 
Golang iran - tutorial go programming language - Preliminary
Golang iran - tutorial  go programming language - PreliminaryGolang iran - tutorial  go programming language - Preliminary
Golang iran - tutorial go programming language - Preliminary
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage Go
 
Beauty and Power of Go
Beauty and Power of GoBeauty and Power of Go
Beauty and Power of Go
 
Introduction to go language programming
Introduction to go language programmingIntroduction to go language programming
Introduction to go language programming
 
Go Lang Tutorial
Go Lang TutorialGo Lang Tutorial
Go Lang Tutorial
 
Golang workshop
Golang workshopGolang workshop
Golang workshop
 
Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...
 
Let's golang
Let's golangLet's golang
Let's golang
 
10〜30分で何となく分かるGo
10〜30分で何となく分かるGo10〜30分で何となく分かるGo
10〜30分で何となく分かるGo
 
Groovy for java developers
Groovy for java developersGroovy for java developers
Groovy for java developers
 
Introduction to Go for Java Programmers
Introduction to Go for Java ProgrammersIntroduction to Go for Java Programmers
Introduction to Go for Java Programmers
 
Golang勉強会
Golang勉強会Golang勉強会
Golang勉強会
 
Golang
GolangGolang
Golang
 
Introduction to go
Introduction to goIntroduction to go
Introduction to go
 
Something about Golang
Something about GolangSomething about Golang
Something about Golang
 
Inroduction to golang
Inroduction to golangInroduction to golang
Inroduction to golang
 
golang_getting_started.pptx
golang_getting_started.pptxgolang_getting_started.pptx
golang_getting_started.pptx
 
Go programming introduction
Go programming introductionGo programming introduction
Go programming introduction
 
Trivadis TechEvent 2016 Go - The Cloud Programming Language by Andija Sisko
Trivadis TechEvent 2016 Go - The Cloud Programming Language by Andija SiskoTrivadis TechEvent 2016 Go - The Cloud Programming Language by Andija Sisko
Trivadis TechEvent 2016 Go - The Cloud Programming Language by Andija Sisko
 

Plus de Hean Hong Leong

Color filters for the dummies
Color filters for the dummiesColor filters for the dummies
Color filters for the dummies
Hean Hong Leong
 
PHP_Frameworks_Discussion
PHP_Frameworks_DiscussionPHP_Frameworks_Discussion
PHP_Frameworks_Discussion
Hean Hong Leong
 

Plus de Hean Hong Leong (19)

Telegram Bot
Telegram BotTelegram Bot
Telegram Bot
 
How To Work With UI/UX Designer
How To Work With UI/UX DesignerHow To Work With UI/UX Designer
How To Work With UI/UX Designer
 
How not to be a mediocre developer!
How not to be a mediocre developer!How not to be a mediocre developer!
How not to be a mediocre developer!
 
Gitflow Workflow
Gitflow WorkflowGitflow Workflow
Gitflow Workflow
 
Lazy Programmer's Guide To Writing Spec
Lazy Programmer's Guide To Writing SpecLazy Programmer's Guide To Writing Spec
Lazy Programmer's Guide To Writing Spec
 
Developing Better Software
Developing Better SoftwareDeveloping Better Software
Developing Better Software
 
Webhook & Mailhook
Webhook & MailhookWebhook & Mailhook
Webhook & Mailhook
 
Hacker Culture
Hacker CultureHacker Culture
Hacker Culture
 
Do More With Message Queue
Do More With Message QueueDo More With Message Queue
Do More With Message Queue
 
Building A Software Team
Building A Software TeamBuilding A Software Team
Building A Software Team
 
What the HACK is HHVM?
What the HACK is HHVM?What the HACK is HHVM?
What the HACK is HHVM?
 
Developing MyTrafficCam
Developing MyTrafficCamDeveloping MyTrafficCam
Developing MyTrafficCam
 
Mobile Payment
Mobile PaymentMobile Payment
Mobile Payment
 
Android and web services
Android and web servicesAndroid and web services
Android and web services
 
Color filters for the dummies
Color filters for the dummiesColor filters for the dummies
Color filters for the dummies
 
Android security
Android securityAndroid security
Android security
 
PHP_Frameworks_Discussion
PHP_Frameworks_DiscussionPHP_Frameworks_Discussion
PHP_Frameworks_Discussion
 
Rubik Cubes For Geeks
Rubik Cubes For GeeksRubik Cubes For Geeks
Rubik Cubes For Geeks
 
Geekcamp Android
Geekcamp AndroidGeekcamp Android
Geekcamp Android
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 

Go serving: Building server app with go

  • 1. Go Serving Building Server App With Go Leong Hean Hong | hong@mrleong.net |
  • 2. About ● Hong develops web services in Go and PHP. ● Built a server for proprietary GPS trackers using Go ○ My first experience with Go ○ As a way of introducing Go to the team ● This talk is for developers interested in adopting Go
  • 3. Agenda ● Highlights of Go language ● What I did with Go ● How I did it ● Getting team to adopt Go
  • 4. Highlights Of Go Language
  • 5. Characteristics Of Go ● Compiled ● Statically typed ● With garbage collection ● Concurrency support ● Emits self-contained executable, with minimal dependencies ● Matured, stable ● Active communities
  • 6. Variable Declaration package main import "fmt" func main() { var foo string foo = "Answer:" bar := 42 fmt.Println(foo, bar) }
  • 7. C Language Artifacts package main import "fmt" func main() { for i := 0; i < 10; i++ { fmt.Println("Hello world!") } } #include <stdio.h> int main(void) { int i; for (i = 0; i < 10; i++) { printf("Hello world!n"); } return 0; } Go C
  • 8. Multiple Return Values package main import "fmt" func swap(a int, b int) (int, int) { return b, a } func main() { foo, bar := swap(123, 456) fmt.Println(foo, bar) // “456 123” }
  • 9. Pointer package main import "fmt" type Vertex struct { X int Y int } func main() { v := Vertex{1, 2} p := &v p.X = 123 // Alternative: (*p).X = 123 fmt.Println(v) }
  • 10. Struct, Method package main import "fmt" type Human struct { Age int // Public variable name string // Private variable } // Public function func (human *Human) Walk() { fmt.Println(human.name, "walked.") } // Private function func (human *Human) foo() { fmt.Println("Only accessible within this package.") } func main() { bob := Human{name: "Bob"} bob.Age = 42 bob.Walk() }
  • 11. Implicit Interface Implementation package main import "fmt" type Flyable interface { Fly() } type Bird struct { Name string } // Implicit interface implementation func (bird Bird) Fly() { fmt.Println(bird.Name, "is flying.") } // Implement fmt.Stringer interface func (bird Bird) String() (string) { return bird.Name } func main() { var burung Flyable = Bird{Name: "Bob"} burung.Fly() // "Bob is flying." fmt.Println(burung) // "Bob" }
  • 12. Defer package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("http://www.example.com") if err != nil { return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) fmt.Printf("%s", body) }
  • 13. Goroutine package main import "fmt" import "time" func say(something string) { fmt.Println(something) } func main() { go say("world") say("Hello") time.Sleep(100 * time.Millisecond) }
  • 15. What I Did With Go
  • 16. Server For GPS Tracker Go Server Data Processing (PHP) 3rd Party App GPS Tracker
  • 17. Server For GPS Tracker ● Communicate proprietary protocol over TCP connection ● Act as proxy between GPS tracker and applications, relay information ● Encode/decode data, does not process the data further ● Maintain persistent connections with multiple trackers
  • 18. I used to be a programmer like you, until I took an arrow in the knee
  • 19. How I Did It
  • 20. Listener (net package) listener, err := net.Listen("tcp", ":7700") if err != nil { // handle err } for { conn, err := listener.Accept() if err != nil { // handle err } go HandleConnection(conn) }
  • 21. Send Data (net package) func Send(data string, conn net.Conn) (err error) { _, err = conn.Write([]byte(data)) if err != nil { // handle err } return err }
  • 22. Receive Data for { data, err := bufio.NewReader(conn).ReadString('n') if err != nil { // handle err } fmt.Print(data) }
  • 23. Read Config File ● INI-style config file (sections, and key-value pairs) ● Create a wrapper around github.com/robfig/config to add support for default values c, _ = config.ReadDefault(somefile.cfg') func GetInt(section string, option string, default int) { value, err = c.Int(section, option) if err != nil { return default } return value }
  • 24. Tips ● Use runtime (https://golang.org/pkg/runtime/) package for profiling ● Use systemd for managing server app (http://bit. ly/1M517tk)
  • 25. Getting Team To Adopt Go ● Start from creating simple, easy-to-implement, tools/microservice ● Share your learnings with team ● Share articles of Go usage in famous companies ● Lead by example, you create something useful first ● Create a culture that embraces experimentations and constant learning ● Force them to use it. Have to start using it to appreciate it. ● Go has strength & weakness. Use it appropriately, not for the sake of using it.
  • 26. So long, and thanks for all the fish