首页 > 系统相关 >我的Go+语言初体验——在Docker建立一个可以用Go+语言开发的容器环境(以Ubuntu容器为例)

我的Go+语言初体验——在Docker建立一个可以用Go+语言开发的容器环境(以Ubuntu容器为例)

时间:2023-01-17 18:33:42浏览次数:248  
标签:容器 初体验 http Get ubuntu Go com


前言

​​“我的Go+语言初体验” | 征文活动进行中......​​

作为一名嵌入式软件工程师的我,在工作中使用高级语言开发的场景不多,但技术的迭代大部分偏向于应用层开发,身为程序员的一员是由必要去了解崭新的技术,恰逢CSDN官方推出Go+语言征文,借此机会我也初步体验了一下这门新语言的魅力!

了解一门新技术,肯定最好的途径是到达它的官方主页啦!Go+官方主页:https://goplus.org

进入主页后,有一句高度概括Go+语言的描述:The Go+ language for engineering, STEM education, and data science,意为用于工程、STEM教育和数据科学的Go+语言

我的Go+语言初体验——在Docker建立一个可以用Go+语言开发的容器环境(以Ubuntu容器为例)_gop

STEM是什么?

STEM是科学(Science),技术(Technology),工程(Engineering),数学(Mathematics)四门学科英文首字母的缩写,其中科学在于认识世界、解释自然界的客观规律;技术和工程则是在尊重自然规律的基础上改造世界、实现与自然界的和谐共处、解决社会发展过程中遇到的难题;数学则作为技术与工程学科的基础工具。

Go+的发明人是哪位?

七牛云CEO许式伟

 Go+相比Go语言的优势

GO+语言作为基于Go研发的新语言,能够满足我国本土数据处理的需求,适应性更强。这是一项“从0到1”的重大突破,将进一步催动数据科学的腾飞发展。同时,七牛云的PaaS能力,今后将通过Go+提供。

极大降低门槛,让人人都能写代码,相对Go在语言特性最小化方面做得最好,GO+语言继承Go的开发理念,新增12个语法,简化了使用门槛。在语法、结构上,GO+更为精简,核心优势体现为低代码化、去复杂性、低龄化,真正做到了强化每行代码的能力,完成功能所需的代码量更少。


⭐️一、Ubuntu容器搭建⭐️

1.1 拉取最新Ubuntu镜像

docker image pull是抓取 image 文件的命令:

$ docker pull ubuntu:latest
latest: Pulling from library/ubuntu
d72e567cc804: Pull complete
0f3630e5ff08: Pull complete
b6a83d81d1f4: Pull complete
Digest: sha256:bc2f7250f69267c9c6b66d7b6a81a54d3878bb85f1ebb5f951c896d13e6ba537
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

1.2 生成Ubuntu容器并退出

docker container run命令会从 image 文件生成(新建)容器:

$ docker container run -p 8000:3000 -it ubuntu:latest /bin/bash 
root@bc7c3ac008b2:/# exit

上面命令的各个参数含义如下:

  • -p参数:容器的 3000 端口映射到本机的 8000 端口。
  • -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
  • ubuntu:latest:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
  • /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。

1.3 查看Ubuntu容器信息

docker ps -a命令会显示所有的容器(包括未运行的):

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc7c3ac008b2 ubuntu:latest "/bin/bash" 28 seconds ago Exited (0) 13 seconds ago 0.0.0.0:8000->3000/tcp zealous_einstein

1.4 更改Ubuntu容器为特定名字

$ docker rename bc7c3ac008b2 ubuntu-latest
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc7c3ac008b2 ubuntu:latest "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago 0.0.0.0:8000->3000/tcp ubuntu-latest

注意:名字可以随便命名。 

1.5 启动并进入Ubuntu容器

前面的docker container run命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用​docker container start​命令,它用来启动已经生成、已经停止运行的容器文件。

docker container exec命令用于进入一个正在运行的 docker 容器。如果​docker run​命令运行容器的时候,没有使用​-it​参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令。

$ docker container start ubuntu-latest
ubuntu-latest-buildroot
$ docker container exec -it ubuntu-latest /bin/bash

