小编use*_*113的帖子

如何获得字段类型的零值

我有一个包含许多字段的结构 - 我已经想出如何使用反射提取字段名称,值和标记信息.我还想做的是确定字段的值是否与字段的默认值不同.

目前,我有这个(工作,但有点臭):

...
qsMap := make(map[string]interface{})
var defaultTime time.Time
var defaultString string
...
// get the field name and value
fieldName := s.Type().Field(i).Tag.Get("bson")
fieldValue := valueField.Interface()

// use reflection to determine the TYPE of the field and apply the proper formatting
switch fieldValue.(type) {
case time.Time:
if fieldValue != defaultTime {
    qsMap[fieldName] = fieldValue
}
case string:
if fieldValue != defaultString {
    qsMap[fieldName] = fieldValue
}
...
}
Run Code Online (Sandbox Code Playgroud)

在我看来,在这种情况下应该有一种避免类型切换的方法 - 我要做的是建立一个字段/值的映射,其值与其默认的零值不同,如:

// doesn't work -- i.e., if fieldValue …
Run Code Online (Sandbox Code Playgroud)

go

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

GOLANG:在运行时为不同的操作系统选择func的正确方法

我非常喜欢使用GO可以获得的许多任务的交叉编译/平台简易性.我想,我有一个问题,相当于#ifdef/#else类型的构造,用于根据操作系统执行/编译函数.

这是场景 - 假设我有一个函数将信息插入操作系统的控制结构,以便在用户下次启动系统时启动进程.在Windows上,我会更新用户的'RUN/RUNONCE'注册表项,在MAC上会有plist条目等.

从本质上讲,我希望能够编写类似于此的人(或者具有超载的OS特定功能):

func setStartupProcessLaunch () {
    if [OS is Windows] {
        updateRegistry(){}
    } else if [OS is Darwin] {
        updatePlist(){}
    } else if [OS is Linux] {
        doLinuxthing() {}
    }
}
Run Code Online (Sandbox Code Playgroud)

给定静态编译,任何未调用的例程都将被标记为编译错误.理想情况下,我想在#ifdef WINDOWS,#ifdef MAC类型的块中包围我的'doSpecificOS()'函数 - 实现此目的的正确方法是什么?我希望我不需要为每个OS平台创建相同程序的多个项目树.

谢谢!

go

11
推荐指数
3
解决办法
5304
查看次数

GOLANG"Namespaced"枚举?

我理解在GO中创建枚举的惯用方法如下:

type topicStatus int

const (
  registered topicStatus = iota
  active
  inactive
  pending-removal
  removed
 )
Run Code Online (Sandbox Code Playgroud)

但如果我有另一个想要"重用"名称的"枚举",我会收到一个错误:

type hotelVisit int

const (
   registered hotelVisit = iota
   checked-in
   checked-out
)
Run Code Online (Sandbox Code Playgroud)

在这里,如果我尝试这个,我无法区分topicStatus.registered和hotelVisit.registered之前使用的"注册" - 有没有办法"命名""枚举"名称?

go

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

Golang 1.2:解压缩密码保护的zip文件?

查看最新版本(1.2)zip包 - 如何解压缩受密码保护的文件(使用7zip,AES-256编码)?我没有看到在哪里/如何添加该信息.一个简单的例子就是伟大的!

go

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

MGO - Mongo返回的空结果有结果

我有一个GOLANG结构如下:

type OrgWhoAmI struct {
FriendlyName            string        `json:"friendlyName"`
RedemptionCode          string        `json:"redemptionCode"`
StartUrls               []StartUrl    `json:"startUrls"`
Status                  string        `json:"status"`
Children                []OrgChildren `json:"childrenReemptionCodes"`
}

type StartUrl struct {
DisplayName string `json:"displayName"`
URL         string `json:"url"`
}

type OrgChildren struct {
FriendlyName   string `json:"childFriendlyName"`
RedemptionCode string `json:"childRedemptionCode"`
}
Run Code Online (Sandbox Code Playgroud)

我已经创建并成功将记录插入到MongoDB集合中(因为我可以通过CLI mongo程序查询Mongo来查看结果) - 但是当我用MGO查询如下时,我什么也得不到:

func main() {
    session, sessionErr := mgo.Dial("localhost")
defer session.Close()

    // Query All
    collection := session.DB("OrgData").C("orgWhoAmI")
var results []OrgWhoAmI
err = collection.Find(bson.M{}).All(&results)
if err != nil {
    panic(err)
}
for _, res := range …
Run Code Online (Sandbox Code Playgroud)

go mongodb mgo

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

GOLANG:遍历目录树并处理文件 -- err = '没有这样的文件或目录

我正在编写一个例程来遍历目录树并为我找到的每个文件创建数字签名(加盐哈希)。在测试它时,我得到了这种奇怪的行为 - 如果我给程序一个目录“上方”的根路径,程序可以遍历树并打印出文件名,但是如果我尝试打开文件以读取它的字节,我在例程找到的文件上收到错误消息“没有这样的文件或目录” - 不确定这里给出了什么。Walk() 例程如何“看到”该文件,但 ioutil.ReadFile() 却找不到它?

示例代码:

// start with path higher up the tree, say $HOME
func doHashWalk(dirPath string) {
    err := filepath.Walk(dirPath, walkFn)
    // Check err here
}

func walkFn(path string, fi os.FileInfo, err error) (e error) {

    if !fi.IsDir() {
        // if the first character is a ".", then skip it as it's a hidden file

        if strings.HasPrefix(fi.Name(), ".") {
            return nil
        }

        // read in the file bytes -> get the absolute path
        fullPath, …
Run Code Online (Sandbox Code Playgroud)

go

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

GoLang - 如何执行/将进程生成为"隐藏"

这可能只适用于Windows,但我想从我的GO程序中生成一个进程,以便它隐藏运行 - 该进程将计算一些结果并通过stdout返回它们.我只是不希望恼人的命令窗口在运行时弹出(它实际上只是一个后台计算过程).

你怎么能执行另一个'隐藏'的过程?

谢谢!

go

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

(Mis)了解Git分支和结账

我有一个分支,v5并且我创建了一个新分支v6,以测试一个新功能.我对一些文件进行了一些更改,并在将更改提交到分支之前添加了一些文件.
当我签出v5分支时,对公共文件的更改被"回滚"到v5我的预期,但我认为特定的新文件v6现在是其中的一部分v5.为什么?

git

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

标签 统计

go ×7

git ×1

mgo ×1

mongodb ×1