小编Bra*_*ody的帖子

如何使用Go漂亮打印JSON?

有没有人知道在Go中漂亮打印JSON输出的简单方法?

股票http://golang.org/pkg/encoding/json/包似乎没有包含这方面的功能(编辑:它确实,看到接受的答案)和一个快速谷歌没有出现任何明显的东西.

我正在寻找的用途是非常印刷结果,json.Marshal只是从任何地方格式化一个充满JSON的字符串,因此为了调试目的更容易阅读.

json pretty-print go

161
推荐指数
9
解决办法
11万
查看次数

嵌套的struct初始化文字

我怎样才能做到这一点:

type A struct {
    MemberA string
}

type B struct {
    A
    MemberB string
}
Run Code Online (Sandbox Code Playgroud)

...

b := B {
    MemberA: "test1",
    MemberB: "test2",
}
fmt.Printf("%+v\n", b)
Run Code Online (Sandbox Code Playgroud)

编译给我:"结构文字中的未知B字段'MemberA'"

当我提供像这样的文字结构成员值时,如何初始化MemberA(来自"父"结构)?

struct nested literals go

36
推荐指数
1
解决办法
1万
查看次数

加载bpg图像:兼容,简单,高效的技术

最近有一些关于Fabrice Bellard的BPG图像格式(http://bellard.org/bpg/)的喧哗,它(基于他网站上提供的演示)提供比jpeg,webp和其他一些更好的压缩.图像解码在浏览器中使用JS完成,这意味着它可以立即使用,无需等待浏览器采用.总的来说,这似乎是一个好主意,并且为了更快的下载而交换一些CPU时间通常是可行的权衡.

而该技术在这里使用的换出的图像是,在window.load,遍历document.images,找到任何地方src属性包含".bpg"和替换用帆布结束的URL.

然而,这绝对不是解决问题的唯一方法,我看到这种技术的一些缺点,包括:a)画布与图像没有完全相同的布局规则 - 例如,设置宽度属性就意味着不同的东西在img vs a canvas上,b)似乎至少在Chrome中,对于缩小与画布相比的图像,缩放是如何进行的.

理想情况下,更好的解决方案可满足这些要求

  • 尝试不再需要在内存中复制图像数据(并且也不会不必要地使用比必要的CPU更多的CPU - 与本机图像处理相比,JS中的解码已经需要很多)
  • 拥有尽可能多的浏览器兼容性
  • 使用<img>标签而不是<canvas>(不是要求,但似乎更好)
  • 提供一种简单的方法,不仅可以处理文档加载上的图像,还可以处理稍后添加到文档中的图像(例如,响应用户活动)
  • 仍然易于使用(bellard.org上的现有技术肯定易于集成)
  • 编辑:使用网络工作者解码图像而不阻止页面也是一个很好的方法.

想到的一些相关工具包括data:和blob:urls.

任何人都有使用这种"更好"技术加载BPG的工作代码示例?(Fabrice在他的例子中使用它的方式也不错,当然方法有权衡,但我认为可能有一些更好的广泛使用.)

javascript image image-processing bpg

18
推荐指数
1
解决办法
1534
查看次数

什么是Java synchronized()块的golang等价物?

Java为同步代码的关键部分提供了一个非常方便的习惯用法:

synchronized(someObject) {
    // do something really important all by myself with nobody bothering me
}
Run Code Online (Sandbox Code Playgroud)

要么

public synchronized void doSomething() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

什么是等效的?

(快速搜索显示:golang.org/pkg/sync/ - 看起来(可能是我错了)对于一般用途来说有点太低了.)

(我关心的原因示例:我需要通过通道向多个侦听器发送消息.通道为数据提供了良好的管道而无需同步任何内容,但是当添加或删除通道时,我需要修改通道列表,可能在任何时候发生必须能够处理并发.)

synchronization go

14
推荐指数
3
解决办法
4929
查看次数

是否有Twitter Bootstrap类意味着"最初隐藏"?

使用Bootstrap 3,我想在稍后显示的页面上有一个元素,以响应用户单击按钮.例:

<div id="search_results">
... gets populated from ajax data later ...
</div>

<button id="search_button" type="button" class="btn btn-primary pull-right">Search</button>

<script>
$('#search_button').click(function() {
    // ... do the call to search
    // and in the callback: 
    $('#search_results').show();
});
</script>
Run Code Online (Sandbox Code Playgroud)

search_results div应该最初隐藏.是否有一些正常/最佳实践方式使用bootstrap执行此操作?

是的,我确实知道我可以在search_results上放置style ="display:none",但这是最好的方法吗?拥有一种在语义上意味着"最初隐藏"的风格似乎更好一些.(注意:隐藏或隐藏类不会这样做!重要和show(),toggle()等使用不覆盖它们的内联样式,即设置"隐藏",因为类使其无法显示来自jQuery.)

jquery twitter-bootstrap

