• 用Go+绘制爱心给心爱的她表白


    💝实现的效果

    在这里插入图片描述

    ⚡️Go+语言介绍

    Go+在2020年7月刚问世时,其slogan是“为数据科学而生”。而在Go+1.0版迈出商业化第一步时,slogan变成三位一体的“for engineering, STEM education, and data science”。

    • “for engineering”致力于让工程师可以使用简洁、容易掌握的语言去工作,这在纷繁复杂的工程技术领域是非常重要的进化。

    • “for STEM education”希望青少年从小学就能学习一门工程语言,以便于在将来的工作中延续使用。目前,儿童接触的第一门编程语言通常是Scratch,很难终身受用。

    • “for data science”让工程师和数据科学家可以用相同的语言去对话,这在以数据驱动创新的未来尤为重要。

    🚀go+语言特点

    Go+ 非常有意思的一点,它是唯一一个选择了双引擎的语言,既支持静态编译,也支持可解析执行。

    为什么要做双引擎呢?因为我认为程序员和数据科学家的诉求是不一样的,数据科学家喜欢单步执行,大家可以在心中回想一下你见过的数学软件,包括 SAS、MATLAB,数学软件交互都是单步执行的方式。

    这并不是因为数据科学家懒。程序员理解程序逻辑是可以放在脑子里的,我们脑子里知道程序逻辑写得对不对。但数据科学家做计算的时候,不能知道计算结果对不对,因为人的计算能力比计算机弱太多了,所以一定要单步执行看到计算结果,才能知道自己下一步应该怎么办,这是数据科学家和程序员工作模式完全不同的一个点。

    因为他是在做计算而不是在做一种程序逻辑,所以他很难不去做单步执行。

    但当数据科学家建了一种模型,最终要使用了,这时他仍然希望最终交付的是最大化的执行效率,他一定不希望代码运行很慢,所以这个时候他就又需要静态编译执行,这也是为什么 Go+ 希望设计成双引擎,因为调试阶段和生产使用阶段,工作模式完全不一样。

    👏Go+环境搭建

    安装 Git 工具

    Git 官网地址:https://git-scm.com/download/win

    • 选择版本(我电脑是32位):

      在这里插入图片描述在这里插入图片描述

    • 选择路径:
      在这里插入图片描述

    • 安装后,在cmd控制台出入:git version,显示版本号表示安装成功。
      在这里插入图片描述

    安装 Go+

    官方 GitHub 地址:https://github.com/goplus/gop

    • 我们这边使用 Git工具下载安装Go+,在cmd控制台出入:

      git clone https://github.com/goplus/gop.git
      
      • 1
    • 安装中
      在这里插入图片描述

    • 配置环境变量(我的电脑 -> 属性 -> 高级环境变量 -> 环境变量 -> 新建系统变量)
      在这里插入图片描述 在path中添加%gop%\bin ,中间的gop就是我们前面用的变量名。在这里插入图片描述

    😉绘制爱心

    环境搭建好了,接下来创建一个.txt的文件,把代码复制进去后,修改后缀为.gop

    package main
    
    import (
        "flag"
        "fmt"
        "math"
        "strings"
        "time"
    )
    
    func main() {
        // MYWORD My word
        var head string
        var tail string
        var MYWORD string
        var sep string
        var zoom float64
        flag.StringVar(&head, "head", "There are some words I wana tell you:", "A sentence printed on the head") //添加开头要写的话
        flag.StringVar(&tail, "tail", "\t\t\t\t--- Your lover", "A sentence printed on the tail") //添加结尾要写的话
        flag.StringVar(&MYWORD, "words", "Dear, I love you forever!", "The words you want to talk") //爱心中的内容
        flag.StringVar(&sep, "sep", " ", "The separator")
        flag.Float64Var(&zoom, "zoom", 1.0, "Zoom setting")
        flag.Parse()
    
        chars := strings.Split(MYWORD, sep)
    
        time.Sleep(time.Duration(1) * time.Second)
        fmt.Println(head)
        fmt.Println()
        time.Sleep(time.Duration(1) * time.Second)
        for _, char := range chars {
            allChar := make([]string, 0)
    
            for y := 12 * zoom; y > -12*zoom; y-- {
                lst := make([]string, 0)
                lstCon := ""
                for x := -30 * zoom; x < 30*zoom; x++ {
                    x2 := float64(x)
                    y2 := float64(y)
                    formula := math.Pow(math.Pow(x2*0.04/zoom, 2)+math.Pow(y2*0.1/zoom, 2)-1, 3) - math.Pow(x2*0.04/zoom, 2)*math.Pow(y2*0.1/zoom, 3)
                    if formula <= 0 {
                        index := int(x) % len(char)
                        if index >= 0 {
                            lstCon += string(char[index])
                        } else {
                            lstCon += string(char[int(float64(len(char))-math.Abs(float64(index)))])
                        }
    
                    } else {
                        lstCon += " "
                    }
                }
                lst = append(lst, lstCon)
                allChar = append(allChar, lst...)
            }
    
            for _, text := range allChar {
                fmt.Printf("%s\n", text)
            }
        }
        time.Sleep(time.Duration(1) * time.Second)
        fmt.Println("\t\t\t\t", tail)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
  • 相关阅读:
    华为云云耀云服务器L实例评测 | 实例场景体验之搭建接口服务:通过华为云云耀云服务器构建 API 服务
    C语言 &=(按位与后赋值)^=(按位异或后赋值) |=(按位或后赋值)
    Linux 完整 Redis 安装配置教程(可用远程连接)
    《数字图像处理》作业一:题目+学习笔记
    Cobalt Strike(四)
    连续变量降维:主成分分析和因子分析
    Codeforces Round #836 (Div. 2) A-D
    关于Classification-SemiCLS代码中的问题记录
    eNSP笔记①
    使用coverlet统计单元测试的代码覆盖率
  • 原文地址:https://blog.csdn.net/yuan2019035055/article/details/122026114