小编rob*_*b74的帖子

Golang依赖管理最佳实践

在Golang中,我们可以在GitHub上指定开源库作为依赖项.例如:

import "github.com/RichardKnop/somelibrary"
Run Code Online (Sandbox Code Playgroud)

这将尝试根据您的Go版本查找分支,如果我理解正确,则默认为master.

因此无法导入依赖项的特定版本,例如:

import "github.com/RichardKnop/somelibrary#v1.4.8"
Run Code Online (Sandbox Code Playgroud)

在Go中管理依赖关系的最佳实践是什么?

我可以看到两种方法.

I.版本模块

是否为具有重大变化的主要版本创建新模块?

例如,我的Go库可以定义模块v1和v2,那么你可以这样做:

import "github.com/RichardKnop/somelibrary/v1"
Run Code Online (Sandbox Code Playgroud)

要么:

import "github.com/RichardKnop/somelibrary/v2"
Run Code Online (Sandbox Code Playgroud)

根据您的需要.对v1或v2所做的任何更改都不需要破坏任何API或工作功能.

II.分叉

这将使您完全控制Go代码所需的外部依赖项版本.

例如,您可以将github.com/RichardKnop/somelibrary分叉到您自己的GitHub帐户中,然后在您的代码中执行以下操作:

import "github.com/ForkingUser/somelibrary"
Run Code Online (Sandbox Code Playgroud)

然后你必须分叉所有外部依赖,这似乎有点矫枉过正.但是,它可以让您完全控制版本.您可以将叉子保留在您知道正在使用代码的版本中,并且只有在检查新版本的依赖项不会破坏任何内容后才能更新分叉.

思考?

go

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

如何使用分隔符切割字符串

在Go中,如果我有一个字符串变量s:

var s string = "a,b,c,d,e"
Run Code Online (Sandbox Code Playgroud)

如何将其转换或拆分或分解为切片或字符串数​​组,以便它将变为:

arr[0] = "a"
...
arr[4] = "e"
Run Code Online (Sandbox Code Playgroud)

arrays go slice

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

new和make有什么区别?

New没有初始化内存,它只是将它归零.它返回指向新分配的零值的指针.

Make 仅创建切片,贴图和通道,并返回初始化的切片,贴图和通道.

在这种情况下,"初始化"意味着什么?新品和品牌之间还有哪些不同之处?

go

16
推荐指数
3
解决办法
3657
查看次数

PyGTK:如何使图像自动缩放以适合它的父窗口小部件?

我有一个PyGTK应用程序,需要加载未知大小的图像,但我遇到的问题是,如果图像非常大或非常小,窗口布局变得扭曲和难以使用.我需要一些方法使图像自动缩放以适合其父窗口小部件.不幸的是,经过一些研究后,似乎没有代码,内置或其他方式,可以完成我正在寻找的东西.

我怎么能写点什么呢?我原本以为有人会为此编写一些代码; 有什么我错过了吗?

python gtk pygtk image

8
推荐指数
1
解决办法
6171
查看次数

将"=?UTF 8?"(RFC 2047)转换为golang中的常规字符串

我正在使用API​​,它正在为其他语言文本返回这样的内容:

=?UTF 8?B?2KfZhNiu2LfZiNin2Kog2KfZhNiq2Yog2KrYrNmF2Lkg2KjZitmG?= =?UTF 8?B?INit2YHYuCDYp9mE2YLYsdin2ZPZhiDYp9mE2YPYsdmK2YUg2YjZgQ==?= =?UTF 8?B?2YfZhdmHINmF2YXYpyDYp9mU2YXZhNin2Ycg2KfZhNi52YTYp9mF?= =?UTF 8?B?2Kkg2LnYqNivINin2YTZhNmHINin2YTYutiv2YrYp9mGLnBkZg==?=

这是一种常见的格式吗?我如何将它转换为golang中的常规字符串?

Golang通常可以很好地处理多种语言,但我不确定如何进行转换.

string encoding utf-8 go

5
推荐指数
2
解决办法
2934
查看次数

如何获取带有媒体子类型的 http 响应的 MIME 类型?

