GO更新1.18版本并在Docker下运行实际案例

简介: GO更新1.18版本并在Docker下运行实际案例

零、摘要

  • MacOS更新GO版本1.18
  • Docker下运行GO
  • 解决Docker中拉取仓库需要输入密码
  • 解决包下载连接超时
  • 解决docker-compose下command配置多行

一、查看现有版本

go version
go version go1.14.1 darwin/amd64

最新版本1.18的新特性

有必要升级到最新版本吗?

经过小范围的调查,开发者和所在技术团队对于新版本持积极的学习态度,建议升级到最新版本。

二、升级版本

1.官网下载最新版本

找到你所在的系统,下载安装即可。

安装包下载资源我已单独上传,方便各位下载。

https://download.csdn.net/download/diandianxiyu/85109596

2. 修改环境变量

在安装完成之后,go所在的位置是/usr/local/go

(base) blog.csdn.net/diandianxiyu_geek@localhost ~ % cd /usr/local/go
(base) blog.csdn.net/diandianxiyu_geek@localhost go % ls
AUTHORS   PATENTS   api   lib   test
CONTRIBUTING.md README.md bin   misc
CONTRIBUTORS  SECURITY.md codereview.cfg  pkg
LICENSE   VERSION   doc   src
(base) blog.csdn.net/diandianxiyu_geek@localhost go % cat VERSION
go1.18%

添加下面到.profile

export PATH="/usr/local/go/bin:${PATH}"

3. 确认版本

(base) blog.csdn.net/diandianxiyu_geek@localhost ~ % go version  
go version go1.18 darwin/amd64

三、在Docker中使用

为了方便管理不同项目的开发环境,我们使用docker-composer管理每个项目的开发环境。

以之前我发的水印为例。

首先,通过官网找到官方源https://hub.docker.com/_/golang

解决Docker中拉取仓库需要输入密码

我们在执行运行Docker时会遇到这样的情况,需要我们跳转到认证授权页面验证身份,这对于在Docker中执行来说显然是不可能的。

app_1  | Cloning into 'goimgtype'...
app_1  | fatal: unable to update url base from redirection:
app_1  |   asked for: https://codechina.csdn.net/diandianxiyu/goimgtype/info/refs?service=git-upload-pack
app_1  |    redirect: https://passport.csdn.net/login?code=applets

在项目中,有个部署密钥的配置,可以配置给CI使用的密钥。

部署密钥允许只读或读写(如果启用)访问你的仓库。 部署密钥可以用于CI, 预发布或生产服务器。你可以创建一个部署密钥或添加一个现有密钥

(base) blog.csdn.net/diandianxiyu_geek@localhost ~ % ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/xiaoyu/.ssh/id_ed25519): 
/Users/xiaoyu/.ssh/id_ed25519 already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/xiaoyu/.ssh/id_ed25519
Your public key has been saved in /Users/xiaoyu/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:Cr7PrncZ6+GAl49NC5hDGBcGumT2Draue0BskQstYc0 xiaoyu@localhost
The key's randomart image is:
然后复制到剪贴板
pbcopy < ~/.ssh/id_ed25519.pub

再把生成的对应的私钥放在项目中。

解决包下载连接超时

修改配置的GOPROXY

go env -w GOPROXY=https://goproxy.cn,direct

docker-compose.yml

注意的是,需要根据自己的实际情况修改配置。

version: '3'
services:
  app:
    image: golang:1.18
    volumes:
      - $PWD:/go/src/watermark
    command:
      - sh
      - -c
      - |
          eval `ssh-agent -s`
          ssh-add /go/src/watermark/id_ed25519
          go env -w GOPROXY=https://goproxy.cn,direct
          cd /go/src/watermark
          go get -t -v github.com/golang/freetype
          go get -t -v gitcode.net/diandianxiyu/goimgtype
          go run /go/src/watermark/main.go

运行docker-compose up即可执行。

(base) blog.csdn.net/diandianxiyu_geek@localhost watermark % docker-compose up
Recreating watermark_app_1 ... done
Attaching to watermark_app_1
app_1  | Agent pid 9
app_1  | Identity added: /go/src/watermark/id_ed25519 (xiaoyu@localhost)
app_1  | go: downloading github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
app_1  | go: downloading golang.org/x/image v0.0.0-20220412021310-99f80d0ecbab
app_1  | go: downloading gitcode.net/diandianxiyu/goimgtype v1.0.0
app_1  | go: downloading github.com/shamsher31/goimgext v1.0.0
watermark_app_1 exited with code 0

四、总结

GO语言相关的生产环境相比其他语言更敢于使用新版本,并拥抱新变化,不像是万年的Java8。

相关文章
|
9月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
1481 162
|
9月前
|
存储 前端开发 JavaScript
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
本文介绍如何用Go语言从零实现一个轻量级在线聊天室,基于WebSocket实现实时通信,支持多人消息广播。涵盖前后端开发、技术选型与功能扩展,助你掌握Go高并发与实时通信核心技术。
971 158
|
10月前
|
数据采集 Go API
Go语言实战案例:使用context控制协程取消
本文详解 Go 语言中 `context` 包的使用,通过实际案例演示如何利用 `context` 控制协程的生命周期,实现任务取消、超时控制及优雅退出,提升并发程序的稳定性与资源管理能力。
552 152
|
8月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
417 4
|
10月前
|
安全 Go 开发者
Go语言实战案例:使用sync.Mutex实现资源加锁
在Go语言并发编程中,数据共享可能导致竞态条件,使用 `sync.Mutex` 可以有效避免这一问题。本文详细介绍了互斥锁的基本概念、加锁原理及实战应用,通过构建并发安全的计数器演示了加锁与未加锁的区别,并封装了一个线程安全的计数器结构。同时对比了Go中常见的同步机制,帮助开发者理解何时应使用 `Mutex` 及其注意事项。掌握 `Mutex` 是实现高效、安全并发编程的重要基础。
|
10月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
10月前
|
Go 开发者
Go语言实战案例:使用select监听多个channel
本文为《Go语言100个实战案例 · 网络与并发篇》第5篇,详解Go并发核心工具`select`的使用。通过实际案例讲解如何监听多个Channel、实现多任务处理、超时控制和非阻塞通信,帮助开发者掌握Go并发编程中的多路异步事件处理技巧。
|
10月前
|
数据采集 编解码 监控
Go语言实战案例:使用channel实现生产者消费者模型
本文是「Go语言100个实战案例 · 网络与并发篇」第4篇,通过实战案例详解使用 Channel 实现生产者-消费者模型,涵盖并发控制、任务调度及Go语言并发哲学,助你掌握优雅的并发编程技巧。
|
10月前
|
数据采集 消息中间件 编解码
Go语言实战案例:使用 Goroutine 并发打印
本文通过简单案例讲解 Go 语言核心并发模型 Goroutine,涵盖协程启动、输出控制、主程序退出机制,并结合 sync.WaitGroup 实现并发任务同步,帮助理解 Go 并发设计思想与实际应用。
|
10月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。

热门文章

最新文章