SlideShare a Scribd company logo
COMPARING
GOLANG AND
UNDERSTANDING
JAVA VALUE TYPES
April 26, 2018 12:00-13:00
Peter Verhas
Software Architect
I AM JAVA PROGRAMMER, WHY SHOULD I CARE?
• I have read about ValueTypes in
2015... So what ?
• I learned a bit Golang in 2016 and
then again Value Types
• Ahhh... that’s it!
• Go is so much different from Java, we
can learn a lot from it
Photo by Les Anderson on Unsplash
DISCLAIMER
1. I am a Java programmer first
2. I am a polyglot programmer second
3. I know Java and Go is only one of the many languages I
am not afraid of
4. I have Swiss Chocolate
WHAT IS THE ANSWER TO THE ULTIMATE QUESTION OF LIFE,
THE UNIVERSE, AND EVERYTHING ?
WAS IST DIE ANTWORT NACH DEM LEBEN, DEM UNIVERSUM UND
DEM GANZEN REST?
FORTY-TWO
ZWEIUNDVIERZIG
42
WHY?
WHICH IS THE BETTER?
GO IS THE LANGUAGE OF GOOGLE
• Go is the new C++
• Go is a system programming language
• Go is genius
• Go is terrible
Photo by Henry Hustava on Unsplash
SERIOUSLY…
• Go is a compiled language source -> exe, no VM
• Object oriented and functional
• There is a garbage collector but it is not a real garbage collector,
• … or is it?
WE WILL TALK ABOUT
• Language syntax
• Exception handling (panic)
• GC
• Local variables and the stack
• Closures
• Goroutines
• Object Orientation and Inheritance
• There is
• There is not
This will teach us the most!
We only slightly touch these!
SYNTAX
• mostly C like Java, C#, Perl, ….
• BUT if a == b {
…
}
if( a == b )
var x : = expressiontypeOfx
• if variable is not used it is an error
• if you import a package you do not use it is an error
• if you do not use semicolon at the end of the line… go will assume you
wanted
• Public is written capitalized. Otherwise private.
FUNCTION DEFINITION
• There are functions… just function
• Methods are also functions with receiver
• We just separate the parts with spaces and parentheses
EXCEPTION HANDLING
• There is no exception handling
• Methods return multiple values (like Python), usually result and error
status
• Panic is like Java throw but should not be used for exceptions, only error
• Defer can be used like Java finally
GARBAGE COLLECTION
• For the programmer: there is an automated Garbage Collector
• For the hard-core JVM guys: it is not a real GC, there is no compacting
• and how objects are stored and managed is a reason for that
LOCAL VARIABLES AND THE STACK
• What happens when you return a pointer to a local variable in C?
• What happens when you return a pointer to a local variable in Go?
• Go will allocate the escaping local variable on the heap.
CLOSURES
• Functions defined inside function
• Surrounding is closure
• Return a function as result (Go is functional)
GOROUTINES
• Goroutines are fibers, lightweight threads.
• You can start a few tens of thousands of them, no problem.
• There is a built-in type: channel. This is a fixed size FIFO.
OBJECTS IN GO
• There is interface in GO but this is something different from what it
is in Java.
• You do not … implements … an interface, you just implement it.
• There is a struct type
• Struct can not extend other structs but it may contain other structs
• Functions may operate on a certain type
17CONFIDENTIAL
INTERFACE
STRUCT DOES NOT „IMPLEMENTS”
STRUCT CONTAINS
FUNCTION WORKS ON A STRUCT TYPE
(RECEIVER OF THE FUNCTION)
VARIABLES ARE EITHER STRUCT TYPE OR
INTERFACE TYPE
OBJECTS IN GO OBJECTS IN JAVA
INTERFACE
CLASS IMPLEMENTS INTERFACE
CLASS EXTENDS
METHOD INSIDE CLASS
VARIABLES ARE EITHER CLASS TYPE OR
INTERFACE TYPE, BUT IT DOES NOT
MATTER
GOLANG „OBJECTS” ARE HEADLESS
• Java has ~ 8/16 byte header in front of each object
• Golang has struct, no header
• Java array  array of references to objects
• Go array  array of struct memory
• (interface array is array of references)
GOLANG „OBJECTS” ARE HEADLESS
• Variables that are struct type hold the value
• Variables that are pointer to struct type know what they point to
• Variables that are interface type have a reference to the struct and
also reference to the struct definition
• Let’s have a weird example that will make you understand and
remember
AND NOW SOMETHING COMPLETELY DIFFERENT
JAVA VALUE TYPES
WHAT ARE VALUE TYPES IN JAVA?
• Project Valhalla started 2014
• byte, short, int, long, float, double, char and boolean
are value types
• Project Valhalla aims user definable value types
• Value types are not objects, they hold only the value
GOLANG STRUCT VS. JAVA VALUE TYPE
struct
interface
value
type
object
object
header
WHY DO WE NEED THEM?
• For example Date is a good candidate to be a value type
• Old mistake: object has synchronization lock support (seemed to be
a good idea)
• Objects occupy the heap, value types are allocated on the stack
• Value type arrays are CPU cache friendly
Codes like a class, works like an int!
CONSEQUENCES
• Compare with ==
• Value type variable can not be null
• Limited or no inheritance
• Even if there is inheritance we cannot have polymorphism
• Method call pass-by-value
CONSEQUENCES FOR JVM
• Scala Value Type can be extended (restricted to 1 field)
• Languages like Swift, Golang can be effectively compiled to JVM
or not…
• Many cases we can stop joking around with off-heap memory
mapped files for high performance data intensive application
OBJECT
DATA
OBJECT HEADER
WHY?
WHICH IS THE BETTER?
VARIABLE
TAKEAWAY
• Java is good as it is
• But it can be and it will be better with value types
• Java will always be better
• and better
• Go, and learn go to be a better (Java) programmer.
https://play.golang.org/
THANK YOU
DANKE
peter@verhas.com, verhas@twitter/github, http://javax0.wordpress.com

