我的go+语言初体验——在docker建立一个可以用go+语言开发的容器环境(以ubuntu容器为例)(代码片段)

Neutionwei Neutionwei     2023-03-01     601

关键词:

前言

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

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

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

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

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

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的安装不是此文的重点,故没有讲述,有兴趣的读者可以自行寻找相关资料。

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

我的go+语言初体验——goplus基础语法学习(代码片段)

GoPlus的安装见博文Go&Golus的安装兼容Go的特性(包括部分支持cgo)在GoPlus中用到的Go基础,具体应用到的基础如下数据定义布尔型布尔型的值只可以是常量true或者false。一个简单的例子:varbbool=true。数字类型... 查看详情

我的go+语言初体验——ide详细安装教程(代码片段)

我的Go+语言初体验——(2)IDE详细安装教程“我的Go+语言初体验”|征文活动进行中…Go+语言的安装和环境配置有些复杂,官方教程也没有写的很详细。通过控制台编写和运行Go+程序很不方便。本文从零开... 查看详情

我的go+语言初体验——用go+写个爬虫并进行数据处理(代码片段)

“我的Go+语言初体验”|征文活动进行中…文章目录写在前面项目初始化1.找到blink2.分析页面3.编写代码3.1发送请求3.2解析数据3.3数据处理与分析3.4输出所有的评论总结写在前面是这样的!我个人是Go语言爱好者,接触... 查看详情

我的go+语言初体验——go+基本语法之switch(代码片段)

我的Go+语言初体验——(5)Go+基本语法之Switch“我的Go+语言初体验”|征文活动进行中…Go+语言中提供多路分支条件语句switch,用于在不同条件下执行不同动作。使用if-else嵌套结构也可以实现多路分支条... 查看详情

我的go+语言初体验——语法验证/性能测试篇(直男程序员的真实体验)(代码片段)

...比)Go+完整测试代码Go语言完整代码总结前言跟着我的上一个文章:我的Go+语言初体验——环境搭建篇(直男程序员的真实体验)_阿良的博客-CSDN博客我对Go+语言的部分感兴趣的内容进行了代码实现以及... 查看详情

我的go+语言初体验——go+语言数据类型(代码片段)

我的Go+语言初体验——(3)Go+语言数据类型“我的Go+语言初体验”|征文活动进行中…Go+语言刚刚发布,网络上还很难找到各种的支持文档和编程指南,使初学者很难深入地进行学习。本文结合官方文... 查看详情

我的go+语言初体验——go语言总结篇(语法+实际问题解决方案)(代码片段)

Go语言简介:作为一个C语言之父发明的Go语言,它在未来各个领域运用广,其语法特征与C语言相近,更加灵活。GolandGoland是Jetbrains家族的系列商业版本ide下载地址:GolandLiteIDE开源go语言IDE源码地址:Github下... 查看详情

我的go+语言初体验——go+分数型有理数数据类型(代码片段)

我的Go+语言初体验——(7)Go+分数型有理数数据类型“我的Go+语言初体验”|征文活动进行中…更多内容,请参阅:我的Go+语言初体验——(7)Go+分数型有理数数据类型Go+语言使用后缀‘... 查看详情

我的go+语言初体验——goplus基础语法学习(代码片段)

GoPlus的安装见博文Go&Golus的安装兼容Go的特性(包括部分支持cgo)在GoPlus中用到的Go基础,具体应用到的基础如下数据定义布尔型布尔型的值只可以是常量true或者false。一个简单的例子:varbbool=true。数字类型... 查看详情

我的go+语言初体验——goplus基础语法学习(代码片段)

GoPlus的安装见博文Go&Golus的安装兼容Go的特性(包括部分支持cgo)在GoPlus中用到的Go基础,具体应用到的基础如下数据定义布尔型布尔型的值只可以是常量true或者false。一个简单的例子:varbbool=true。数字类型... 查看详情

我的go+语言初体验——超详细安装教程(代码片段)

我的Go+语言初体验——(1)超详细安装教程“我的Go+语言初体验”|征文活动进行中…Go+是什么?为数据而生,实现教学、工程与数据的“三位一体”。Go+语言的安装和环境配置有些复杂,官方教... 查看详情

我的go+语言初体验——go+语言构建神经网络实战手写数字识别(代码片段)

“我的Go+语言初体验”|征文活动进行中…我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别0.前言1.神经网络相关概念2.构建神经网络实战手写数字识别2.1构建神经网络2.1.1节点计算2.1.2激活函数2.1.3网络架构2.... 查看详情

我的go+语言初体验——整型有理数数据类型(代码片段)

我的Go+语言初体验——(6)整型有理数数据类型“我的Go+语言初体验”|征文活动进行中…Go+语言使用后缀‘r’表示有理数,支持整型、分数型、浮点型三种有理数数据类型(Rationalnumber)。在整型有... 查看详情

我的go+语言初体验——零基础学习go+爬虫(代码片段)

我的Go+语言初体验——(4)零基础学习Go+爬虫“我的Go+语言初体验”|征文活动进行中…Go+语言非常适合编写爬虫程序,具有并发机制完善、并发数量大、占用资源少、运行速度快、部署方便的优点。本文... 查看详情

我的go+语言初体验——go+的下载与安装(代码片段)

我的Go+语言初体验”|征文活动进行中…📢博客主页:https://blog.csdn.net/weixin_43896643📢欢迎点赞👍收藏⭐留言📝欢迎讨论!📢本文由XiaoLin_Java原创,首发于CSDN🙉📢不要等待机会,而... 查看详情

我的go+语言初体验——环境搭建并用命令行和vscode输出“helloworld”(代码片段)

...道地址:https://bbs.csdn.net/topics/603677526活动地址:我的Go+语言初体验”|征文活动进行中…Go+是什么?为数据而生,实现教学、工程与数据的“三位一体”。用于数据科学的Go+语言forengineering,forSTEMeducat... 查看详情

我的go+语言初体验——(速爽到极致的go+体验感)thego+playground(代码片段)

欢迎大家参与【我的Go+语言初体验】活动:活动地址:【https://bbs.csdn.net/topics/603464006?utm_source=1594742339】本文为大家带来最直接的【Go+】语言测试体验,欢迎点赞、评论、收藏。前言:Go优势:Go+对于科... 查看详情

go语言初体验

...阻塞式的方式工作,资源利用率低,单机qps有限。因为go语言原生支持协程,能够同时满足开发效率和程序性能,于是决定引入go语言进行改造。主要是分享以下三点心得:C/C++库的封装map内部成员赋值,以及protobuf协议的支持网... 查看详情