我想存储从 GET 请求获得的响应的 MIME 类型。我已经使用了该DetectContentType函数,但它text/plain; charset=utf-8为我提供了 js 和 css 资源。我必须区分每个 url 的文件类型,并且为此目的我依赖 MIME 类型。

response, error := http.Get(url) 
if error == nil { 
    contentType := response.Header.Get("Content-Type") 
    // ... 
}
Run Code Online (Sandbox Code Playgroud)

只给我内容类型。

get go mime-types

5
推荐指数
1
解决办法
9944
查看次数

如何通过 JavaScript 激活 Google Chrome 中的“静音选项卡”功能?

我正在为 Google Chrome 开发一个扩展程序。

Chrome 具有“静音选项卡”功能,可阻止来自网站的声音。激活此功能后,选项卡上会显示“三振扬声器”图标。

我的扩展程序的任务是激活此功能并以这种方式阻止任何声音。我怎样才能在 JavaScript 中做到这一点?

javascript google-chrome google-chrome-extension

5
推荐指数
1
解决办法
3153
查看次数

Vue/Vuetify - 基于组件大小的断点

据我所知,Vuetify 允许您根据视口大小定义断点。是否也可以根据组件的大小定义断点?例如

  • 当多个组件显示在概览页面上时,它将使用更“紧凑”的布局,以便能够在大屏幕上并排显示组件。
  • 当仅显示一个组件时,它可能会占用更多空间(在大屏幕上)。
  • 当小屏幕上仅显示一个组件时,也可以使用“紧凑”布局。
  • 在小屏幕上,概述页面可以垂直而不是并排显示多个组件。

或者你能推荐一个更好的方法吗?

vue.js vuetify.js

5
推荐指数
1
解决办法
991
查看次数

文本更改了GTK3中文本视图小部件的信号

如何在GTK3框架中的文本视图窗口小部件中找出文本何时更改?我认为必须有一个与之相关的信号,但找不到它.例如,qt4中有一个ontextchanged信号,所以GTK中应该有一个类似的信号.我正在使用Python.

python gtk3

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

如何在strings.Contains中获得结果数?

如果要检查字符串是否包含某个子字符串,可以这样做:

msg = "Lorem ipsum example of lorem ipsum."
if strings.Contains(msg, "ipsum") {
   fmt.Println("contains word ipsum")
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能知道msg中出现"ipsum"这个词的次数?

go

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

直接在源代码中使用gobs,是否可能?

我想知道是否可以直接在源代码中使用gob编码数据(例如在函数中).原因是不必访问磁盘来获取gob文件来提高性能.我知道memcached,redis和朋友.我不需要TTL或任何其他奇特的功能.只是在内存中映射.数据将在"设置"/构建过程中编码并转储到源代码中,以便在运行时只需要"解码"它.

go应用程序基本上可以作为一个小的只读嵌入式数据库.我可以使用json(基本上用原始json声明一个var)来做到这一点,但我想会有性能损失所以我想知道它是否可能与gob.

我尝试了不同的东西,但我不能让它工作,因为基本上我不知道如何定义gob var(字节,[字节] ??)和解码器似乎期望一个io.Reader所以在开支之前整整一天,我决定至少问你这个问题.

悲惨的尝试:

var test string
test = "hello"

p := new(bytes.Buffer)
e := gob.NewEncoder(p)
e.Encode(test)
ers := ioutil.WriteFile("test.gob", p.Bytes(), 0600)
if ers != nil {
    panic(ers)
}
Run Code Online (Sandbox Code Playgroud)

现在我想将test.gob添加到函数中.正如我所看到的,test.gob的源代码如下^H^L^@^Ehello

var test string

var b bytes.Buffer

b = byte("^H^L^@^Ehello")

de := gob.NewDecoder(b.Bytes())

er := de.Decode(&test)
if er != nil {
    fmt.Printf("cannot decode")
    panic(er)
}

fmt.Fprintf(w, test)
Run Code Online (Sandbox Code Playgroud)

performance go gob

-1
推荐指数
1
解决办法
187
查看次数