More Related Content

What's hot (20)

New c sharp4_features_part_v
New c sharp4_features_part_vNew c sharp4_features_part_v
New c sharp4_features_part_v
Nico Ludwig
 
Functional programming principles and Java 8
Functional programming principles and Java 8Functional programming principles and Java 8
Functional programming principles and Java 8
Dragos Balan
 
“Insulin” for Scala’s Syntactic Diabetes
“Insulin” for Scala’s Syntactic Diabetes“Insulin” for Scala’s Syntactic Diabetes
“Insulin” for Scala’s Syntactic Diabetes
Tzach Zohar
 
Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008
Brian Sam-Bodden
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
Talha Ocakçı
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
myuser
 
Scala
ScalaScala
Scala
guest8996422d
 
Scala days mizushima
Scala days mizushimaScala days mizushima
Scala days mizushima
Skills Matter Talks
 
Java script unleashed
Java script unleashedJava script unleashed
Java script unleashed
Dibyendu Tiwary
 
Introduction to functional programming with java 8
Introduction to functional programming with java 8Introduction to functional programming with java 8
Introduction to functional programming with java 8
JavaBrahman
 
2CPP19 - Summation
2CPP19 - Summation2CPP19 - Summation
2CPP19 - Summation
Michael Heron
 
Intro to kotlin
Intro to kotlinIntro to kotlin
Intro to kotlin
Tomislav Homan
 
Lambdas
LambdasLambdas
Lambdas
malliksunkara
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
Roman Elizarov
 
Into the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional ProgrammingInto the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional Programming
Mike Pence
 
AngularConf2015
AngularConf2015AngularConf2015
AngularConf2015
Alessandro Giorgetti
 
Coding in kotlin
Coding in kotlinCoding in kotlin
Coding in kotlin
Debmalya Jash
 
Java object oriented programming concepts - Brainsmartlabs
Java object oriented programming concepts - BrainsmartlabsJava object oriented programming concepts - Brainsmartlabs
Java object oriented programming concepts - Brainsmartlabs
brainsmartlabsedu
 
Core java programming tutorial - Brainsmartlabs
Core java programming tutorial - BrainsmartlabsCore java programming tutorial - Brainsmartlabs
Core java programming tutorial - Brainsmartlabs
brainsmartlabsedu
 
OOP programming
OOP programmingOOP programming
OOP programming
anhdbh
 
New c sharp4_features_part_v
New c sharp4_features_part_vNew c sharp4_features_part_v
New c sharp4_features_part_v
Nico Ludwig
 
Functional programming principles and Java 8
Functional programming principles and Java 8Functional programming principles and Java 8
Functional programming principles and Java 8
Dragos Balan
 
