SlideShare a Scribd company logo
@JFrog | jfrog.com | #GoCenter
Refactoring to modules
Why, How and Everything Else
@JFrog | jfrog.com | #GoCenter
Who am I?
•DevOps Consultant
•Full-stack software engineer
• Tackling everything from
DevOps and Backend challenges
to the latest Frontend frameworks
Elad Hirsch , DevOps Consultant
@JFrog | jfrog.com | #GoCenter
FROGS - THE LIQUID SOFTWARE COMPANY
@JFrog | jfrog.com | #GoCenter
@JFrog | jfrog.com | #GoCenter
GoCenter
Xray
JFrog CLI
Metadata server
Replicator
E+ Platform Installer
We absolutely love Go and we use it a lot
@JFrog | jfrog.com | #GoCenter
Let’s travel back in time…
@JFrog | jfrog.com | #GoCenter
When did you start with Go?
Let’s turn to the audience for a poll…
1.0
2012
1.2
2013
1.5
2015
1.8
2017
1.11
2018
@JFrog | jfrog.com | #GoCenter
A quick history of go
Go 1.0
First major
milestone as a
long term
stable release
2012 2015
Go 1.5
First release to
no longer use C
(except for cgo)
2017
Go 1.8
Introduction of
Go plugins
2018
Go 1.11
This is where
the magic is! (at
least for this
talk ☺)
@JFrog | jfrog.com | #GoCenter
Dependency Management…
So what is that magic?
@JFrog | jfrog.com | #GoCenter
“Tis impossible to be sure of anything
but Death and Taxes”
- Christopher Bullock
@JFrog | jfrog.com | #GoCenter
Let’s start with the why…
@JFrog | jfrog.com | #GoCenter
Why do we have
this problem?
@JFrog | jfrog.com | #GoCenter
GO origins
@JFrog | jfrog.com | #GoCenter
Dependency management @ Google
•One Huge Makefile
•Refactor into multi Makefile per module
•Pain of dependency management is huge this days
Dependency Hell term
is born
@JFrog | jfrog.com | #GoCenter
Let’s do something very simple
@JFrog | jfrog.com | #GoCenter
One easy solution…?
Dependencies are sources!
Remote imports are in VCS
Dump everything into a single folder
Compile everything together
Profit!!
@JFrog | jfrog.com | #GoCenter
•Which dependencies I use?
•Which dependencies you used?
•Which dependencies I should use?
•Which code I’m editing right now?
•Is there any dependency duplications?
•What is going on?!
Wait ! But… how do I know…
@JFrog | jfrog.com | #GoCenter
The official response - Let’s duplicate dependencies
“Check your dependencies to your own VCS.”
Andrew Gerrand
@JFrog | jfrog.com | #GoCenter
Vendoring – the worst kind of forking
“Copyall of the filesat some version from one version control repository and
pastethem into a differentversion control repository”
@JFrog | jfrog.com | #GoCenter
• History, branch, and tag information is lost
(metadata is lost)
• Pulling updates is impossible
• It invites modification, divergence, and bad
fork
• It wastes space
• Good luck finding which version of the code
you using
But what is wrong with vendoring?
@JFrog | jfrog.com | #GoCenter
Build your own dependency manager…
“It’s not the role of the tooling provided by
the language to dictate how you manage
your code (...)”
Andrew Gerrand
@JFrog | jfrog.com | #GoCenter
The community steps in
AND THE NEXT THING YOU KNOW…
THERE ARE 19 DEPENDENCY MANAGERS
@JFrog | jfrog.com | #GoCenter
•Working in project directories
•Local cache for dependencies
•Version declarations
•Conflict resolution
Go dep – Proper dependency management?
•Started as an experiment
•Lesson learned from - java / npm …
•Main challenge - how to solve conflict resolution
• Dep disallow multiple major versions
• GO Tech lead Russ Cox took another approach
• Go -> Simple solution -> SMV
Go dep status
@JFrog | jfrog.com | #GoCenter
Let’s actually go fix it!
GO Modules
@JFrog | jfrog.com | #GoCenter
Who is using Go modules?
Let’s turn to the audience for another poll…
Yes No
@JFrog | jfrog.com | #GoCenter
Module
A module is a collection of
related Go packages that
are versioned together as a
single unit.
Let’s go over some definitions
@JFrog | jfrog.com | #GoCenter
Sources
A module is a tree
(directory) of Go source
files with a go.mod file in
the root directory.
Let’s go over some definitions
@JFrog | jfrog.com | #GoCenter
Version Control
Most often, a single
version-control repository
corresponds exactly to a
single module
Let’s go over some definitions
@JFrog | jfrog.com | #GoCenter
Set the environment variable
GO111MODULE to ON
you do not need to set
GO111MODULE
Using go modules
1
2
Work inside $GOPATH Work outside $GOPATH
@JFrog | jfrog.com | #GoCenter
mkdir mymodule
cd mymodule
go mod init github.com/retgits/mymodule
Creating a module
@JFrog | jfrog.com | #GoCenter
•Import dependencies from Gopkg.lock
go mod init <module path>
•Remove unnecessary imports and add indirect imports
go mod tidy
•Delete the vendor folder
rm –rf vendor/
•Delete Gopkg files
rm Gopkg.*
Moving from DEP to modules
Upgrade from dep to go modules
git clone https://github.com/eladh/sample-app-go-dep.git
@JFrog | jfrog.com | #GoCenter
module github.com/retgits/mymodule
go 1.12
require (
github.com/naoina/go-stringutil v0.1.0
github.com/some/dependency v1.2.3
github.com/google/go-github/v25 v25.0.1
)
replace github.com/some/dependency github.com/retgits/dependency
Versioning
@JFrog | jfrog.com | #GoCenter
@JFrog | jfrog.com | #GoCenter
module github.com/retgits/mymodule
go 1.12
require (
github.com/naoina/go-stringutil v0.1.0
github.com/some/dependency v1.2.3
github.com/google/go-github/v25 v25.0.1
)
replace github.com/some/dependency github.com/retgits/dependency
Replacing packages
@JFrog | jfrog.com | #GoCenter
module github.com/retgits/mymodule
go 1.12
require (
github.com/naoina/go-stringutil v0.1.0
github.com/some/dependency v1.2.3
github.com/google/go-github/v25 v25.0.1
)
replace github.com/some/dependency ../../Downloads/dependency
It’s great when you got dependencies
that still under local development
@JFrog | jfrog.com | #GoCenter
•You can create the vendor folder
go mod vendor
•You can use the vendor folder during builds
go build –mod=vendor
This does mean you need to have all dependencies
listed in your go.mod file
But I kinda like the vendor folder?
It’s provide us dependencies beforehand
@JFrog | jfrog.com | #GoCenter
Before modules
go get https://github.com/sirupsen/logrus
git clone https://github.com/sirupsen/logrus
<build module locally>
With modules
go get github.com/sirupsen/logrus
GET github.com/sirupsen/logrus/@v/list
GET github.com/sirupsen/logrus/@v/v1.0.0.mod
GET github.com/sirupsen/logrus/@v/v1.0.0.zip
Go get my a new super duper module
@JFrog | jfrog.com | #GoCenter
Houston… I think I lost my module?
@JFrog | jfrog.com | #GoCenter
The <module>@v<version> construct should be immutable
That means that
github.com/retgits/checkiday/@v/v1.0.0
Should forever be the same…
Modules are immutable
@JFrog | jfrog.com | #GoCenter
But are they really?
”Friends don’t let friends do git push -f”
- Aaron Schlesinger
@JFrog | jfrog.com | #GoCenter
Using the GOPROXY variable
export GOPROXY=https://myawesomeproxy.com
go get github.com/retgits/checkiday
@JFrog | jfrog.com | #GoCenter
A Go module proxy is any web server that can
respond to GET requests for URLs of a specified form.
The requests have no query parameters, so even a
site serving from a fixed file system (including a
file:/// URL) can be a module proxy.
@JFrog | jfrog.com | #GoCenter
Keeping modules
Highly available, CDN, no infra, free
Public cache (public proxy)
Immediate access, not shared, can be wiped…
Local cache ($GOPATH/pkg/mod)
Fast access, requires infra, shared across devs
Organizational cache (private proxy)
@JFrog | jfrog.com | #GoCenter
And also faster builds…
Let’s check public proxy performance
@JFrog | jfrog.com | #GoCenter
@JFrog | jfrog.com | #GoCenter
What is a 5* module for you?
How can we ensure module quality ?
@JFrog | jfrog.com | #GoCenter
•If you haven’t, start with Go modules:
GO111MODULE=on if you must stay on $GOPATH
•Start working outside of your $GOPATH
•Use a public proxy server for immutable Go modules
(like GoCenter.io)
•Think about running your own proxy server or repository
manager such as Artifactory or Athens
Final thoughts
@JFrog | jfrog.com | #GoCenter
Go modules are in beta stage ?
Modules are supported from Go version 1.11
but it will be finalized in Go version 1.13
@JFrog | jfrog.com | #GoCenter
@JFrog | jfrog.com | #GoCenter
There’s one more thing…
But before I go…
@JFrog | jfrog.com | #GoCenter
Promo - 100NIS_less
@JFrog | jfrog.com | #GoCenter
Thank you!
@JFrog | jfrog.com | #GoCenter
▪
JFrog CLI
// Configure Artifactory:
jfrog rt c
//Configure the project's repositories::
jfrog rt go-config
//Build the project with go and resolve the project dependencies from
Artifactory.
jfrog rt go build --build-name=my-build --build-number=1
//Publish the package we build to Artifactory.
jfrog rt gp go v1.0.0 --build-name=my-build --build-number=1
//Collect environment variables and add them to the build info.
jfrog rt bce my-build 1
//Publish the build info to Artifactory.
jfrog rt bp my-build 1
JFrog CLI - GO support

More Related Content

What's hot

History and Development of OpenJDK
History and Development of OpenJDKHistory and Development of OpenJDK
History and Development of OpenJDK
LINE Corporation
 
Gerrit Code Review
Gerrit Code ReviewGerrit Code Review
Gerrit Code Review
Johannes Barop
 
[INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno
 [INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno [INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno
[INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno
Nexus FrontierTech
 
iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人
iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人
iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人
Evan Lin
 
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Codemotion
 
Getting started with Go - Florin Patan - Codemotion Rome 2017
Getting started with Go - Florin Patan - Codemotion Rome 2017Getting started with Go - Florin Patan - Codemotion Rome 2017
Getting started with Go - Florin Patan - Codemotion Rome 2017
Codemotion
 
如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot
如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot
如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot
Evan Lin
 
Golang taipei #45 10th birthday
Golang taipei #45 10th birthdayGolang taipei #45 10th birthday
Golang taipei #45 10th birthday
Evan Lin
 
Collaborative development with git
Collaborative development with gitCollaborative development with git
Collaborative development with git
Joseluis Laso
 
Deploying Joomla sites with GIT
Deploying Joomla sites with GITDeploying Joomla sites with GIT
Deploying Joomla sites with GIT
Ashwin Date
 
GoLang Introduction
GoLang IntroductionGoLang Introduction
GoLang Introduction
Spandana Govindgari
 
RESTful API Development using Go
RESTful API Development using GoRESTful API Development using Go
RESTful API Development using Go
Baiju Muthukadan
 
Distributed Versioning Tools, BeJUG 2010
Distributed Versioning Tools, BeJUG 2010Distributed Versioning Tools, BeJUG 2010
Distributed Versioning Tools, BeJUG 2010
Pursuit Consulting
 
Introduction to Go
Introduction to GoIntroduction to Go
Introduction to Go
Simon Hewitt
 
Coding with golang
Coding with golangCoding with golang
Coding with golang
HannahMoss14
 
State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008
Andreas Jung
 
CI/CD: Lessons from LinkedIn and Mockito
CI/CD: Lessons from LinkedIn and MockitoCI/CD: Lessons from LinkedIn and Mockito
CI/CD: Lessons from LinkedIn and Mockito
C4Media
 
Building Command Line Tools with Golang
Building Command Line Tools with GolangBuilding Command Line Tools with Golang
Building Command Line Tools with Golang
Takaaki Mizuno
 
The development workflow of git github for beginners
The development workflow of git github for beginnersThe development workflow of git github for beginners
The development workflow of git github for beginners
Gunjan Patel
 
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Aniruddha Chakrabarti
 

What's hot (20)

History and Development of OpenJDK
History and Development of OpenJDKHistory and Development of OpenJDK
History and Development of OpenJDK
 
Gerrit Code Review
Gerrit Code ReviewGerrit Code Review
Gerrit Code Review
 
[INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno
 [INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno [INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno
[INNOVATUBE] Tech Talk #3: Golang - Takaaki Mizuno
 
iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人
iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人
iThome Chatbot Day: 透過 Golang 無痛建置機器學習聊天機器人
 
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
Collaborative Development: The Only CD That Matters - Brent Beer - Codemotion...
 
Getting started with Go - Florin Patan - Codemotion Rome 2017
Getting started with Go - Florin Patan - Codemotion Rome 2017Getting started with Go - Florin Patan - Codemotion Rome 2017
Getting started with Go - Florin Patan - Codemotion Rome 2017
 
如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot
如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot
如何透過 Golang 與 Heroku 來一鍵部署 臉書機器人與 Line Bot
 
Golang taipei #45 10th birthday
Golang taipei #45 10th birthdayGolang taipei #45 10th birthday
Golang taipei #45 10th birthday
 
Collaborative development with git
Collaborative development with gitCollaborative development with git
Collaborative development with git
 
Deploying Joomla sites with GIT
Deploying Joomla sites with GITDeploying Joomla sites with GIT
Deploying Joomla sites with GIT
 
GoLang Introduction
GoLang IntroductionGoLang Introduction
GoLang Introduction
 
RESTful API Development using Go
RESTful API Development using GoRESTful API Development using Go
RESTful API Development using Go
 
Distributed Versioning Tools, BeJUG 2010
Distributed Versioning Tools, BeJUG 2010Distributed Versioning Tools, BeJUG 2010
Distributed Versioning Tools, BeJUG 2010
 
Introduction to Go
Introduction to GoIntroduction to Go
Introduction to Go
 
Coding with golang
Coding with golangCoding with golang
Coding with golang
 
State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008
 
CI/CD: Lessons from LinkedIn and Mockito
CI/CD: Lessons from LinkedIn and MockitoCI/CD: Lessons from LinkedIn and Mockito
CI/CD: Lessons from LinkedIn and Mockito
 
Building Command Line Tools with Golang
Building Command Line Tools with GolangBuilding Command Line Tools with Golang
Building Command Line Tools with Golang
 
The development workflow of git github for beginners
The development workflow of git github for beginnersThe development workflow of git github for beginners
The development workflow of git github for beginners
 
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
 

Similar to Refactoring to GO modules

Building a Kubernetes Powered Central Go Modules Repository
Building a Kubernetes Powered Central Go Modules RepositoryBuilding a Kubernetes Powered Central Go Modules Repository
Building a Kubernetes Powered Central Go Modules Repository
Leon Stigter
 
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes… Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Leon Stigter
 
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Leon Stigter
 
Cloud native - CI/CD
Cloud native - CI/CDCloud native - CI/CD
Cloud native - CI/CD
Elad Hirsch
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
ElasTest Project
 
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Fabrice Bernhard
 
Refactoring to Go modules: why and how
Refactoring to Go modules: why and howRefactoring to Go modules: why and how
Refactoring to Go modules: why and how
Leon Stigter
 
Introduction to git & github
Introduction to git & githubIntroduction to git & github
Introduction to git & github
Vinothini KadambavanaSundaram
 
Advantages of golang development services &amp; 10 most used go frameworks
Advantages of golang development services &amp; 10 most used go frameworksAdvantages of golang development services &amp; 10 most used go frameworks
Advantages of golang development services &amp; 10 most used go frameworks
Katy Slemon
 
Artifactory Essentials Workshop on August 27, 2020 by JFrog
Artifactory Essentials Workshop on August 27, 2020 by JFrogArtifactory Essentials Workshop on August 27, 2020 by JFrog
Artifactory Essentials Workshop on August 27, 2020 by JFrog
Cloud Study Network
 
Trusting Your Ingredients - What Building Software And Cheesecake Have In Common
Trusting Your Ingredients - What Building Software And Cheesecake Have In CommonTrusting Your Ingredients - What Building Software And Cheesecake Have In Common
Trusting Your Ingredients - What Building Software And Cheesecake Have In Common
Leon Stigter
 
Where did my modules GO? Building and deploying Go Apps w/ GoCenter & Codefresh
Where did my modules GO? Building and deploying Go Apps w/ GoCenter & CodefreshWhere did my modules GO? Building and deploying Go Apps w/ GoCenter & Codefresh
Where did my modules GO? Building and deploying Go Apps w/ GoCenter & Codefresh
Leon Stigter
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
Bo-Yi Wu
 
Best practices for joomla extensions developers
Best practices for joomla extensions developersBest practices for joomla extensions developers
Best practices for joomla extensions developers
Francesco Abeni
 
Unit Test for ZF SlideShare Component
Unit Test for ZF SlideShare ComponentUnit Test for ZF SlideShare Component
Unit Test for ZF SlideShare Component
Diego Delon
 
Build and Deploy a Python Web App to Amazon in 30 Mins
Build and Deploy a Python Web App to Amazon in 30 MinsBuild and Deploy a Python Web App to Amazon in 30 Mins
Build and Deploy a Python Web App to Amazon in 30 Mins
Jeff Hull
 
So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...
Joe Ferguson
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go lang
Amal Mohan N
 
Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?
Bruno Capuano
 
Griffon for the Enterprise
Griffon for the EnterpriseGriffon for the Enterprise
Griffon for the Enterprise
James Williams
 

Similar to Refactoring to GO modules (20)

Building a Kubernetes Powered Central Go Modules Repository
Building a Kubernetes Powered Central Go Modules RepositoryBuilding a Kubernetes Powered Central Go Modules Repository
Building a Kubernetes Powered Central Go Modules Repository
 
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes… Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
 
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
Refactoring to Modules - Why, How and Everything Else I Can Fit In 45 Minutes…
 
Cloud native - CI/CD
Cloud native - CI/CDCloud native - CI/CD
Cloud native - CI/CD
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
 
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
Modernisation of legacy PHP applications using Symfony2 - PHP Northeast Confe...
 
Refactoring to Go modules: why and how
Refactoring to Go modules: why and howRefactoring to Go modules: why and how
Refactoring to Go modules: why and how
 
Introduction to git & github
Introduction to git & githubIntroduction to git & github
Introduction to git & github
 
Advantages of golang development services &amp; 10 most used go frameworks
Advantages of golang development services &amp; 10 most used go frameworksAdvantages of golang development services &amp; 10 most used go frameworks
Advantages of golang development services &amp; 10 most used go frameworks
 
Artifactory Essentials Workshop on August 27, 2020 by JFrog
Artifactory Essentials Workshop on August 27, 2020 by JFrogArtifactory Essentials Workshop on August 27, 2020 by JFrog
Artifactory Essentials Workshop on August 27, 2020 by JFrog
 
Trusting Your Ingredients - What Building Software And Cheesecake Have In Common
Trusting Your Ingredients - What Building Software And Cheesecake Have In CommonTrusting Your Ingredients - What Building Software And Cheesecake Have In Common
Trusting Your Ingredients - What Building Software And Cheesecake Have In Common
 
Where did my modules GO? Building and deploying Go Apps w/ GoCenter & Codefresh
Where did my modules GO? Building and deploying Go Apps w/ GoCenter & CodefreshWhere did my modules GO? Building and deploying Go Apps w/ GoCenter & Codefresh
Where did my modules GO? Building and deploying Go Apps w/ GoCenter & Codefresh
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
Best practices for joomla extensions developers
Best practices for joomla extensions developersBest practices for joomla extensions developers
Best practices for joomla extensions developers
 
Unit Test for ZF SlideShare Component
Unit Test for ZF SlideShare ComponentUnit Test for ZF SlideShare Component
Unit Test for ZF SlideShare Component
 
Build and Deploy a Python Web App to Amazon in 30 Mins
Build and Deploy a Python Web App to Amazon in 30 MinsBuild and Deploy a Python Web App to Amazon in 30 Mins
Build and Deploy a Python Web App to Amazon in 30 Mins
 
So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go lang
 
Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?Que nos espera a los ALM Dudes para el 2013?
Que nos espera a los ALM Dudes para el 2013?
 
Griffon for the Enterprise
Griffon for the EnterpriseGriffon for the Enterprise
Griffon for the Enterprise
 

More from Elad Hirsch

Data in the wild west with some DevOps to the rescue
Data in the wild west with some DevOps to the rescueData in the wild west with some DevOps to the rescue
Data in the wild west with some DevOps to the rescue
Elad Hirsch
 
Intro to kubernetes
Intro to kubernetesIntro to kubernetes
Intro to kubernetes
Elad Hirsch
 
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSKNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
Elad Hirsch
 
JaVers (Open Source) - Object auditing and diff framework
 JaVers (Open Source) - Object auditing and diff framework JaVers (Open Source) - Object auditing and diff framework
JaVers (Open Source) - Object auditing and diff framework
Elad Hirsch
 
So you want to write a cloud function
So you want to write a cloud functionSo you want to write a cloud function
So you want to write a cloud function
Elad Hirsch
 
Migrate AngularJS to Angular (v5)
Migrate AngularJS  to Angular (v5)Migrate AngularJS  to Angular (v5)
Migrate AngularJS to Angular (v5)
Elad Hirsch
 
devjam2018 - angular 5 performance
devjam2018  - angular 5 performancedevjam2018  - angular 5 performance
devjam2018 - angular 5 performance
Elad Hirsch
 
Jenkins 17 IL - JavaScript CI/CD
Jenkins 17 IL - JavaScript CI/CDJenkins 17 IL - JavaScript CI/CD
Jenkins 17 IL - JavaScript CI/CD
Elad Hirsch
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project 
Elad Hirsch
 
Jenkins 1
Jenkins 1Jenkins 1
Jenkins 1
Elad Hirsch
 

More from Elad Hirsch (10)

Data in the wild west with some DevOps to the rescue
Data in the wild west with some DevOps to the rescueData in the wild west with some DevOps to the rescue
Data in the wild west with some DevOps to the rescue
 
Intro to kubernetes
Intro to kubernetesIntro to kubernetes
Intro to kubernetes
 
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADSKNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
KNATIVE - DEPLOY, AND MANAGE MODERN CONTAINER-BASED SERVERLESS WORKLOADS
 
JaVers (Open Source) - Object auditing and diff framework
 JaVers (Open Source) - Object auditing and diff framework JaVers (Open Source) - Object auditing and diff framework
JaVers (Open Source) - Object auditing and diff framework
 
So you want to write a cloud function
So you want to write a cloud functionSo you want to write a cloud function
So you want to write a cloud function
 
Migrate AngularJS to Angular (v5)
Migrate AngularJS  to Angular (v5)Migrate AngularJS  to Angular (v5)
Migrate AngularJS to Angular (v5)
 
devjam2018 - angular 5 performance
devjam2018  - angular 5 performancedevjam2018  - angular 5 performance
devjam2018 - angular 5 performance
 
Jenkins 17 IL - JavaScript CI/CD
Jenkins 17 IL - JavaScript CI/CDJenkins 17 IL - JavaScript CI/CD
Jenkins 17 IL - JavaScript CI/CD
 
AngularJS - Architecture decisions in a large project 
AngularJS - Architecture decisionsin a large project AngularJS - Architecture decisionsin a large project 
AngularJS - Architecture decisions in a large project 
 
Jenkins 1
Jenkins 1Jenkins 1
Jenkins 1
 

Recently uploaded

Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
safelyiotech
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
kalichargn70th171
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
Massimo Artizzu
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Project Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdfProject Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdf
Karya Keeper
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
Patrick Weigel
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
NishanthaBulumulla1
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
AnkitaPandya11
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
dakas1
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
TaghreedAltamimi
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 

Recently uploaded (20)

Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Project Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdfProject Management: The Role of Project Dashboards.pdf
Project Management: The Role of Project Dashboards.pdf
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 

Refactoring to GO modules

  • 1. @JFrog | jfrog.com | #GoCenter Refactoring to modules Why, How and Everything Else
  • 2. @JFrog | jfrog.com | #GoCenter Who am I? •DevOps Consultant •Full-stack software engineer • Tackling everything from DevOps and Backend challenges to the latest Frontend frameworks Elad Hirsch , DevOps Consultant
  • 3. @JFrog | jfrog.com | #GoCenter FROGS - THE LIQUID SOFTWARE COMPANY
  • 4. @JFrog | jfrog.com | #GoCenter
  • 5. @JFrog | jfrog.com | #GoCenter GoCenter Xray JFrog CLI Metadata server Replicator E+ Platform Installer We absolutely love Go and we use it a lot
  • 6. @JFrog | jfrog.com | #GoCenter Let’s travel back in time…
  • 7. @JFrog | jfrog.com | #GoCenter When did you start with Go? Let’s turn to the audience for a poll… 1.0 2012 1.2 2013 1.5 2015 1.8 2017 1.11 2018
  • 8. @JFrog | jfrog.com | #GoCenter A quick history of go Go 1.0 First major milestone as a long term stable release 2012 2015 Go 1.5 First release to no longer use C (except for cgo) 2017 Go 1.8 Introduction of Go plugins 2018 Go 1.11 This is where the magic is! (at least for this talk ☺)
  • 9. @JFrog | jfrog.com | #GoCenter Dependency Management… So what is that magic?
  • 10. @JFrog | jfrog.com | #GoCenter “Tis impossible to be sure of anything but Death and Taxes” - Christopher Bullock
  • 11. @JFrog | jfrog.com | #GoCenter Let’s start with the why…
  • 12. @JFrog | jfrog.com | #GoCenter Why do we have this problem?
  • 13. @JFrog | jfrog.com | #GoCenter GO origins
  • 14. @JFrog | jfrog.com | #GoCenter Dependency management @ Google •One Huge Makefile •Refactor into multi Makefile per module •Pain of dependency management is huge this days Dependency Hell term is born
  • 15. @JFrog | jfrog.com | #GoCenter Let’s do something very simple
  • 16. @JFrog | jfrog.com | #GoCenter One easy solution…? Dependencies are sources! Remote imports are in VCS Dump everything into a single folder Compile everything together Profit!!
  • 17. @JFrog | jfrog.com | #GoCenter •Which dependencies I use? •Which dependencies you used? •Which dependencies I should use? •Which code I’m editing right now? •Is there any dependency duplications? •What is going on?! Wait ! But… how do I know…
  • 18. @JFrog | jfrog.com | #GoCenter The official response - Let’s duplicate dependencies “Check your dependencies to your own VCS.” Andrew Gerrand
  • 19. @JFrog | jfrog.com | #GoCenter Vendoring – the worst kind of forking “Copyall of the filesat some version from one version control repository and pastethem into a differentversion control repository”
  • 20. @JFrog | jfrog.com | #GoCenter • History, branch, and tag information is lost (metadata is lost) • Pulling updates is impossible • It invites modification, divergence, and bad fork • It wastes space • Good luck finding which version of the code you using But what is wrong with vendoring?
  • 21. @JFrog | jfrog.com | #GoCenter Build your own dependency manager… “It’s not the role of the tooling provided by the language to dictate how you manage your code (...)” Andrew Gerrand
  • 22. @JFrog | jfrog.com | #GoCenter The community steps in
  • 23. AND THE NEXT THING YOU KNOW… THERE ARE 19 DEPENDENCY MANAGERS
  • 24.
  • 25. @JFrog | jfrog.com | #GoCenter •Working in project directories •Local cache for dependencies •Version declarations •Conflict resolution Go dep – Proper dependency management?
  • 26. •Started as an experiment •Lesson learned from - java / npm … •Main challenge - how to solve conflict resolution • Dep disallow multiple major versions • GO Tech lead Russ Cox took another approach • Go -> Simple solution -> SMV Go dep status
  • 27.
  • 28.
  • 29.
  • 30. @JFrog | jfrog.com | #GoCenter Let’s actually go fix it!
  • 32. @JFrog | jfrog.com | #GoCenter Who is using Go modules? Let’s turn to the audience for another poll… Yes No
  • 33. @JFrog | jfrog.com | #GoCenter Module A module is a collection of related Go packages that are versioned together as a single unit. Let’s go over some definitions
  • 34. @JFrog | jfrog.com | #GoCenter Sources A module is a tree (directory) of Go source files with a go.mod file in the root directory. Let’s go over some definitions
  • 35. @JFrog | jfrog.com | #GoCenter Version Control Most often, a single version-control repository corresponds exactly to a single module Let’s go over some definitions
  • 36. @JFrog | jfrog.com | #GoCenter Set the environment variable GO111MODULE to ON you do not need to set GO111MODULE Using go modules 1 2 Work inside $GOPATH Work outside $GOPATH
  • 37. @JFrog | jfrog.com | #GoCenter mkdir mymodule cd mymodule go mod init github.com/retgits/mymodule Creating a module
  • 38. @JFrog | jfrog.com | #GoCenter •Import dependencies from Gopkg.lock go mod init <module path> •Remove unnecessary imports and add indirect imports go mod tidy •Delete the vendor folder rm –rf vendor/ •Delete Gopkg files rm Gopkg.* Moving from DEP to modules
  • 39. Upgrade from dep to go modules git clone https://github.com/eladh/sample-app-go-dep.git
  • 40. @JFrog | jfrog.com | #GoCenter module github.com/retgits/mymodule go 1.12 require ( github.com/naoina/go-stringutil v0.1.0 github.com/some/dependency v1.2.3 github.com/google/go-github/v25 v25.0.1 ) replace github.com/some/dependency github.com/retgits/dependency Versioning
  • 41. @JFrog | jfrog.com | #GoCenter
  • 42. @JFrog | jfrog.com | #GoCenter module github.com/retgits/mymodule go 1.12 require ( github.com/naoina/go-stringutil v0.1.0 github.com/some/dependency v1.2.3 github.com/google/go-github/v25 v25.0.1 ) replace github.com/some/dependency github.com/retgits/dependency Replacing packages
  • 43. @JFrog | jfrog.com | #GoCenter module github.com/retgits/mymodule go 1.12 require ( github.com/naoina/go-stringutil v0.1.0 github.com/some/dependency v1.2.3 github.com/google/go-github/v25 v25.0.1 ) replace github.com/some/dependency ../../Downloads/dependency It’s great when you got dependencies that still under local development
  • 44. @JFrog | jfrog.com | #GoCenter •You can create the vendor folder go mod vendor •You can use the vendor folder during builds go build –mod=vendor This does mean you need to have all dependencies listed in your go.mod file But I kinda like the vendor folder? It’s provide us dependencies beforehand
  • 45. @JFrog | jfrog.com | #GoCenter Before modules go get https://github.com/sirupsen/logrus git clone https://github.com/sirupsen/logrus <build module locally> With modules go get github.com/sirupsen/logrus GET github.com/sirupsen/logrus/@v/list GET github.com/sirupsen/logrus/@v/v1.0.0.mod GET github.com/sirupsen/logrus/@v/v1.0.0.zip Go get my a new super duper module
  • 46. @JFrog | jfrog.com | #GoCenter Houston… I think I lost my module?
  • 47. @JFrog | jfrog.com | #GoCenter The <module>@v<version> construct should be immutable That means that github.com/retgits/checkiday/@v/v1.0.0 Should forever be the same… Modules are immutable
  • 48. @JFrog | jfrog.com | #GoCenter But are they really? ”Friends don’t let friends do git push -f” - Aaron Schlesinger
  • 49. @JFrog | jfrog.com | #GoCenter Using the GOPROXY variable export GOPROXY=https://myawesomeproxy.com go get github.com/retgits/checkiday
  • 50. @JFrog | jfrog.com | #GoCenter A Go module proxy is any web server that can respond to GET requests for URLs of a specified form. The requests have no query parameters, so even a site serving from a fixed file system (including a file:/// URL) can be a module proxy.
  • 51. @JFrog | jfrog.com | #GoCenter Keeping modules Highly available, CDN, no infra, free Public cache (public proxy) Immediate access, not shared, can be wiped… Local cache ($GOPATH/pkg/mod) Fast access, requires infra, shared across devs Organizational cache (private proxy)
  • 52. @JFrog | jfrog.com | #GoCenter And also faster builds…
  • 53. Let’s check public proxy performance
  • 54.
  • 55. @JFrog | jfrog.com | #GoCenter
  • 56. @JFrog | jfrog.com | #GoCenter What is a 5* module for you? How can we ensure module quality ?
  • 57. @JFrog | jfrog.com | #GoCenter •If you haven’t, start with Go modules: GO111MODULE=on if you must stay on $GOPATH •Start working outside of your $GOPATH •Use a public proxy server for immutable Go modules (like GoCenter.io) •Think about running your own proxy server or repository manager such as Artifactory or Athens Final thoughts
  • 58. @JFrog | jfrog.com | #GoCenter Go modules are in beta stage ? Modules are supported from Go version 1.11 but it will be finalized in Go version 1.13
  • 59. @JFrog | jfrog.com | #GoCenter
  • 60. @JFrog | jfrog.com | #GoCenter There’s one more thing… But before I go…
  • 61. @JFrog | jfrog.com | #GoCenter Promo - 100NIS_less
  • 62. @JFrog | jfrog.com | #GoCenter Thank you!
  • 63. @JFrog | jfrog.com | #GoCenter ▪ JFrog CLI // Configure Artifactory: jfrog rt c //Configure the project's repositories:: jfrog rt go-config //Build the project with go and resolve the project dependencies from Artifactory. jfrog rt go build --build-name=my-build --build-number=1 //Publish the package we build to Artifactory. jfrog rt gp go v1.0.0 --build-name=my-build --build-number=1 //Collect environment variables and add them to the build info. jfrog rt bce my-build 1 //Publish the build info to Artifactory. jfrog rt bp my-build 1 JFrog CLI - GO support