我正在尝试使用Go解析yaml文件.不幸的是我无法弄清楚如何.我有的yaml文件是这样的:
---
firewall_network_rules:
rule1:
src: blablabla-host
dst: blabla-hostname
...
Run Code Online (Sandbox Code Playgroud)
我有这个Go代码,但它不起作用:
package main
import (
"fmt"
"io/ioutil"
"path/filepath"
"gopkg.in/yaml.v2"
)
type Config struct {
Firewall_network_rules map[string][]string
}
func main() {
filename, _ := filepath.Abs("./fruits.yml")
yamlFile, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
var config Config
err = yaml.Unmarshal(yamlFile, &config)
if err != nil {
panic(err)
}
fmt.Printf("Value: %#v\n", config.Firewall_network_rules)
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到一个错误.我认为这是因为我没有为src和dst键/值创建结构.仅供参考:当我将其更改为列表时,它可以正常工作.
所以上面的代码解析了这个:
---
firewall_network_rules:
rule1:
- value1
- value2
...
Run Code Online (Sandbox Code Playgroud) 最近我发现了iTerm2的精彩功能:触发器.现在我希望iTerm突出显示一些文本,例如error,fatal等等.我希望这些触发器不区分大小写,但我很难设置这些触发器.根据该文件,的iTerm的正则表达式是符合ICU的正则表达式规则,状态,我可以使用的(?i)标志来匹配不区分大小写.
我尝试了很多,包括(?i)/error,(?i)error等等,但没有工作.请看下面的截图; 任何想法如何匹配不区分大小写?
我正在使用github.com/fatih/structs包将结构的所有字段的值转换[]interface{}为toValues()函数.看到这里.这很好,但最终我想通过使用csv包将值写入csv文件.该csv.Write()功能需要[]string输入.
简而言之:如何轻松地将输出转换toValues()为字符串数组?
我有一个通过REST为我提供属性的服务.现在我想将主体解组为属性结构.请看这个游乐场示例:点击.当我只有一个属性时,我可以很容易地将它解组为一个属性Property.但是来自服务器的ACTUAL响应有点不同.我想要解组的实际响应是这样的:
[
{
"key": "blabla",
"secret": false,
"type": "string",
"value": "hereisthevalue"
},
{
"key": "yepyepakey",
"secret": true,
"type": "string",
"value": "dummy"
}
]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道如何解组这个.有人可以指点我正确的方向吗?
我所有的路由都使用 Gorilla mux。现在我的应用程序工作正常,我想找到一种方法将我的所有响应代码记录到 - 例如 - statds。我找到了这个包:https ://godoc.org/github.com/gorilla/handlers#LoggingHandler
这允许我将所有响应输出为 apache 格式。虽然这很好,但这并不是 100% 我想要的。我只想将extract响应状态发送到 statds。现在实现这一目标的最佳/最简单方法是什么?
package main
import (
"log"
"net/http"
"os"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/rogierlommers/mux-status-handler/articles"
"github.com/rogierlommers/mux-status-handler/users"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/products", articles.Handler)
r.HandleFunc("/users", users.Handler)
loggedRouter := handlers.LoggingHandler(os.Stdout, r)
log.Println("listening on 8080")
http.ListenAndServe(":8080", loggedRouter)
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我这个:
所以我正在寻找类似的东西,但我不希望将 Apache 访问日志输出到 stdout,而是希望能够使用响应代码“做某事”。我还创建了一个简单的存储库,其中包含我的示例代码。你可以在这里找到它。
我正在使用goquery包从网页中提取信息片段。请在下面查看我的代码。运行该函数后的结果是:
Description field: text/html; charset=iso-8859-15
Description field: width=device-width
Description field: THIS IS THE TEXT I WANT TO EXTRACT
Run Code Online (Sandbox Code Playgroud)
我快到了,但是我只想获取 name == 'description' 的元字段。不幸的是,我不知道如何将这个额外的条件添加到我的代码中。
func ExampleScrapeDescription() {
htmlCode :=
`<!doctype html>
<html lang="NL">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
<meta name="viewport" content="width=device-width">
<meta name="description" content="THIS IS THE TEXT I WANT TO EXTRACT">
<title>page title</title>
</head>
<body class="fixedHeader">
page body
</body>
</html>`
doc, err := goquery.NewDocumentFromReader(strings.NewReader((htmlCode)))
if err != nil {
log.Fatal(err)
}
doc.Find("meta").Each(func(i int, s *goquery.Selection) {
description, _ := …Run Code Online (Sandbox Code Playgroud) 我正在Go中编写一个服务,我正在使用phantomJS从给定的URL生成图像.从我的Go程序,我正在使用Exec启动phantomJS二进制文件.这工作正常,但现在我正在寻找一种方法来传递完整的代码,以及运行二进制文件的调用.我的代码如下:
var args = require('system').args;
var webPage = require('webpage');
var page = webPage.create();
page.viewportSize = {
width: 1920,
height: 1080
};
page.open("http://www.url2fetch.com", function (status) {
var base64 = page.renderBase64('PNG');
console.log(base64);
phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)
这永远不会改变.除了获取的网址:).所以我的具体问题是:是否可以启动phantomJS并将上面的代码作为参数传递,以便可以通过一次调用执行.原因:我不想将phantomjs脚本与我的Go程序一起打包.
我正在使用Go包(Go绑定到ImageMagick的MagickWand C API)到ImageMagick,在这里我要从图像中删除边框(裁剪)。我使用修剪功能的方式可以在下面找到。
现在的问题是模糊因素。例如,如果我将该值设置为2000,则图像(这里是源)仍然具有一些白色图像,如下所示:
我创建了一个小的html来最好地说明问题。它包含两个图像:https : //dl.dropboxusercontent.com/u/15684927/image-trim-problem.html
如您所见,源在右下角有一些像素,这会引起问题。如果将系数设置为10000,恐怕会丢失其他图片上的像素。如果我将其设置为2000,则无法在此类图片中正确进行剪裁。
因此,我的实际问题是:“裁剪” /“修剪”图像的最佳方法是什么?
package main
import "gopkg.in/gographics/imagick.v1/imagick"
func main() {
imagick.Initialize()
defer imagick.Terminate()
inputFile := "tshirt-original.jpg"
outputFile := "trimmed.jpg"
mw := imagick.NewMagickWand()
// Schedule cleanup
defer mw.Destroy()
// read image
err := mw.ReadImage(inputFile)
if err != nil {
panic(err)
}
// first trim original image
// fuzz: by default target must match a particular pixel color exactly.
// However, in many cases two colors …Run Code Online (Sandbox Code Playgroud) 我在所有go应用程序中都使用logrus,最近我开始使用上下文记录器。现在,我想在应用程序的执行路径中“构建”上下文。请参阅下面的示例,它说明了我想要的。
package main
import (
"github.com/Sirupsen/logrus"
)
func main() {
logrus.Info("normal logger")
cl := logrus.WithFields(
logrus.Fields{
"extra_field_one": "extra_value_one",
})
// some code here
// here I want to add an additional field to to contextlogger cl.
// How do I do that?
}
Run Code Online (Sandbox Code Playgroud)
编辑
如ymonad所述,可以通过覆盖contextLogger来实现。还发现您可以添加一个附加字段:
cl = cl.WithField("key", "value")
Run Code Online (Sandbox Code Playgroud) 不知道正确的名称是什么,但我正在寻找有关Go中"链接函数调用"的更多信息.例如:
foo.DoSomething().WithThisOptionalThing()
所以我可以使用,foo.DoSomething()但有可能添加.WithThisOptionalThing()哪些额外的东西.这可能吗?请指出正确的方向/提供一些例子.
我在time.Now().UTC()方法的输出中看到一些不一致之处。有时我得到这个:
"created": "2018-10-18T08:50:33.636433623Z"
有时我得到这个:
"created": "2019-05-10T08:16:07.871395Z",
区别在于最后一部分的位数。为什么这不一致?有谁知道我可以调试/确保它确实是一致的?