“Insulin” for Scala’s Syntactic Diabetes
“Insulin” for Scala’s Syntactic Diabetes“Insulin” for Scala’s Syntactic Diabetes
“Insulin” for Scala’s Syntactic Diabetes
Tzach Zohar
 
Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008
Brian Sam-Bodden
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
Talha Ocakçı
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
myuser
 
Introduction to functional programming with java 8
Introduction to functional programming with java 8Introduction to functional programming with java 8
Introduction to functional programming with java 8
JavaBrahman
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
Roman Elizarov
 
Into the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional ProgrammingInto the Land of lambda, One Programmer's Journey Into Functional Programming
Into the Land of lambda, One Programmer's Journey Into Functional Programming
Mike Pence
 
Java object oriented programming concepts - Brainsmartlabs
Java object oriented programming concepts - BrainsmartlabsJava object oriented programming concepts - Brainsmartlabs
Java object oriented programming concepts - Brainsmartlabs
brainsmartlabsedu
 
Core java programming tutorial - Brainsmartlabs
Core java programming tutorial - BrainsmartlabsCore java programming tutorial - Brainsmartlabs
Core java programming tutorial - Brainsmartlabs
brainsmartlabsedu
 
OOP programming
OOP programmingOOP programming
OOP programming
anhdbh
 

Similar to Comparing Golang and understanding Java Value Types (20)

Golang workshop - Mindbowser
Golang workshop - MindbowserGolang workshop - Mindbowser
Golang workshop - Mindbowser
Mindbowser Inc
 
The GO programming language
The GO programming languageThe GO programming language
The GO programming language
Marco Sabatini
 
Should i Go there
Should i Go thereShould i Go there
Should i Go there
Shimi Bandiel
 
Syntax Comparison of Golang with C and Java - Mindbowser
Syntax Comparison of Golang with C and Java - MindbowserSyntax Comparison of Golang with C and Java - Mindbowser
Syntax Comparison of Golang with C and Java - Mindbowser
Mindbowser Inc
 
The Go Programing Language 1
The Go Programing Language 1The Go Programing Language 1
The Go Programing Language 1
İbrahim Kürce
 
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
Mario Castro Contreras
 
Introduction to Go ProgrammingLanguage.ppt
Introduction to Go ProgrammingLanguage.pptIntroduction to Go ProgrammingLanguage.ppt
Introduction to Go ProgrammingLanguage.ppt
PedroAlexandre215482
 
Introduction to Go for Java Developers
Introduction to Go for Java DevelopersIntroduction to Go for Java Developers
Introduction to Go for Java Developers
Laszlo Csontos
 
Go Java, Go!
Go Java, Go!Go Java, Go!
Go Java, Go!
Andres Almiray
 
Go. why it goes v2
Go. why it goes v2Go. why it goes v2
Go. why it goes v2
Sergey Pichkurov
 
Ready to go
Ready to goReady to go
Ready to go
Atin Mukherjee
 
Go Java, Go!
Go Java, Go!Go Java, Go!
Go Java, Go!
Andres Almiray
 
Go Java, Go!
Go Java, Go!Go Java, Go!
Go Java, Go!
Andres Almiray
 
Golang
GolangGolang
Golang
Fatih Şimşek
 
Golang
GolangGolang
Golang
Software Infrastructure
 
Golang
GolangGolang
Golang
Felipe Mamud
 
Go introduction
Go   introductionGo   introduction
Go introduction
Anna Goławska
 
Go. Why it goes
Go. Why it goesGo. Why it goes
Go. Why it goes
Sergey Pichkurov
 
A First Look at Google's Go Programming Language
A First Look at Google's Go Programming LanguageA First Look at Google's Go Programming Language
A First Look at Google's Go Programming Language
Ganesh Samarthyam
 
Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction
Ganesh Samarthyam
 
Ad

Recently uploaded (20)

Who will create the languages of the future?
Who will create the languages of the future?Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlowDevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
Aarno Aukia
 
Marketo & Dynamics can be Most Excellent to Each Other – The Sequel
Marketo & Dynamics can be Most Excellent to Each Other – The SequelMarketo & Dynamics can be Most Excellent to Each Other – The Sequel
Marketo & Dynamics can be Most Excellent to Each Other – The Sequel
BradBedford3
 
