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实现的圣诞树,虽然略显粗糙。。

相关推荐
一 乐1 分钟前
在线考试|基于springboot + vue在线考试系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
沐知全栈开发3 分钟前
JavaScript 计时事件
开发语言
Yang-Never3 分钟前
Android 应用启动 -> Android 多种方式启动同一进程,Application.onCreate() 会多次执行吗?
android·java·开发语言·kotlin·android studio
期待のcode4 分钟前
Java 共享变量的内存可见性问题
java·开发语言
会游泳的石头5 分钟前
深入剖析 Java 长连接:SSE 与 WebSocket 的实战陷阱与优化策略
java·开发语言·websocket
yutian06065 分钟前
TI-C2000 系列 TMS320F2837X 控制律加速器(CLA)应用
开发语言·ti·ti c2000
夕阳之后的黑夜14 分钟前
Python脚本:为PDF批量添加水印
开发语言·python·pdf
女王大人万岁17 分钟前
Go标准库 path 详解
服务器·开发语言·后端·golang
qq_124987075326 分钟前
基于spring boot的调查问卷系统的设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
一路往蓝-Anbo29 分钟前
第 2 篇:单例模式 (Singleton) 与 懒汉式硬件初始化
开发语言·数据结构·stm32·单片机·嵌入式硬件·链表·单例模式