SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
BASLE BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA
HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH
GO
The Cloud Programming Language –
An Introduction and Feature Overview
Andrija Sisko
Agenda
Go - The Cloud Programming Language - An Introduction and Feature Overview2 19.09.2016
1. Background
2. Features
Go - The Cloud Programming Language - An Introduction and Feature Overview3 19.09.2016
Background
Brief Histroy
Go - The Cloud Programming Language - An Introduction and Feature Overview4 19.09.2016
Started at Google as an answer to some of the problems seen when developing
software infrastructure at Google
Go's lead developers at Google were Robert Griesemer (Google's V8 JavaScript
engine), Rob Pike (UTF-8, with Ken Thompson), and Ken Thompson (1st
implementer of Unix, with Dennis Ritchie)
Discussions start in late 2007
First draft of specification in March 2008
Open sourced to the public in 2009
Go 1.0, 2012, language specification, standard libraries, and custom tools
Go 1.5, 2015, compiler and runtime written in Go
Go 1.7.1 (latest), 07.09.2016
Origins (1)
Go - The Cloud Programming Language - An Introduction and Feature Overview5 19.09.2016
The Algol family of programming languages
– Block structure
– Nested and recursive functions and procedures
– Type declarations
– Static typing
Algol60 successors: C, Pascal
Pascal successors: Modula, Modula-2, Oberon, Object Oberon, Oberon-2
Origins (2)
Go - The Cloud Programming Language - An Introduction and Feature Overview6 19.09.2016
C: statement and expression syntax
Pascal: declaration syntax
Modula 2, Oberon 2: packages
CSP, Occam, Newsqueak, Limbo, Alef: concurrency
BCPL: the semicolon rule
Smalltalk: methods
Newsqueak: <-, :=
APL: iota
Origins (3)
Go - The Cloud Programming Language - An Introduction and Feature Overview7 19.09.2016
Tree node lookup in Oberon-2
MODULE Trees;
IMPORT Texts, Oberon;
TYPE
Tree* = POINTER TO Node; (* star denotes export, not pointer!
*)
Node* = RECORD
name-: POINTER TO ARRAY OF CHAR; (* minus denotes
read-only export *)
left, right: Tree
END;
PROCEDURE (t: Tree) Lookup* (name: ARRAY OF CHAR): Tree;
VAR p: Tree;
BEGIN p := t;
WHILE (p # NIL) & (name # p.name^) DO
IF name < p.name^ THEN p := p.left ELSE p := p.right END
END;
RETURN p
END Lookup;
...
package trees
import ( "fmt"; "runtime" )
type (
Tree *Node
Node struct {
name string
left, right Tree
})
func (t *Node) Lookup(name string) Tree {
var p Tree
p = t
for p != nil && name != p.name {
if name < p.name { p = p.left } else { p = p.right }
}
return p
}
...
Tree node lookup in Go
Source: The Evolution of Go; GopherCon 2015 Keynote - July 9, 2015; Robert Griesemer; Google, Inc.
Modern Programming Language Design?
Go - The Cloud Programming Language - An Introduction and Feature Overview8 19.09.2016
 Object Oriented
 Functional
 Generics
 Memory Management (Garbage Collection)
 Concurrency
Go Design Goals (1)  Simplicity
Go - The Cloud Programming Language - An Introduction and Feature Overview9 19.09.2016
Clean procedural language designed for scalable cloud software.
Composable distinct elements, including:
– concrete data types
– functions and methods
– interfaces
– packages
– concurrency
Good tools, fast builds.
All the pieces feel simple in practice.
Keywords: Go ~25, Java ~50, C# ~80
Source: Simplicity is Complicated; dotGo 09.11.2015; Rob Pike; Google Inc.
Go Design Goals (2)  Maintainability
Go - The Cloud Programming Language - An Introduction and Feature Overview10 19.09.2016
import scalaz._
import scalaz.std.list._
import scalaz.syntax.monad._
import scalaz.syntax.monoid._
import scalaz.syntax.traverse.{ToFunctorOps => _, _}
class Foo[F[+_] : Monad, A, B](val execute: Foo.Request[A] => F[B], val joins: Foo.Request[A] => B => List[Foo.Request[A]])(implicit J: Foo.Join[A, B]) {
def bar: Foo[({type l[+a]=WriterT[F, Log[A, B], a]})#l, A, B] = {
type TraceW[FF[+_], +AA] = WriterT[FF, Log[A, B], AA]
def execute(request: Request[A]): WriterT[F, Log[A, B], B] =
self.execute(request).liftM[TraceW] :++>> (repr => List(request -> request.response(repr, self.joins(request)(repr))))
----- REDACTED -------
Source: Moving a team from Scala to Golang; http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/
Go Design Goals (3)  Readability
Go - The Cloud Programming Language - An Introduction and Feature Overview11 19.09.2016
From Docker principles
(https://github.com/docker/docker/blob/master/project/PRINCIPLES.md)
– 50 lines of straightforward, readable code is better than 10 lines of magic that
nobody can understand.
Go Characteristics
Go - The Cloud Programming Language - An Introduction and Feature Overview12 19.09.2016
Procedural language
Statically typed
Syntax similar to C (parentheses, no semicolons), with the structure of Oberon-2
Compiles to native code (no VM)  fast execution
No classes, but structs with methods
Interfaces
No implementation inheritance (composition over inheritance)
Functions are first class citizens
Functions can return multiple values
Has closures
Pointers, but not pointer arithmetic
Built-in concurrency primitives: Goroutines and Channels
Go - The Cloud Programming Language - An Introduction and Feature Overview13 19.09.2016
Features
Fast Compiler
Go - The Cloud Programming Language - An Introduction and Feature Overview14 19.09.2016
Reason: Dependency analysis.
– Go provides a model for software construction that makes dependency analysis easy and
avoids much of the overhead of C-style include files and libraries. (Go FAQ)
– Builds in less than 20 seconds on a
Source: https://www.openhub.net/p/docker
Compilation and Deployment
Go - The Cloud Programming Language - An Introduction and Feature Overview15 19.09.2016
Go usually (if pure Go and not linking code from other languages) compiles to one
single statically linked, native executable.
The deployment of a Go program can be done by simply copy the executable.
Package System (1)
Go - The Cloud Programming Language - An Introduction and Feature Overview16 19.09.2016
All Go source is part of a package.
Every file begins with a package statement.
The imported package path is a simple string.
Programs start in package main.
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
Package System (2)
Go - The Cloud Programming Language - An Introduction and Feature Overview17 19.09.2016
Function Println is exported  other packages can call it. Starts with a upper case
letter.
Function newPrinter in unexported  can only be used inside of the fmt package.
// Package fmt implements formatted I/O.
package fmt
// Println formats using the default formats for its
// operands and writes to standard output.
func Println(a ...interface{}) (n int, err error) {
...
}
func newPrinter() *pp {
...
}
Testing Go Packages
Go - The Cloud Programming Language - An Introduction and Feature Overview18 19.09.2016
Package testing provides support for automated testing of Go packages.
Tests are distinguished by file name. Test files end in _test.go.
package fmt
import "testing"
var fmtTests = []fmtTest{
{"%d", 12345, "12345"},
{"%v", 12345, "12345"},
{"%t", true, "true"},
}
func TestSprintf(t *testing.T) {
for _, tt := range fmtTests {
if s := Sprintf(tt.fmt, tt.val); s != tt.out {
t.Errorf("...")
}
}
}
Code Organization
Go - The Cloud Programming Language - An Introduction and Feature Overview19 19.09.2016
Go code is kept in a workspace.
The GOPATH environment variable tells the Go tool where your workspace is
located.
Using a file layout for builds means no configuration: No makefile, no build.xml, no …
Everyone in the community uses the same layout. This makes it easier to share
code.
$GOPATH/
src/
github.com/user/repo/
mypkg/
mysrc1.go
mysrc2.go
cmd/mycmd/
main.go
bin/
mycmd
Remote Packages
Go - The Cloud Programming Language - An Introduction and Feature Overview20 19.09.2016
The import path can refer to remote repositories.
$ go get github.com/4ad/doozer // Shell command to fetch package
import "github.com/4ad/doozer" // Doozer client's import statement
var client doozer.Conn // Client's use of package
$ go get -u all // Updates all packages under the $GOPATH
Error Handling
Go - The Cloud Programming Language - An Introduction and Feature Overview21 19.09.2016
Go has no exceptions.
Errors are indicated with the built-in Error type.
The idiomatic way of error handling in go is to check for errors right after the function
call.
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
// do something with the open *File f
Defer Statement
Go - The Cloud Programming Language - An Introduction and Feature Overview22 19.09.2016
A defer statement pushes a function call onto a list. The list of saved calls is
executed after the surrounding function returns.
Can be used to put acquisition and cleanup of a resource side by side
func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
defer src.Close()
dst, err := os.Create(dstName)
if err != nil {
return
}
defer dst.Close()
return io.Copy(dst, src)
}
Methods on Structs
Go - The Cloud Programming Language - An Introduction and Feature Overview23 19.09.2016
package main
import "fmt"
type Rectangle struct {
length, width int
}
func (r Rectangle) Area() int {
return r.length * r.width
}
func main() {
r1 := Rectangle{4, 3}
fmt.Println("Rectangle is: ", r1)
fmt.Println("Rectangle area is: ", r1.Area())
}
Tools
Go - The Cloud Programming Language - An Introduction and Feature Overview24 19.09.2016
go : build, clean, run, test, install, get, … .
go vet : Go linter for analysing Go code and finding common mistakes.
golint : Checks the code for style violations.
go tool cover : Reports code coverage (untested code).
godoc : Extracts and generates documentation for Go programs.
gofmt : Formats the code according to the only acceptable way of formatting it.
and many more …
Interfaces
Go - The Cloud Programming Language - An Introduction and Feature Overview25 19.09.2016
Interfaces are named collections of method signatures.
Whether or not a type satisfies an interface is determined automatically. Not
implements keyword.
Any type that defines this method is said to satisfy the Stringer interface
type Stringer interface {
String() string
}
Concurrency (1)
Go - The Cloud Programming Language - An Introduction and Feature Overview26 19.09.2016
Based on the work/paper “Communicating Sequential Processes (CSP)” by Tony
Hoare (1978).
Based on message-passing (CSP, Actor Model), instead of shared memory.
Concurrency (2) - Goroutines
Go - The Cloud Programming Language - An Introduction and Feature Overview27 19.09.2016
A goroutine is a function that is capable of running concurrently with other functions.
Goroutines are lightweight. We can easily create thousands of them.
Use the keyword «go» to start a new goroutine.
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
Concurrency (3) - Channels
Go - The Cloud Programming Language - An Introduction and Feature Overview28 19.09.2016
With channels we can pass safely data between goroutines.
Channels are by default synchronous  blocking.
Buffered channels are asynchronous  non blocking.
my_channel := make(chan int)
//within some goroutine - to put a value on the channel
my_channel <- 5
//within some other goroutine - to take a value off the channel
var my_recvd_value int
my_recvd_value = <- my_channel
Who Uses Go
Go - The Cloud Programming Language - An Introduction and Feature Overview30 19.09.2016
GopherCon 2016 Sponsors
Go - The Cloud Programming Language - An Introduction and Feature Overview31 19.09.2016
- https://golang.org/
- https://github.com/golang
- …
List of Sources
Go - The Cloud Programming Language - An Introduction and Feature Overview32 19.09.2016
https://github.com/a8m/go-lang-cheat-sheet
https://talks.golang.org/2015/gophercon-goevolution.slide#1
https://talks.golang.org/2014/hellogophers.slide#1
http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/
http://golangtutorials.blogspot.ch/
https://gobyexample.com/
http://dave.cheney.net/
https://www.golang-book.com/books/intro
http://arild.github.io/csp-presentation/#1
https://en.wikipedia.org/wiki/Communicating_sequential_processes
https://en.wikipedia.org/wiki/Go_(programming_language)
https://www.youtube.com/watch?v=uQgWP7zM6mU
http://www.javaworld.com/article/2929811/scripting-jvm-languages/whats-the-go-language-really-good-for.html
Andrija Sisko
Senior Consultant ZH-AD
Tel. +41 58 459 53 01
andrija.sisko@trivadis.com
19.09.2016 Go - The Cloud Programming Language - An Introduction and Feature Overview33
Session Feedback – now
Go - The Cloud Programming Language - An Introduction and Feature Overview34 19.09.2016
Please use the Trivadis Events mobile app to give feedback on each session
Use "My schedule" if you have registered for a session
Otherwise use "Agenda" and the search function
If the mobile app does not work (or if you have a Windows smartphone), use your
smartphone browser
– URL: http://trivadis.quickmobileplatform.eu/
– User name: <your_loginname> (such as “svv”)
– Password: sent by e-mail...

Weitere ähnliche Inhalte

Was ist angesagt?

Programming with Python - Basic
Programming with Python - BasicProgramming with Python - Basic
Programming with Python - BasicMosky Liu
 
Introduction to Go programming language
Introduction to Go programming languageIntroduction to Go programming language
Introduction to Go programming languageSlawomir Dorzak
 
Introduction to Programming in Go
Introduction to Programming in GoIntroduction to Programming in Go
Introduction to Programming in GoAmr Hassan
 
Take advantage of C++ from Python
Take advantage of C++ from PythonTake advantage of C++ from Python
Take advantage of C++ from PythonYung-Yu Chen
 
10 reasons to be excited about go
10 reasons to be excited about go10 reasons to be excited about go
10 reasons to be excited about goDvir Volk
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Yung-Yu Chen
 
Learn python – for beginners
Learn python – for beginnersLearn python – for beginners
Learn python – for beginnersRajKumar Rampelli
 
Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11corehard_by
 
4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...PROIDEA
 
Python Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingPython Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingRanel Padon
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIYoni Davidson
 
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPyDong-hee Na
 
The Benefits of Type Hints
The Benefits of Type HintsThe Benefits of Type Hints
The Benefits of Type Hintsmasahitojp
 
Sour Pickles
Sour PicklesSour Pickles
Sour PicklesSensePost
 
R and Python, A Code Demo
R and Python, A Code DemoR and Python, A Code Demo
R and Python, A Code DemoVineet Jaiswal
 

Was ist angesagt? (20)

Programming with Python - Basic
Programming with Python - BasicProgramming with Python - Basic
Programming with Python - Basic
 
Go. why it goes v2
Go. why it goes v2Go. why it goes v2
Go. why it goes v2
 
Go Lang Tutorial
Go Lang TutorialGo Lang Tutorial
Go Lang Tutorial
 
Golang
GolangGolang
Golang
 
Introduction to Go programming language
Introduction to Go programming languageIntroduction to Go programming language
Introduction to Go programming language
 
Introduction to Programming in Go
Introduction to Programming in GoIntroduction to Programming in Go
Introduction to Programming in Go
 
Take advantage of C++ from Python
Take advantage of C++ from PythonTake advantage of C++ from Python
Take advantage of C++ from Python
 
10 reasons to be excited about go
10 reasons to be excited about go10 reasons to be excited about go
10 reasons to be excited about go
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020
 
Learn python – for beginners
Learn python – for beginnersLearn python – for beginners
Learn python – for beginners
 
Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11Mixing C++ & Python II: Pybind11
Mixing C++ & Python II: Pybind11
 
Python Presentation
Python PresentationPython Presentation
Python Presentation
 
Presentation on python
Presentation on pythonPresentation on python
Presentation on python
 
4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...
 
Python Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingPython Programming - XIII. GUI Programming
Python Programming - XIII. GUI Programming
 
carrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-APIcarrow - Go bindings to Apache Arrow via C++-API
carrow - Go bindings to Apache Arrow via C++-API
 
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
[GSoC 2017] gopy: Updating gopy to support Python3 and PyPy
 
The Benefits of Type Hints
The Benefits of Type HintsThe Benefits of Type Hints
The Benefits of Type Hints
 
Sour Pickles
Sour PicklesSour Pickles
Sour Pickles
 
R and Python, A Code Demo
R and Python, A Code DemoR and Python, A Code Demo
R and Python, A Code Demo
 

Andere mochten auch

Trivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke Gebbert
Trivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke GebbertTrivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke Gebbert
Trivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke GebbertTrivadis
 
Ficha autoevaluacion trabajo final
Ficha autoevaluacion trabajo finalFicha autoevaluacion trabajo final
Ficha autoevaluacion trabajo finaljulio mendoza
 
Unofficial Transcript
Unofficial TranscriptUnofficial Transcript
Unofficial TranscriptDae Chon
 
Autoevaluación mod iv
Autoevaluación mod ivAutoevaluación mod iv
Autoevaluación mod ivjulio mendoza
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX ConnectTrivadis
 
Molecular Mechanism of Cervical Ripening
Molecular Mechanism of Cervical RipeningMolecular Mechanism of Cervical Ripening
Molecular Mechanism of Cervical RipeningDr Rouf Rashid
 
Trivadis TechEvent 2016 Testen wird überschätzt von Andreas Fend
Trivadis TechEvent 2016 Testen wird überschätzt von Andreas FendTrivadis TechEvent 2016 Testen wird überschätzt von Andreas Fend
Trivadis TechEvent 2016 Testen wird überschätzt von Andreas FendTrivadis
 
Planejamento setembro tia milagres
Planejamento setembro tia milagresPlanejamento setembro tia milagres
Planejamento setembro tia milagresÂngela Brito
 
Payment and small banks a gateway for financial inclusion
Payment and small banks a gateway for financial inclusionPayment and small banks a gateway for financial inclusion
Payment and small banks a gateway for financial inclusionPrashanth Ravada
 

Andere mochten auch (15)

Autoevaluacion III
Autoevaluacion IIIAutoevaluacion III
Autoevaluacion III
 
Energia solar
Energia solarEnergia solar
Energia solar
 
Capa setembro
Capa setembroCapa setembro
Capa setembro
 
Trivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke Gebbert
Trivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke GebbertTrivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke Gebbert
Trivadis TechEvent 2016 Die Kunst der fesselnden Rede von Anke Gebbert
 
Natureza
NaturezaNatureza
Natureza
 
Ficha autoevaluacion trabajo final
Ficha autoevaluacion trabajo finalFicha autoevaluacion trabajo final
Ficha autoevaluacion trabajo final
 
Unofficial Transcript
Unofficial TranscriptUnofficial Transcript
Unofficial Transcript
 
Net56コンセプト
Net56コンセプトNet56コンセプト
Net56コンセプト
 
Autoevaluación mod iv
Autoevaluación mod ivAutoevaluación mod iv
Autoevaluación mod iv
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
 
Molecular Mechanism of Cervical Ripening
Molecular Mechanism of Cervical RipeningMolecular Mechanism of Cervical Ripening
Molecular Mechanism of Cervical Ripening
 
Trivadis TechEvent 2016 Testen wird überschätzt von Andreas Fend
Trivadis TechEvent 2016 Testen wird überschätzt von Andreas FendTrivadis TechEvent 2016 Testen wird überschätzt von Andreas Fend
Trivadis TechEvent 2016 Testen wird überschätzt von Andreas Fend
 
Hydrus 1 d tutorial
Hydrus 1 d tutorialHydrus 1 d tutorial
Hydrus 1 d tutorial
 
Planejamento setembro tia milagres
Planejamento setembro tia milagresPlanejamento setembro tia milagres
Planejamento setembro tia milagres
 
Payment and small banks a gateway for financial inclusion
Payment and small banks a gateway for financial inclusionPayment and small banks a gateway for financial inclusion
Payment and small banks a gateway for financial inclusion
 

Ähnlich wie Go language overview

Coding in GO - GDG SL - NSBM
Coding in GO - GDG SL - NSBMCoding in GO - GDG SL - NSBM
Coding in GO - GDG SL - NSBMRaveen Perera
 
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 1Robert Stern
 
Introduction to Go programming
Introduction to Go programmingIntroduction to Go programming
Introduction to Go programmingExotel
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes
 
Inroduction to golang
Inroduction to golangInroduction to golang
Inroduction to golangYoni Davidson
 
source{d} Engine: Exploring git repos with SQL
source{d} Engine: Exploring git repos with SQLsource{d} Engine: Exploring git repos with SQL
source{d} Engine: Exploring git repos with SQLsource{d}
 
The Go features I can't live without, 2nd round
The Go features I can't live without, 2nd roundThe Go features I can't live without, 2nd round
The Go features I can't live without, 2nd roundRodolfo Carvalho
 
To GO or not to GO
To GO or not to GOTo GO or not to GO
To GO or not to GOsuperstas88
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoRodolfo Carvalho
 
Introduction to Google's Go programming language
Introduction to Google's Go programming languageIntroduction to Google's Go programming language
Introduction to Google's Go programming languageMario Castro Contreras
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesEelco Visser
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageAniruddha Chakrabarti
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Guillaume Laforge
 

Ähnlich wie Go language overview (20)

Coding in GO - GDG SL - NSBM
Coding in GO - GDG SL - NSBMCoding in GO - GDG SL - NSBM
Coding in GO - GDG SL - NSBM
 
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
 
Go introduction
Go   introductionGo   introduction
Go introduction
 
Introduction to Go programming
Introduction to Go programmingIntroduction to Go programming
Introduction to Go programming
 
Geeks Anonymes - Le langage Go
Geeks Anonymes - Le langage GoGeeks Anonymes - Le langage Go
Geeks Anonymes - Le langage Go
 
Inroduction to golang
Inroduction to golangInroduction to golang
Inroduction to golang
 
Go for Rubyists
Go for RubyistsGo for Rubyists
Go for Rubyists
 
Golang workshop
Golang workshopGolang workshop
Golang workshop
 
Python ppt
Python pptPython ppt
Python ppt
 
source{d} Engine: Exploring git repos with SQL
source{d} Engine: Exploring git repos with SQLsource{d} Engine: Exploring git repos with SQL
source{d} Engine: Exploring git repos with SQL
 
Welcome to Go
Welcome to GoWelcome to Go
Welcome to Go
 
The Go features I can't live without, 2nd round
The Go features I can't live without, 2nd roundThe Go features I can't live without, 2nd round
The Go features I can't live without, 2nd round
 
To GO or not to GO
To GO or not to GOTo GO or not to GO
To GO or not to GO
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX Go
 
Introduction to Google's Go programming language
Introduction to Google's Go programming languageIntroduction to Google's Go programming language
Introduction to Google's Go programming language
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) Language
 
Go programing language
Go programing languageGo programing language
Go programing language
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
Golang勉強会
Golang勉強会Golang勉強会
Golang勉強会
 

Mehr von Trivadis

Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...Trivadis
 
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...Trivadis
 
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)Trivadis
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Trivadis
 
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...Trivadis
 
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)Trivadis
 
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...Trivadis
 
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...Trivadis
 
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...Trivadis
 
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...Trivadis
 
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...Trivadis
 
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...Trivadis
 
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - TrivadisTechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - TrivadisTrivadis
 
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...Trivadis
 
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...Trivadis
 
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...Trivadis
 
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...Trivadis
 
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...Trivadis
 
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...Trivadis
 
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - TrivadisTechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - TrivadisTrivadis
 