1.6 更新Apt源

root@bc7c3ac008b2:/# apt update     
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB]
Get:4 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [367 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB]
Get:6 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [75.9 kB]
Get:7 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [112 kB]
Get:8 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [1169 B]
Get:9 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB]
Get:10 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB]
Get:11 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB]
Get:12 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB]
Get:13 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [303 kB]
Get:14 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [21.6 kB]
Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [703 kB]
Get:16 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [88.7 kB]
Get:17 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4277 B]
Fetched 15.1 MB in 29s (527 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.

1.7 安装常用命令

$ apt install byobu vim-gtk inetutils-ping net-tools wget cpio unzip rsync xz-utils git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib python-pip ncurses-dev python-pyelftools

过程中需要配置地区,选择亚洲上海

Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities,
representing the time zones in which they are located.

1. Africa 3. Antarctica 5. Arctic 7. Atlantic 9. Indian 11. SystemV 13. Etc
2. America 4. Australia 6. Asia 8. Europe 10. Pacific 12. US
Geographic area: 6

Please select the city or region corresponding to your time zone.

1. Aden 13. Barnaul 25. Dushanbe 37. Jerusalem 49. Macau 61. Pyongyang 73. Taipei 85. Vientiane
2. Almaty 14. Beirut 26. Famagusta 38. Kabul 50. Magadan 62. Qatar 74. Tashkent 86. Vladivostok
3. Amman 15. Bishkek 27. Gaza 39. Kamchatka 51. Makassar 63. Qostanay 75. Tbilisi 87. Yakutsk
4. Anadyr 16. Brunei 28. Harbin 40. Karachi 52. Manila 64. Qyzylorda 76. Tehran 88. Yangon
5. Aqtau 17. Chita 29. Hebron 41. Kashgar 53. Muscat 65. Rangoon 77. Tel_Aviv 89. Yekaterinburg
6. Aqtobe 18. Choibalsan 30. Ho_Chi_Minh 42. Kathmandu 54. Nicosia 66. Riyadh 78. Thimphu 90. Yerevan
7. Ashgabat 19. Chongqing 31. Hong_Kong 43. Khandyga 55. Novokuznetsk 67. Sakhalin 79. Tokyo
8. Atyrau 20. Colombo 32. Hovd 44. Kolkata 56. Novosibirsk 68. Samarkand 80. Tomsk
9. Baghdad 21. Damascus 33. Irkutsk 45. Krasnoyarsk 57. Omsk 69. Seoul 81. Ujung_Pandang
10. Bahrain 22. Dhaka 34. Istanbul 46. Kuala_Lumpur 58. Oral 70. Shanghai 82. Ulaanbaatar
11. Baku 23. Dili 35. Jakarta 47. Kuching 59. Phnom_Penh 71. Singapore 83. Urumqi
12. Bangkok 24. Dubai 36. Jayapura 48. Kuwait 60. Pontianak 72. Srednekolymsk 84. Ust-Nera
Time zone: 70


Current default time zone: 'Asia/Shanghai'
Local time is now: Tue Nov 30 18:05:30 CST 2021.
Universal Time is now: Tue Nov 30 10:05:30 UTC 2021.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

1.8 安装sudo命令并添加普通用户

$ apt install sudo
$ adduser neutionwei

1.9 把普通用户添加到sudo

$ visudo

 添加如下内容:

neutionwei  ALL=(ALL:ALL) ALL

1.10 切换到普通用户

$ su neutionwei

⭐️二、Go语言搭建⭐️

2.1 下载Go安装包

建议去Go官网下载:Downloads - go.dev

我的Go+语言初体验——在Docker建立一个可以用Go+语言开发的容器环境(以Ubuntu容器为例)_go语言_02

2.2 Ubuntu容器新建一个go目录

$ mkdir go

2.3 把Go安装包拷贝到Ubuntu容器

$ docker cp ~/Download/go1.17.5.linux-amd64.tar.gz bc7c3ac008b2:/home/neutionwei/go

2.4 安装Go

解压安装包:

$ sudo tar -C /usr/local -zxvf go1.17.5.linux-amd64.tar.gz

设置环境变量:

$ export PATH=$PATH:/usr/local/go/bin

查看版本:

$ go version
go version go1.17.5 linux/amd64

写个hello.go: 

$ vim hello.go
$ cat hello.go
package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}

