大家好,
最近利用所学尝试使用 golang 绘制爱心文本,[代码](https://github.com/ShixiangWang/GoArduino/blob/master/Go/practice/textHeart/main.go)如下:
```go
package main
import (
"flag"
"fmt"
"math"
"strings"
)
// Print text heart
// Author: ShixiangWang
// Reference: https://blog.csdn.net/su_bao/article/details/80355001
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)
fmt.Println(head)
fmt.Println()
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)
}
}
fmt.Println("\t\t\t\t", tail)
}
```
目前代码遇到几个问题,以自己刚学习的水平难以解决,所以想请教下大家:
1. 没法打印中文,结果显示是乱码,非常奇怪。Golang 目前的编码类型变换我不是特别懂,`chars` 还是个字符串数组,`char[index]` 变成了 byte,感觉很难操作。如果代码内包含中文又是可以正常打印的。
```shell
$ go run main.go -words "加油"
There are some words I wana tell you:
å æ²¹å æ² æ²¹å æ²¹å
æ²¹å æ²¹å æ²¹å æ æ²¹å æ²¹å æ²¹å æ²
¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å
²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ
²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å
¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²
²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å
å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å
æ²¹å æ²¹å æ²¹å æ²¹å æ²¹å æ
å æ²¹å æ²¹å æ²¹å æ²¹å
æ²¹å æ²¹å æ²¹å æ
æ²¹å æ²¹
²¹å
å
--- Your lover
```
2. 第 2 个问题感觉特别奇怪,特殊字符打印出来还是特殊字符~如果代码内部指定,又是可以正常显示的。。。。
```shell
$ go run main.go -tail '\t\tThis is the end' -sep ';'
There are some words I wana tell you:
love you f love you fo
r, I love you foreve r, I love you foreve
Dear, I love you forever!Dear, I love you forever!D
!Dear, I love you forever!Dear, I love you forever!De
r!Dear, I love you forever!Dear, I love you forever!Dea
er!Dear, I love you forever!Dear, I love you forever!Dear
er!Dear, I love you forever!Dear, I love you forever!Dear
er!Dear, I love you forever!Dear, I love you forever!Dear
er!Dear, I love you forever!Dear, I love you forever!Dear
r!Dear, I love you forever!Dear, I love you forever!Dea
r!Dear, I love you forever!Dear, I love you forever!Dea
!Dear, I love you forever!Dear, I love you forever!De
Dear, I love you forever!Dear, I love you forever!D
ar, I love you forever!Dear, I love you forever
r, I love you forever!Dear, I love you foreve
I love you forever!Dear, I love you fore
love you forever!Dear, I love you fo
ve you forever!Dear, I love you
you forever!Dear, I love
forever!Dear, I lo
ever!Dear,
r!Dea
D
\t\tThis is the end
```
预祝大家新年快乐!
有疑问加站长微信联系(非本文作者)