Mehr von Trivadis (20)

Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
 
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
 
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
 
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
 
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
 
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
 
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
 
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
 
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
 
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
 
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
 
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - TrivadisTechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
 
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
 
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
 
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
 
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
 
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
 
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
 
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - TrivadisTechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
 

Kürzlich hochgeladen

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 

Kürzlich hochgeladen (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Go language overview

  • 1. BASLE BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH GO The Cloud Programming Language – An Introduction and Feature Overview Andrija Sisko
  • 2. Agenda Go - The Cloud Programming Language - An Introduction and Feature Overview2 19.09.2016 1. Background 2. Features
  • 3. Go - The Cloud Programming Language - An Introduction and Feature Overview3 19.09.2016 Background
  • 4. Brief Histroy Go - The Cloud Programming Language - An Introduction and Feature Overview4 19.09.2016 Started at Google as an answer to some of the problems seen when developing software infrastructure at Google Go's lead developers at Google were Robert Griesemer (Google's V8 JavaScript engine), Rob Pike (UTF-8, with Ken Thompson), and Ken Thompson (1st implementer of Unix, with Dennis Ritchie) Discussions start in late 2007 First draft of specification in March 2008 Open sourced to the public in 2009 Go 1.0, 2012, language specification, standard libraries, and custom tools Go 1.5, 2015, compiler and runtime written in Go Go 1.7.1 (latest), 07.09.2016
  • 5. Origins (1) Go - The Cloud Programming Language - An Introduction and Feature Overview5 19.09.2016 The Algol family of programming languages – Block structure – Nested and recursive functions and procedures – Type declarations – Static typing Algol60 successors: C, Pascal Pascal successors: Modula, Modula-2, Oberon, Object Oberon, Oberon-2
  • 6. Origins (2) Go - The Cloud Programming Language - An Introduction and Feature Overview6 19.09.2016 C: statement and expression syntax Pascal: declaration syntax Modula 2, Oberon 2: packages CSP, Occam, Newsqueak, Limbo, Alef: concurrency BCPL: the semicolon rule Smalltalk: methods Newsqueak: <-, := APL: iota
  • 7. Origins (3) Go - The Cloud Programming Language - An Introduction and Feature Overview7 19.09.2016 Tree node lookup in Oberon-2 MODULE Trees; IMPORT Texts, Oberon; TYPE Tree* = POINTER TO Node; (* star denotes export, not pointer! *) Node* = RECORD name-: POINTER TO ARRAY OF CHAR; (* minus denotes read-only export *) left, right: Tree END; PROCEDURE (t: Tree) Lookup* (name: ARRAY OF CHAR): Tree; VAR p: Tree; BEGIN p := t; WHILE (p # NIL) & (name # p.name^) DO IF name < p.name^ THEN p := p.left ELSE p := p.right END END; RETURN p END Lookup; ... package trees import ( "fmt"; "runtime" ) type ( Tree *Node Node struct { name string left, right Tree }) func (t *Node) Lookup(name string) Tree { var p Tree p = t for p != nil && name != p.name { if name < p.name { p = p.left } else { p = p.right } } return p } ... Tree node lookup in Go Source: The Evolution of Go; GopherCon 2015 Keynote - July 9, 2015; Robert Griesemer; Google, Inc.
  • 8. Modern Programming Language Design? Go - The Cloud Programming Language - An Introduction and Feature Overview8 19.09.2016  Object Oriented  Functional  Generics  Memory Management (Garbage Collection)  Concurrency
  • 9. Go Design Goals (1)  Simplicity Go - The Cloud Programming Language - An Introduction and Feature Overview9 19.09.2016 Clean procedural language designed for scalable cloud software. Composable distinct elements, including: – concrete data types – functions and methods – interfaces – packages – concurrency Good tools, fast builds. All the pieces feel simple in practice. Keywords: Go ~25, Java ~50, C# ~80 Source: Simplicity is Complicated; dotGo 09.11.2015; Rob Pike; Google Inc.
  • 10. Go Design Goals (2)  Maintainability Go - The Cloud Programming Language - An Introduction and Feature Overview10 19.09.2016 import scalaz._ import scalaz.std.list._ import scalaz.syntax.monad._ import scalaz.syntax.monoid._ import scalaz.syntax.traverse.{ToFunctorOps => _, _} class Foo[F[+_] : Monad, A, B](val execute: Foo.Request[A] => F[B], val joins: Foo.Request[A] => B => List[Foo.Request[A]])(implicit J: Foo.Join[A, B]) { def bar: Foo[({type l[+a]=WriterT[F, Log[A, B], a]})#l, A, B] = { type TraceW[FF[+_], +AA] = WriterT[FF, Log[A, B], AA] def execute(request: Request[A]): WriterT[F, Log[A, B], B] = self.execute(request).liftM[TraceW] :++>> (repr => List(request -> request.response(repr, self.joins(request)(repr)))) ----- REDACTED ------- Source: Moving a team from Scala to Golang; http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/
  • 11. Go Design Goals (3)  Readability Go - The Cloud Programming Language - An Introduction and Feature Overview11 19.09.2016 From Docker principles (https://github.com/docker/docker/blob/master/project/PRINCIPLES.md) – 50 lines of straightforward, readable code is better than 10 lines of magic that nobody can understand.
  • 12. Go Characteristics Go - The Cloud Programming Language - An Introduction and Feature Overview12 19.09.2016 Procedural language Statically typed Syntax similar to C (parentheses, no semicolons), with the structure of Oberon-2 Compiles to native code (no VM)  fast execution No classes, but structs with methods Interfaces No implementation inheritance (composition over inheritance) Functions are first class citizens Functions can return multiple values Has closures Pointers, but not pointer arithmetic Built-in concurrency primitives: Goroutines and Channels
  • 13. Go - The Cloud Programming Language - An Introduction and Feature Overview13 19.09.2016 Features
  • 14. Fast Compiler Go - The Cloud Programming Language - An Introduction and Feature Overview14 19.09.2016 Reason: Dependency analysis. – Go provides a model for software construction that makes dependency analysis easy and avoids much of the overhead of C-style include files and libraries. (Go FAQ) – Builds in less than 20 seconds on a Source: https://www.openhub.net/p/docker
  • 15. Compilation and Deployment Go - The Cloud Programming Language - An Introduction and Feature Overview15 19.09.2016 Go usually (if pure Go and not linking code from other languages) compiles to one single statically linked, native executable. The deployment of a Go program can be done by simply copy the executable.
  • 16. Package System (1) Go - The Cloud Programming Language - An Introduction and Feature Overview16 19.09.2016 All Go source is part of a package. Every file begins with a package statement. The imported package path is a simple string. Programs start in package main. package main import "fmt" func main() { fmt.Println("Hello, world!") }
  • 17. Package System (2) Go - The Cloud Programming Language - An Introduction and Feature Overview17 19.09.2016 Function Println is exported  other packages can call it. Starts with a upper case letter. Function newPrinter in unexported  can only be used inside of the fmt package. // Package fmt implements formatted I/O. package fmt // Println formats using the default formats for its // operands and writes to standard output. func Println(a ...interface{}) (n int, err error) { ... } func newPrinter() *pp { ... }
  • 18. Testing Go Packages Go - The Cloud Programming Language - An Introduction and Feature Overview18 19.09.2016 Package testing provides support for automated testing of Go packages. Tests are distinguished by file name. Test files end in _test.go. package fmt import "testing" var fmtTests = []fmtTest{ {"%d", 12345, "12345"}, {"%v", 12345, "12345"}, {"%t", true, "true"}, } func TestSprintf(t *testing.T) { for _, tt := range fmtTests { if s := Sprintf(tt.fmt, tt.val); s != tt.out { t.Errorf("...") } } }
  • 19. Code Organization Go - The Cloud Programming Language - An Introduction and Feature Overview19 19.09.2016 Go code is kept in a workspace. The GOPATH environment variable tells the Go tool where your workspace is located. Using a file layout for builds means no configuration: No makefile, no build.xml, no … Everyone in the community uses the same layout. This makes it easier to share code. $GOPATH/ src/ github.com/user/repo/ mypkg/ mysrc1.go mysrc2.go cmd/mycmd/ main.go bin/ mycmd
  • 20. Remote Packages Go - The Cloud Programming Language - An Introduction and Feature Overview20 19.09.2016 The import path can refer to remote repositories. $ go get github.com/4ad/doozer // Shell command to fetch package import "github.com/4ad/doozer" // Doozer client's import statement var client doozer.Conn // Client's use of package $ go get -u all // Updates all packages under the $GOPATH
  • 21. Error Handling Go - The Cloud Programming Language - An Introduction and Feature Overview21 19.09.2016 Go has no exceptions. Errors are indicated with the built-in Error type. The idiomatic way of error handling in go is to check for errors right after the function call. f, err := os.Open("filename.ext") if err != nil { log.Fatal(err) } // do something with the open *File f
  • 22. Defer Statement Go - The Cloud Programming Language - An Introduction and Feature Overview22 19.09.2016 A defer statement pushes a function call onto a list. The list of saved calls is executed after the surrounding function returns. Can be used to put acquisition and cleanup of a resource side by side func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } defer src.Close() dst, err := os.Create(dstName) if err != nil { return } defer dst.Close() return io.Copy(dst, src) }
  • 23. Methods on Structs Go - The Cloud Programming Language - An Introduction and Feature Overview23 19.09.2016 package main import "fmt" type Rectangle struct { length, width int } func (r Rectangle) Area() int { return r.length * r.width } func main() { r1 := Rectangle{4, 3} fmt.Println("Rectangle is: ", r1) fmt.Println("Rectangle area is: ", r1.Area()) }
  • 24. Tools Go - The Cloud Programming Language - An Introduction and Feature Overview24 19.09.2016 go : build, clean, run, test, install, get, … . go vet : Go linter for analysing Go code and finding common mistakes. golint : Checks the code for style violations. go tool cover : Reports code coverage (untested code). godoc : Extracts and generates documentation for Go programs. gofmt : Formats the code according to the only acceptable way of formatting it. and many more …
  • 25. Interfaces Go - The Cloud Programming Language - An Introduction and Feature Overview25 19.09.2016 Interfaces are named collections of method signatures. Whether or not a type satisfies an interface is determined automatically. Not implements keyword. Any type that defines this method is said to satisfy the Stringer interface type Stringer interface { String() string }
  • 26. Concurrency (1) Go - The Cloud Programming Language - An Introduction and Feature Overview26 19.09.2016 Based on the work/paper “Communicating Sequential Processes (CSP)” by Tony Hoare (1978). Based on message-passing (CSP, Actor Model), instead of shared memory.
  • 27. Concurrency (2) - Goroutines Go - The Cloud Programming Language - An Introduction and Feature Overview27 19.09.2016 A goroutine is a function that is capable of running concurrently with other functions. Goroutines are lightweight. We can easily create thousands of them. Use the keyword «go» to start a new goroutine. package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
  • 28. Concurrency (3) - Channels Go - The Cloud Programming Language - An Introduction and Feature Overview28 19.09.2016 With channels we can pass safely data between goroutines. Channels are by default synchronous  blocking. Buffered channels are asynchronous  non blocking. my_channel := make(chan int) //within some goroutine - to put a value on the channel my_channel <- 5 //within some other goroutine - to take a value off the channel var my_recvd_value int my_recvd_value = <- my_channel
  • 29. Who Uses Go Go - The Cloud Programming Language - An Introduction and Feature Overview30 19.09.2016 GopherCon 2016 Sponsors
  • 30. Go - The Cloud Programming Language - An Introduction and Feature Overview31 19.09.2016 - https://golang.org/ - https://github.com/golang - …
  • 31. List of Sources Go - The Cloud Programming Language - An Introduction and Feature Overview32 19.09.2016 https://github.com/a8m/go-lang-cheat-sheet https://talks.golang.org/2015/gophercon-goevolution.slide#1 https://talks.golang.org/2014/hellogophers.slide#1 http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/ http://golangtutorials.blogspot.ch/ https://gobyexample.com/ http://dave.cheney.net/ https://www.golang-book.com/books/intro http://arild.github.io/csp-presentation/#1 https://en.wikipedia.org/wiki/Communicating_sequential_processes https://en.wikipedia.org/wiki/Go_(programming_language) https://www.youtube.com/watch?v=uQgWP7zM6mU http://www.javaworld.com/article/2929811/scripting-jvm-languages/whats-the-go-language-really-good-for.html
  • 32. Andrija Sisko Senior Consultant ZH-AD Tel. +41 58 459 53 01 andrija.sisko@trivadis.com 19.09.2016 Go - The Cloud Programming Language - An Introduction and Feature Overview33
  • 33. Session Feedback – now Go - The Cloud Programming Language - An Introduction and Feature Overview34 19.09.2016 Please use the Trivadis Events mobile app to give feedback on each session Use "My schedule" if you have registered for a session Otherwise use "Agenda" and the search function If the mobile app does not work (or if you have a Windows smartphone), use your smartphone browser – URL: http://trivadis.quickmobileplatform.eu/ – User name: <your_loginname> (such as “svv”) – Password: sent by e-mail...