12
推荐指数
1
解决办法
3885
查看次数

golang测试临时目录

我有一个简单的函数,它将配置文件解析为JSON.我想编写一个测试,它使用一些示例静态配置文件并解析它们,或者在测试期间创建样本并尝试解析它们.

这个问题并不完全是必要的,但这里是基本代码:

// config.go

// ...(package,imports)...

// Overall settings - corresponds to main.conf
type MainSettings struct {
    // stuff
}

// Load main.conf from the specified file path
func LoadMainSettings(path string) (*MainSettings, error) {

    b, err := ioutil.ReadFile(path)
    if err != nil { return nil, err }

    r := &MainSettings{}
    err = json.Unmarshal(b, r)
    if err != nil { return nil, err }

    return r, nil

}
Run Code Online (Sandbox Code Playgroud)

和测试:

// config_test.go

func TestLoadMainSettings(t *testing.T) {

    // possibly generate some example config …
Run Code Online (Sandbox Code Playgroud)

testing file go

10
推荐指数
3
解决办法
1万
查看次数

使用动态名称调用其他模板

我没有看到使用动态名称调用模板(文本或html)的方法.例:

这有效:

{{template "Blah" .}}
Run Code Online (Sandbox Code Playgroud)

这种错误与模板调用中的"意外"$ BlahVar":

{{$BlahVar := "Blah"}}
{{template $BlahVar .}}
Run Code Online (Sandbox Code Playgroud)

我试图解决的整体问题是我需要根据配置文件有条件地呈现模板 - 所以我不知道模板的名称提前.显然我可以在FuncMap中放置一个函数,它只进行单独的模板解析和调用,并返回该结果但是想知道是否有更好的方法.

go go-templates

9
推荐指数
3
解决办法
4484
查看次数

Go Getter 方法与字段,正确命名

在 Effective Go 中,明确规定在未导出字段(以小写字母开头)的情况下,getter 方法应具有相同的字段名称,但以大写开头;他们给出的例子是owner作为一个字段和Owner一个方法。他们明确建议不要Get在 getter 方法名称前使用。

我经常遇到需要导出字段以进行 JSON 编组、与 ORM 或其他反射相关用途(IIRC 反射可以读取但不能修改未导出的字段)的情况,因此需要Owner在上面的示例中调用我的字段因此不能有Owner方法。

是否有一种惯用的命名方式可以解决这种情况?

编辑:这是我遇到的一个具体例子:

type User struct {
    Username string `db:"username" json:"username"`
    // ...
}

// code in this package needs to do json.Unmarshal(b, &user), etc.
Run Code Online (Sandbox Code Playgroud)

.

// BUT, I want code in other packages to isolate themselves from
// the specifics of the User struct - they don't know how it's
// implemented, only that …
Run Code Online (Sandbox Code Playgroud)

getter naming-conventions go

7
推荐指数
1
解决办法
3620
查看次数

从自动化测试套件中排除一些JUnit测试

在编写与外部资源交互的代码(例如使用Web服务或其他网络操作)时,我经常构造类,以便它也可以使用文件或其他输入方法"存根".因此,我最终使用存根实现来测试系统的其他部分,然后使用一个或两个专门测试调用Web服务的测试.

问题是我不想从Jenkins或我运行项目的所有测试(例如"gradle test")调用这些外部服务.某些服务有副作用,或者可能无法供所有开发人员访问.

现在我只是取消注释,然后重新评论这些特定测试方法的@Test注释,以启用和禁用它们.启用它,手动运行它来检查它,然后记得再次注释掉它.

// Uncomment to test external service manually
//@Test
public void testSomethingExternal() {
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

编辑:对于手动单元测试,我使用Eclipse并且能够右键单击测试方法并执行Run As - > JUnit测试.但是,如果没有(未注释的)注释,这是行不通的.

java junit unit-testing

6
推荐指数
2
解决办法
8430
查看次数

Go - 解码/编码asn.1

有谁知道如何在Go中使用asn1 Marshal和Unmarshal函数的好例子?

我熟悉如何使用ASN.1进行DER编码的概念,但是没有直接在代码中处理它的经验(通常我正在使用包装它的另一个库 - openldap或其他).

是的,我查看了文档(http://golang.org/pkg/encoding/asn1/),它似乎描述了一个标记系统,就像Go中可用于JSON和XML的标记系统一样; 但是我还没有为encoding/asn1包找到一个很好的实例.(嗯,好吧,我在asn1_test.go中看到了证书示例 - 任何人都知道其他什么?)

(总的来说,我正在尝试在Go中实现一小部分LDAP(服务器端).)

更新:我的问题是因为LDAP使用BER而不是DER.所以encoding/asn.1无济于事.在任何情况下,我最终都这样做:https://github.com/bradleypeabody/godap(将其用于BER + ASN1:https://github.com/go-asn1-ber/asn1-ber)

asn.1 go

6
推荐指数
1
解决办法
3973
查看次数