The Future of Open Source Reporting Best Alternatives to Jaspersoft.pdf
The Future of Open Source Reporting Best Alternatives to Jaspersoft.pdfThe Future of Open Source Reporting Best Alternatives to Jaspersoft.pdf
The Future of Open Source Reporting Best Alternatives to Jaspersoft.pdf
Varsha Nayak
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FMEIntegrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
14 Years of Developing nCine - An Open Source 2D Game Framework
14 Years of Developing nCine - An Open Source 2D Game Framework14 Years of Developing nCine - An Open Source 2D Game Framework
14 Years of Developing nCine - An Open Source 2D Game Framework
Angelo Theodorou
 
Revolutionize Your Insurance Workflow with Claims Management Software
Revolutionize Your Insurance Workflow with Claims Management SoftwareRevolutionize Your Insurance Workflow with Claims Management Software
Revolutionize Your Insurance Workflow with Claims Management Software
Insurance Tech Services
 
Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3
Gaurav Sharma
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptxwAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Automating Map Production With FME and Python
Automating Map Production With FME and PythonAutomating Map Production With FME and Python
Automating Map Production With FME and Python
Safe Software
 
Software Testing & it’s types (DevOps)
Software  Testing & it’s  types (DevOps)Software  Testing & it’s  types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Artificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across IndustriesArtificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across Industries
SandeepKS52
 
IBM Rational Unified Process For Software Engineering - Introduction
IBM Rational Unified Process For Software Engineering - IntroductionIBM Rational Unified Process For Software Engineering - Introduction
IBM Rational Unified Process For Software Engineering - Introduction
Gaurav Sharma
 
Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...
Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...
Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...
WSO2
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage OverlookCode and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Plooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your wayPlooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your way
Plooma
 
Maximizing Business Value with AWS Consulting Services.pdf
Maximizing Business Value with AWS Consulting Services.pdfMaximizing Business Value with AWS Consulting Services.pdf
Maximizing Business Value with AWS Consulting Services.pdf
Elena Mia
 
Providing Better Biodiversity Through Better Data
Providing Better Biodiversity Through Better DataProviding Better Biodiversity Through Better Data
Providing Better Biodiversity Through Better Data
Safe Software
 
Agile Software Engineering Methodologies
Agile Software Engineering MethodologiesAgile Software Engineering Methodologies
Agile Software Engineering Methodologies
Gaurav Sharma
 
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Wondershare PDFelement Pro 11.4.20.3548 Crack Free DownloadWondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Puppy jhon
 
Who will create the languages of the future?
Who will create the languages of the future?Who will create the languages of the future?
Who will create the languages of the future?
Jordi Cabot
 
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlowDevOps for AI: running LLMs in production with Kubernetes and KubeFlow
DevOps for AI: running LLMs in production with Kubernetes and KubeFlow
Aarno Aukia
 
Marketo & Dynamics can be Most Excellent to Each Other – The Sequel
Marketo & Dynamics can be Most Excellent to Each Other – The SequelMarketo & Dynamics can be Most Excellent to Each Other – The Sequel
Marketo & Dynamics can be Most Excellent to Each Other – The Sequel
BradBedford3
 
The Future of Open Source Reporting Best Alternatives to Jaspersoft.pdf
The Future of Open Source Reporting Best Alternatives to Jaspersoft.pdfThe Future of Open Source Reporting Best Alternatives to Jaspersoft.pdf
The Future of Open Source Reporting Best Alternatives to Jaspersoft.pdf
Varsha Nayak
 
Integrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FMEIntegrating Survey123 and R&H Data Using FME
Integrating Survey123 and R&H Data Using FME
Safe Software
 
14 Years of Developing nCine - An Open Source 2D Game Framework
14 Years of Developing nCine - An Open Source 2D Game Framework14 Years of Developing nCine - An Open Source 2D Game Framework
14 Years of Developing nCine - An Open Source 2D Game Framework
Angelo Theodorou
 
Revolutionize Your Insurance Workflow with Claims Management Software
Revolutionize Your Insurance Workflow with Claims Management SoftwareRevolutionize Your Insurance Workflow with Claims Management Software
Revolutionize Your Insurance Workflow with Claims Management Software
Insurance Tech Services
 
Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3Software Engineering Process, Notation & Tools Introduction - Part 3
Software Engineering Process, Notation & Tools Introduction - Part 3
Gaurav Sharma
 
wAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptxwAIred_RabobankIgniteSession_12062025.pptx
wAIred_RabobankIgniteSession_12062025.pptx
SimonedeGijt
 
