我的Go+语言初体验—— Go+上手及实现列表相似度计算

浪里行舟 社区初级贡献者
博客专家认证
2021-12-07 14:31:50

“我的Go+语言初体验” | 征文活动进行中......https://bbs.csdn.net/topics/603464006?utm_source=1594742339

一、Go+简介

一句话介绍Go+: Go+专门用于数据科学的开发,以弥补Python的不足。
现在数据科学领域最为火爆的语言,莫非Python不可。但是Python使用方便灵活的同时也存在两点的主要弊端:

  • 难以保证代码质量。Python 太灵活,一个程序有多重写法,很难形成统一规范的代码风格,无法保证大型工程的代码质量。

  • 难以优化计算效率。Python 的语法丰富、灵活性强,所以解释器写起来很复杂,要优化性能也很难。

回到Go+, 基于Go语言研发的,有统一规范的代码风格,可以保证代码质量。再者,Go 语言语法简洁(容易上手f),表达能力远胜于 C 但是 keyword 总数少于 C,这种简洁使得 Go 程序的性能优化比较容易。最后,Go积累了不少科学计算的基础技术,比如实现张量的 Go 数据类型的封装。Go+ 可以复用 Go 生态,方便高效地支持数据科学方面的开发。

二、Go+的简易安装使用方法

下载安装Go+ 只要简单三步:

# 1、 在终端clone仓库
git clone https://github.com/goplus/gop.git
# 2、切换到该文件夹
cd gop
# 3、运行
# On mac/linux run:
./all.bash
# On Windows run:
all.bat

除了本地安装GO+,这里还有线上运行的环境:
https://play.goplus.org/

三、Go+ 语法

官方语法教程:https://tutorial.goplus.org/

对于语法,我们可以简单了解常用的数据结构以及相应的顺序、选择、循环等程序结构体,通常就很够用了。
开始之前我们先做足程序员的仪式感:"Hello world"

println "Hello world"

数据结构--常量

常量(不可变类型)主要有 字符型以及数值型数值。

字符就是以引号开头结尾:如 "Hello world"
数值类型有整型:1、2、4。还有浮点型:100.1等等

数据结构--可变类型

常用的可变类型主要有列表 、字典。
如下字典的定义:

dic :=  {1: "Hello", 3: "Hi", 5: "xsw", 7: "Go+"}

如下列表的定义:

arr := [1, 3, 5, 7, 11, 13, 17, 19]
println arr

展示下列表的语法糖,列表推导式非常的有用,如下可以简单输出列表的平方数

a := [x*x  for x <- [1, 3, 5, 7, 11]]

运算符

字符串拼接可以直接通过 + 运算;

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

变量赋值

通过下式声明变量sum 并赋值

sum := 0

常用库及函数的调用

通过导入 "bufio" "fmt" "os" "strings" 实现字符串的输入及输出

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

scanner := bufio.NewScanner(os.Stdin)
fmt.Println("请输入字符串")


 for scanner.Scan() {
     fmt.Println("输出:",scanner.Text())

}

条件选择结构

用if-else 构成条件选择结构,足以表达大部分的代码逻辑。

sum := 0  

if sum > 0 {
  print(">0")
} else {
  print("<=0")
}

循环结构

可以通过for循环,单层循环简单实现2的倍数:


for i := range 1:10 {
    println(2*i)
}

通过累加结束for循环

i := 0

for i<5{
    println(2)
i+=1

}

通过if 条件满足后,break结束for循环

i := 0

for 1 > 0 {
    println(i)
    i += 1
    if i == 5 {
        break
    }

}

四、Go+实现列表相似度算法

通过欧拉距离衡量两个列表的相似度

distance := 0
arr1 := [1, 3, 5, 7, 1]
println arr1

arr2 := [1, 3, 6, 6, 1]
println arr2

for i <- :5 {
    distance += (arr2[i]-arr1[i]) * (arr2[i]-arr1[i]) 
}



println "列表相似度距离:",distance 

五、 Go+ 佛祖镇楼

佛祖保佑,写代码无BUG


    println("                            _ooOoo_                     ")
    println("                           o8888888o                    ")
    println("                           88  .  88                    ")
    println("                           (| -_- |)                    ")
    println("                            O\\ = /O                    ")
    println("                        ____/`---'\\____                ")
    println("                      .   ' \\| |// `.                  ")
    println("                       / \\||| : |||// \\               ")
    println("                     / _||||| -:- |||||- \\             ")
    println("                       | | \\\\\\ - /// | |             ")
    println("                     | \\_| ''\\---/'' | |              ")
    println("                      \\ .-\\__ `-` ___/-. /            ")
    println("                   ___`. .' /--.--\\ `. . __            ")
    println("               | | : `- \\`.;`\\ _ /`;.`/ - ` : | |     ")
    println("                 \\ \\ `-. \\_ __\\ /__ _/ .-` / /      ")
    println("         ======`-.____`-.___\\_____/___.-`____.-'====== ")
    println("                            `=---='  ")
    println("                                                        ")
    println("         .............................................  ")
    println("                  佛祖镇楼             BUG辟邪          ")
    println("                  Zen :                                 ")
    println("                  Beautiful is better than ugly.;      ")
    println("                  Explicit is better than implicit.     ")
    println("                  Simple is better than complex.        ")
    println("                  Complex is better than complicated.   ")
    println("                  Flat is better than nested.           ")
    println("                  Sparse is better than dense.          ")
    println("                  Readability counts.                   ")
    println("                  Now is better than never.             ")

...全文
275 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
Go+ 开发者社区

903

社区成员

Go+ 官方开发者社区。我们希望向广大的开发者和数据科学家介绍 Go+ 的定位和意义,并邀请更多开发者一起贡献代码、共建 Go+ 生态。 Go+ 官网:https://goplus.org/
其他 企业社区
社区管理员
  • Go+
  • 杨东杰
加入社区
帖子事件
创建了帖子
2021-12-07 14:31
社区公告

本社区为 Go+ 官方开发者社区。我们希望向广大的开发者和数据科学家介绍 Go+ 的定位和意义,并邀请更多开发者一起贡献代码、共建 Go+ 生态。

Go+ 官网:https://goplus.org/
GitHub地址:https://github.com/goplus/gop