冉冉说
简单的解决方案该包golang.org/x/image/colornames还包含一个导出的Map变量,该变量从小写颜色名称映射到color.RGBA.因此,只需使用此映射来查找名称的颜色,并将 RGB 分量转换为十六进制表示:func convertWebToHex(webcolorname string) (hexcolor string) { c, ok := colornames.Map[webcolorname] if !ok { // Unknown name return "" } return fmt.Sprintf("#%02X%02X%02X", c.R, c.G, c.B)}测试它:names := []string{ "red", "yellow", "lightyellow", "invalid",}for _, name := range names { fmt.Printf("%-12s: %s\n", name, convertWebToHex(name))}哪些输出(在Go Playground上尝试):red : #FF0000yellow : #FFFF00lightyellow : #FFFFE0invalid : 不区分大小写的解决方案如果您想以不区分大小写的方式查找颜色,请使用strings.ToLower()将名称转换为小写,然后继续查找:func convertWebToHex(webcolorname string) (hexcolor string) { c, ok := colornames.Map[strings.ToLower(webcolorname)] if !ok { // Unknown name return "" } return fmt.Sprintf("#%02X%02X%02X", c.R, c.G, c.B)}测试它:names := []string{ "Red", "yELLOW", "LightYellow", "invalid",}for _, name := range names { fmt.Printf("%-12s: %s\n", name, convertWebToHex(name))}哪些输出(在Go Playground上尝试):Red : #FF0000yELLOW : #FFFF00LightYellow : #FFFFE0invalid : 预先计算的十六进制值另请注意,如果您必须经常进行这些查找,创建自己的地图可能会有利可图,您可以将颜色名称映射到生成的十六进制字符串,因此您不必一直转换color.RGBA为十六进制字符串。这是这个预先计算的地图解决方案的样子:var colorMap = map[string]string{}func init() { for name, c := range colornames.Map { colorMap[name] = fmt.Sprintf("#%02X%02X%02X", c.R, c.G, c.B) }}func convertWebToHex(webcolorname string) (hexcolor string) { // invalid color results in the zero value "" return colorMap[strings.ToLower(webcolorname)]}测试和输出是一样的。在Go Playground上试试这个。