我的Go+语言初体验--Go+语言之环境安装与程序初体验

问题描述:

一、Go+ 简介
- 对于 Go+ 工程而言:
- - Go+ 将支持所有 Go 功能(包括部分支持 cgo);
- - Go+ 提供了更简单优雅的语法,比 Go 更接近自然语言;
- - Go+ 易于学习,不必在一开始就处理工程的复杂性;
- - Go+ 能够赋权每一行代码,可以用更少的代码做更多的工作。
- 对于 Stem 教学,与 Scratch 相比:
- - Scratch 仅用于编程教学,它基于块状界面,自然直观,但与实际工程体验不一致;
- - 沿用 Code Monkey 的经验,Go+ 直接使用代码进行编程教学,引入了低学习难度(不高于基于块的编程)和平滑的学习曲线;
- - Go+ 创新地实现了工程与教学的融合,学习的语言也是工作的语言,通过创建更有成效的课程,学习者将获得更大的学习成就感。
- 对于 Data Science,Go+ 提供了更强大的数学表达式功能,例如有理数表达式,可简化数据科学用途的编程,并且 Go+ 支持字节码后端和 Go 代码生成。与 Python 相比,Go+ 提供:
- - 更好的性能;
- - 更像自然语言的语法;
- - 与 Python 生态系统的兼容性(未来);
- - 数据科学和工程的相同语言。