运行hello.go: 

$ go run hello.go
Hello, World!

⭐️三、Go+语言搭建⭐️

3.1 克隆Go+源代码

$ git clone https://github.com/goplus/gop.git

3.2 进入gop目录,执行安装脚本

$ cd gop
$ ./all.bash

当提示​Go+ tools installed successfully!​时,说明Go+安装完成。 

3.3 验证Go+环境是否安装成功

$ cd bin
$ ./gop version
gop v1.0.32-61-g15116b6 linux/amd64

3.4 设置环境变量

$ pwd
/home/neutionwei/go/gop/bin
$ export PATH=$PATH:/home/neutionwei/go/gop/bin

3.5 安装构建包

$ go get github.com/goplus/gop/builtin

3.6 写个hello.gop

$ vim hello.gop
$ cat hello.gop
println "Hello, World!"

输入运行命令:

$ gop mod init gop
$ gop run main.gop
Hello, World!

后语

本文是在Linux系统环境下通过Docker构建一个基于Go+环境搭建和实现程序代码运行的容器,相对来说操作过程并不复杂,由于Docker的安装不是此文的重点,故没有讲述,有兴趣的读者可以自行寻找相关资料。

如果文章对你有帮助的话,欢迎点赞

标签:容器,初体验,http,Get,ubuntu,Go,com
From: https://blog.51cto.com/u_13726704/6017607

相关文章

  • 阿里云云边一体容器架构创新论文被云计算顶会 ACM SoCC 录用
    近日,由阿里云撰写的关于KOLE创新论文被ACMSoCC国际会议长文录用。ACMSymposiumonCloudComputing(以下简称SoCC)是由美国计算机协会主办、聚焦云计算技术的一项学......
  • go 使用redis
       import(redigo"github.com/gomodule/redigo/redis")  funcNewPool()*redigo.Pool{//return&redigo.Pool{//MaxIdle:3,......
  • golang无缓冲channel避坑点
    输出结果顺序:默认情况下,channel接收和发送数据都是阻塞的,除非另一端已经准备好。......
  • django4.1版本小demo
    1.安装anoconda,创建虚拟python3.9环境2.安装django,pipinstalldjango-i清华源安装较快3.新建一个django项目django-adminstartprojectdemo14.创建单个或者多......
  • golang: os.Write函数
    函数解析os.Write函数func(f*File)Write(b[]byte)(nint,errerror){//判断是否f为nil iferr:=f.checkValid("write");err!=nil{ return0,e......
  • GO语言基础语法
    切片与数组typePstruct{ namestring passwordint}funcmain(){ //p:=[3]P{ // {"wqdi",123}, // {"zhang",123123}, // {"qina",123123123}, //......
  • 基于Django的全栈个人博客
    基础但完整的三个DjangoFullstackBlog项目这三个用的都是基础的Django全栈,没有做前后端分离。前两个有完整教程,第三个教程无,但有redis缓存,后续可以三个对照着相互补充。......
  • Django Session 原理及配置和使用
    1、Django如何使用session会话1.1)session会话是通过中间件实现的,所以首先需要配置MIDDLEWAREMIDDLEWARE=[......'django.contrib.sessions.middleware.SessionM......
  • 小程序容器技术,企业降本增效制胜法宝
    疫情之下,互联网行业感受到了巨大的压力,不少企业从各个维度上都加大了降本增效的力度。而对于APP开发来说,在疫情之前,APP开发市场本身就在蓬勃的扩增之中,而如今唯有做到降低研......
  • 关于如何在CentOS7中如何利用Docker中的Nginx容器反向代理MantisBT容器并连接宿主机数
    是的标题确实很长,意思就是,我现在Docker里面有MantisBT和Nginx,系统里安装了MySQL,要如何把他们连在一起?注意因为MantisBT与MySQL高版本会有字符集不兼容的问题,所以我采用了......