我正在尝试使用Go解析yaml文件.不幸的是我无法弄清楚如何.我有的yaml文件是这样的:
---
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
...
我有这个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)
}
当我运行它时,我收到一个错误.我认为这是因为我没有为src和dst键/值创建结构.仅供参考:当我将其更改为列表时,它可以正常工作.
所以上面的代码解析了这个:
---
firewall_network_rules:
  rule1:
    - value1
    - value2
...
最近我发现了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"
    }
]
不幸的是,我不知道如何解组这个.有人可以指点我正确的方向吗?
我所有的路由都使用 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)
}
上面的代码给了我这个:
所以我正在寻找类似的东西,但我不希望将 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
我快到了,但是我只想获取 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, _ := …我正在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();
});
这永远不会改变.除了获取的网址:).所以我的具体问题是:是否可以启动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 …我在所有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?
}
编辑
如ymonad所述,可以通过覆盖contextLogger来实现。还发现您可以添加一个附加字段:
cl = cl.WithField("key", "value")
不知道正确的名称是什么,但我正在寻找有关Go中"链接函数调用"的更多信息.例如:
foo.DoSomething().WithThisOptionalThing()
所以我可以使用,foo.DoSomething()但有可能添加.WithThisOptionalThing()哪些额外的东西.这可能吗?请指出正确的方向/提供一些例子.
我在time.Now().UTC()方法的输出中看到一些不一致之处。有时我得到这个:
"created": "2018-10-18T08:50:33.636433623Z"
有时我得到这个:
"created": "2019-05-10T08:16:07.871395Z",
区别在于最后一部分的位数。为什么这不一致?有谁知道我可以调试/确保它确实是一致的?