二、下载与安装
① 下载
- 默认情况下,Go 命令使用 Google 运行的 Go 模块镜像和 Go 校验和数据库下载和验证模块,可以直接在 [Go+ Downloads](https://golang.google.cn/dl/)下载 Go 并安装程序。
- 如下所示,指定下载,可以根据自己的硬件设备和环境进行相应选择的下载:


- go1.17.5 的版本选择:

 


- go1.16.12 版本选择下载:


② 安装
- Linux:
- - 将下载的存档解压缩到 /usr/local,在 /usr/local/go 中创建一个 Go 树;
- - 此步骤将在解压之前删除 /usr/local/go 中的先前安装(如果有), 继续之前最好备份所有数据。例如,以 root 身份或通过 sudo 运行以下命令:

```go
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.4.linux-amd64.tar.gz
```
- - 将 /usr/local/go/bin 添加到 PATH 环境变量中,可以通过将以下行添加到 $HOME/.profile 或 /etc/profile(对于系统范围的安装)来执行此操作(不过,需要注意:在下次登录计算机之前,对配置文件所做的更改可能不会生效,要立即应用更改,只需直接运行 shell 命令或使用诸如 source $HOME/.profile 之类的命令从配置文件中执行它们):

```go
export PATH=$PATH:/usr/local/go/bin
```
- - 通过以下命令提示符来验证是否已安装 Go,确认该命令打印已安装的 Go 版本:

```go
$ go version
```
- Mac:
- - 打开下载的包文件,按照提示安装Go,该软件包将 Go 发行版安装到 /usr/local/go,该包应该将 /usr/local/go/bin 目录放在 PATH 环境变量中,不过可能需要重新启动所有打开的终端会话才能使更改生效;
- - 通过打开以下命令提示符来验证您是否已安装 Go,确认该命令打印已安装的 Go 版本:

```go
$ go version
```
- Windows:
- - 打开下载的 MSI 文件并按照提示安装 Go,默认情况下,安装程序将安装 Go to Program Files 或 Program Files (x86)。;
- - 当然可以根据需要更改位置,安装后需要关闭并重新打开所有打开的命令提示符,以便安装程序对环境所做的更改反映在命令提示符中;
- - 验证是否已安装 Go:
- - - 在 Windows 中,单击“开始”菜单;
- - - 在菜单的搜索框中,键入 cmd,然后按 Enter 键;
- - - 在出现的命令提示符窗口中,键入以下命令:

```go
$ go version
```
- - 确认该命令打印已安装的 Go 版本。

③ Go+ 扩展插件

在 VSCode 安装 goplus 扩展插件:
启动 VSCode,点击左侧菜单栏中的 “扩展” 按钮,进入 VSCode 应用商店;
在 VSCode 应用商店搜索 “gopplus”(插件 ID:goplus.gop),找到 “goplus” 扩展插件;
点击 “goplus” 扩展插件右下方的“安装”按钮,安装 Go+ 扩展插件。
VSCode 成功安装 goplus 扩展插件后,如下图所示:
 

 

④ Go+ 学习环境
- Go+ 学习教程:[Go+ 教程](https://tutorial.goplus.org/);
- Go+ 在线练习:[Go+ 在线](https://play.goplus.org/)。

三、编码初体验
① 三种方式打印 "Hello world"
- 命令方式:

```go
println "Hello world"
```
- 函数方式:

```go
println("Hello world")
```
- 软件工程方式:

```go
package main

func main() {
    println("Hello world")
}
```

### ② 值类型
- Go+ 具有多种值类型,包括字符串、整数、浮点数、布尔值等。如下所示,字符串可以用 + 拼在一起,整数和浮点数,布尔运算符等:

```go
println "Go"+"Plus"
println "1+1 =", 1+1
println "7.0/3.0 =", 7.0/3.0
println true && false
println true || false
println !true
```
- 运行结果:

```go
GoPlus
1+1 = 2
7.0/3.0 = 2.3333333333333335
false
true
false
```

### ③ 有理数
- 将有理数作为原生 Go+ 类型引入,我们使用后缀 r 来表示有理数文字。 例如,(1r << 200) 表示一个大整数,其值等于 2200,而 4/5r 表示有理常数 4/5:

```go
import "math/big"

var a bigint = 1r << 65  // bigint, large than int64
var b bigrat = 4/5r      // bigrat
c := b - 1/3r + 3 * 1/2r // bigrat
println a, b, c

var x *big.Int = 1r << 65 // (1r << 65) is untyped bigint, and can be assigned to *big.Int
var y *big.Rat = 4/5r
println x, y
```
- 运行结果:

```go
36893488147419103232 4/5 59/30
36893488147419103232 4/5
```
### ④ 数组
- 数组的使用:

```go
a := [x*x for x <- [1, 3, 5, 7, 11]]
b := [x*x for x <- [1, 3, 5, 7, 11], x > 3]
c := [i+v for i, v <- [1, 3, 5, 7, 11], i%2 == 1]
d := [k+","+s for k, s <- {"Hello": "xsw", "Hi": "Go+"}]

arr := [1, 2, 3, 4, 5, 6]
e := [[a, b] for a <- arr, a < b for b <- arr, b > 2]

x := {x: i for i, x <- [1, 3, 5, 7, 11]}
y := {x: i for i, x <- [1, 3, 5, 7, 11], i%2 == 1}
z := {v: k for k, v <- {1: "Hello", 3: "Hi", 5: "xsw", 7: "Go+"}, k > 3}

println a, b, c, d, arr, e, x, y, z
```
### ⑤ 集合
- 集合数据筛选:

```go
type student struct {
    name  string
    score int
}

students := [student{"Ken", 90}, student{"Jason", 80}, student{"Lily", 85}]

unknownScore, ok := {x.score for x <- students, x.name == "Unknown"}
jasonScore := {x.score for x <- students, x.name == "Jason"}

println unknownScore, ok // output: 0 false
println jasonScore // output: 80
```
- 运行结果:

```swift
0 false
80
```
- 检查集合中是否存在数据:

```go
students := [student{"Ken", 90}, student{"Jason", 80}, student{"Lily", 85}]

hasJason := {for x <- students, x.name == "Jason"} // is any student named Jason?
hasFailed := {for x <- students, x.score < 60}     // is any student failed?

println hasJason, hasFailed
```
- 运行结果:

```go
true false
```
### ⑥ 范围(for)
- 范围表示:

```go
for i <- :10 {
    println i
}

for i := range :10:2 {
    println i
}

for i := range 1:10:3 {
    println i
}

for range :10 {
    println "Range expression"
}
```
- 运行结果:

```go
0
1
2
3
4
5
6
7
8
9
0
2
4
6
8
1
4
7
Range expression
Range expression
Range expression
Range expression
Range expression
Range expression
Range expression
Range expression
Range expression
Range expression
```

原文博客:https://blog.****.net/Forever_wj/article/details/121837519

投稿博客文章需要复制下博文内容哈