Automating Map Production With FME and Python
Automating Map Production With FME and PythonAutomating Map Production With FME and Python
Automating Map Production With FME and Python
Safe Software
 
Software Testing & it’s types (DevOps)
Software  Testing & it’s  types (DevOps)Software  Testing & it’s  types (DevOps)
Software Testing & it’s types (DevOps)
S Pranav (Deepu)
 
Artificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across IndustriesArtificial Intelligence Applications Across Industries
Artificial Intelligence Applications Across Industries
SandeepKS52
 
IBM Rational Unified Process For Software Engineering - Introduction
IBM Rational Unified Process For Software Engineering - IntroductionIBM Rational Unified Process For Software Engineering - Introduction
IBM Rational Unified Process For Software Engineering - Introduction
Gaurav Sharma
 
Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...
Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...
Build Smarter, Deliver Faster with Choreo - An AI Native Internal Developer P...
WSO2
 
Code and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage OverlookCode and No-Code Journeys: The Coverage Overlook
Code and No-Code Journeys: The Coverage Overlook
Applitools
 
Plooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your wayPlooma is a writing platform to plan, write, and shape books your way
Plooma is a writing platform to plan, write, and shape books your way
Plooma
 
Maximizing Business Value with AWS Consulting Services.pdf
Maximizing Business Value with AWS Consulting Services.pdfMaximizing Business Value with AWS Consulting Services.pdf
Maximizing Business Value with AWS Consulting Services.pdf
Elena Mia
 
Providing Better Biodiversity Through Better Data
Providing Better Biodiversity Through Better DataProviding Better Biodiversity Through Better Data
Providing Better Biodiversity Through Better Data
Safe Software
 
Agile Software Engineering Methodologies
Agile Software Engineering MethodologiesAgile Software Engineering Methodologies
Agile Software Engineering Methodologies
Gaurav Sharma
 
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Wondershare PDFelement Pro 11.4.20.3548 Crack Free DownloadWondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Wondershare PDFelement Pro 11.4.20.3548 Crack Free Download
Puppy jhon
 
Ad

