go语言实现的圣诞树的几个姿势

前言

如何用go语言画一个圣诞树,To me,当然是从安装go的SDK开始...

go官网下载对应的jdk。

我的操作系统是Mac,这里我先则macOS的归档版下载。下载完之后解压,然后就是集成到我的IDEA中去,

IDEA配置go

先安装go插件。

然后在Languages & Frameworks 中配置GORoot和GOPath。GORoot 选择解压后的目录,GOPath我设置为/user/local/go。

在设置goRoot时,提示"is not a vaild home for Go SDK"。

查了一下,应该是go的版本过高,1.17版本应该就没问题。我这里用的1.21,所以在go/src/runtime/internal/sys/zversion.go中添加一行代码。

go 复制代码
const TheVersion = `go1.21.5`

记得替换为自己的版本号,而且是反引号。设置完成之后,就可以创建go项目了。

速学go

之前没学过go,但是语言之间都有互通性,所以在官网找到了go的语法教程。

起手式:Hello World!

学会了main、输出、引用,再看看if、while、for之后,以后简历直接精通go开发!然后这里就

简单实现

这里就是最简单的实现方法,使用for来循环打印星号来实现的。

go 复制代码
package main
import "fmt"
func main() {
	height := 10
	for i := 0; i < height; i++ {
		for j := 0; j < height-i; j++ {
			fmt.Print(" ")
		}
		for k := 0; k < 2*i+1; k++ {
			fmt.Print("*")
		}
		fmt.Println()
	}
	for i := 0; i < 2; i++ {
		for j := 0; j < height-1; j++ {
			fmt.Print(" ")
		}
		fmt.Println("***")
	}
}

运行结果:

不过,这的确是有点单调,有没有一些图形化的输出,可以有意思一点,然后找到了一个,使用emoji库来生成一个圣诞树。

emoji库

首先安装emoji:

shell 复制代码
go get github.com/kyokomi/emoji/v2

然后就是开发代码,也是运用循环来输出对应的emoji。

go 复制代码
package main

import (
	"fmt"
	"github.com/kyokomi/emoji/v2"
	"math/rand"
)

func getEmoji() {
	num := rand.Int()
	switch num % 8 {
	case 1:
		emoji.Printf(":apple:")
	case 2:
		emoji.Printf(":candy:")
	default:
		emoji.Printf(":leaves:")
	}
}

func main() {
	fmt.Println()
	level := 10

	for i := 0; i <= level; i++ {
		for j := 0; j <= level-i; j++ {
			fmt.Print(" ")
		}
		for k := 0; k <= i; k++ {
			if i == 0 && k == 0 {
				emoji.Printf(":star:")
			} else {
				getEmoji()
			}
		}
		if i == 0 {
			emoji.Printf("     :snowflake:")
		} else if i == 2 {
			emoji.Printf("        :snowflake:")
		}
		fmt.Println()
	}
	for i := 0; i <= 3; i++ {
		emoji.Print("          :gift:")
		emoji.Print(":gift:")
		emoji.Println(":gift:")
	}
}

首先圣诞树树体部分主要选择了三个emoji,分别是apple、candy、leaves。i为0,即第一行会输出一个星星,其他的部分会进行判断然后使用随机数取余的方法,来挑选对应的emoji。

树干部分就是使用gif的emoji来组成。使用空格来调整第一个emoji的位置,让树干在树体的中央部分。

最后就是在第一行、第三行加了两个雪花的输出。运行程序,查看结果。

结语

这用我临时抱佛脚学的go实现的圣诞树,虽然略显粗糙。。

相关推荐
名字还没想好☜20 分钟前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
web守墓人29 分钟前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang
明月_清风1 小时前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端
2601_966949651 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571762 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
GetcharZp2 小时前
5 分钟拥有自己的 S3:RustFS 上手(MinIO 的 Rust 替代,Apache 2.0 可商用)
后端
行百里er3 小时前
Redis 版本演进、新特性与协议那些事儿
redis·后端
Joy T3 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
RAN11426760083 小时前
1.3第一个程序的介绍
开发语言·qt