Comparing Golang and understanding Java Value Types

  • 1. COMPARING GOLANG AND UNDERSTANDING JAVA VALUE TYPES April 26, 2018 12:00-13:00 Peter Verhas Software Architect
  • 2. I AM JAVA PROGRAMMER, WHY SHOULD I CARE? • I have read about ValueTypes in 2015... So what ? • I learned a bit Golang in 2016 and then again Value Types • Ahhh... that’s it! • Go is so much different from Java, we can learn a lot from it Photo by Les Anderson on Unsplash
  • 3. DISCLAIMER 1. I am a Java programmer first 2. I am a polyglot programmer second 3. I know Java and Go is only one of the many languages I am not afraid of 4. I have Swiss Chocolate
  • 4. WHAT IS THE ANSWER TO THE ULTIMATE QUESTION OF LIFE, THE UNIVERSE, AND EVERYTHING ? WAS IST DIE ANTWORT NACH DEM LEBEN, DEM UNIVERSUM UND DEM GANZEN REST? FORTY-TWO ZWEIUNDVIERZIG
  • 6. GO IS THE LANGUAGE OF GOOGLE • Go is the new C++ • Go is a system programming language • Go is genius • Go is terrible Photo by Henry Hustava on Unsplash
  • 7. SERIOUSLY… • Go is a compiled language source -> exe, no VM • Object oriented and functional • There is a garbage collector but it is not a real garbage collector, • … or is it?
  • 8. WE WILL TALK ABOUT • Language syntax • Exception handling (panic) • GC • Local variables and the stack • Closures • Goroutines • Object Orientation and Inheritance • There is • There is not This will teach us the most! We only slightly touch these!
  • 9. SYNTAX • mostly C like Java, C#, Perl, …. • BUT if a == b { … } if( a == b ) var x : = expressiontypeOfx • if variable is not used it is an error • if you import a package you do not use it is an error • if you do not use semicolon at the end of the line… go will assume you wanted • Public is written capitalized. Otherwise private.
  • 10. FUNCTION DEFINITION • There are functions… just function • Methods are also functions with receiver • We just separate the parts with spaces and parentheses
  • 11. EXCEPTION HANDLING • There is no exception handling • Methods return multiple values (like Python), usually result and error status • Panic is like Java throw but should not be used for exceptions, only error • Defer can be used like Java finally
  • 12. GARBAGE COLLECTION • For the programmer: there is an automated Garbage Collector • For the hard-core JVM guys: it is not a real GC, there is no compacting • and how objects are stored and managed is a reason for that
  • 13. LOCAL VARIABLES AND THE STACK • What happens when you return a pointer to a local variable in C? • What happens when you return a pointer to a local variable in Go? • Go will allocate the escaping local variable on the heap.
  • 14. CLOSURES • Functions defined inside function • Surrounding is closure • Return a function as result (Go is functional)
  • 15. GOROUTINES • Goroutines are fibers, lightweight threads. • You can start a few tens of thousands of them, no problem. • There is a built-in type: channel. This is a fixed size FIFO.
  • 16. OBJECTS IN GO • There is interface in GO but this is something different from what it is in Java. • You do not … implements … an interface, you just implement it. • There is a struct type • Struct can not extend other structs but it may contain other structs • Functions may operate on a certain type
  • 17. 17CONFIDENTIAL INTERFACE STRUCT DOES NOT „IMPLEMENTS” STRUCT CONTAINS FUNCTION WORKS ON A STRUCT TYPE (RECEIVER OF THE FUNCTION) VARIABLES ARE EITHER STRUCT TYPE OR INTERFACE TYPE OBJECTS IN GO OBJECTS IN JAVA INTERFACE CLASS IMPLEMENTS INTERFACE CLASS EXTENDS METHOD INSIDE CLASS VARIABLES ARE EITHER CLASS TYPE OR INTERFACE TYPE, BUT IT DOES NOT MATTER
  • 18. GOLANG „OBJECTS” ARE HEADLESS • Java has ~ 8/16 byte header in front of each object • Golang has struct, no header • Java array  array of references to objects • Go array  array of struct memory • (interface array is array of references)
  • 19. GOLANG „OBJECTS” ARE HEADLESS • Variables that are struct type hold the value • Variables that are pointer to struct type know what they point to • Variables that are interface type have a reference to the struct and also reference to the struct definition • Let’s have a weird example that will make you understand and remember
  • 20. AND NOW SOMETHING COMPLETELY DIFFERENT JAVA VALUE TYPES
  • 21. WHAT ARE VALUE TYPES IN JAVA? • Project Valhalla started 2014 • byte, short, int, long, float, double, char and boolean are value types • Project Valhalla aims user definable value types • Value types are not objects, they hold only the value
  • 22. GOLANG STRUCT VS. JAVA VALUE TYPE struct interface value type object object header
  • 23. WHY DO WE NEED THEM? • For example Date is a good candidate to be a value type • Old mistake: object has synchronization lock support (seemed to be a good idea) • Objects occupy the heap, value types are allocated on the stack • Value type arrays are CPU cache friendly Codes like a class, works like an int!
  • 24. CONSEQUENCES • Compare with == • Value type variable can not be null • Limited or no inheritance • Even if there is inheritance we cannot have polymorphism • Method call pass-by-value
  • 25. CONSEQUENCES FOR JVM • Scala Value Type can be extended (restricted to 1 field) • Languages like Swift, Golang can be effectively compiled to JVM or not… • Many cases we can stop joking around with off-heap memory mapped files for high performance data intensive application
  • 27. TAKEAWAY • Java is good as it is • But it can be and it will be better with value types • Java will always be better • and better • Go, and learn go to be a better (Java) programmer. https://play.golang.org/
  • 28. THANK YOU DANKE [email protected], verhas@twitter/github, http://javax0.wordpress.com

Editor's Notes

  • #2: Title slide with speaker’s photo
  • #3: Key text photo
  • #4: Key text photo
  • #5: Key text photo
  • #6: Key text photo
  • #7: Key text photo
  • #8: Key text photo
  • #9: Key text photo
  • #10: Key text photo
  • #11: https://play.golang.org/p/0hAjISo83w1
  • #12: Key text photo
  • #13: Key text photo
  • #14: Key text photo
  • #15: Key text photo
  • #16: Key text photo
  • #17: Key text photo
  • #18: Key text photo
  • #19: Key text photo
  • #20: Key text photo
  • #21: Key text photo
  • #22: Key text photo
  • #23: Key text photo
  • #24: Key text photo
  • #25: Key text photo
  • #26: Key text photo
  • #27: Key text photo
  • #28: Key text photo
  • #29: Key text photo