小编luc*_*iet的帖子

如何从golang中的reflect.Value获取基础值?

所以我找到了一些代码来帮助我开始使用Go(golang)中的反射,但是我在获取基础值时遇到了麻烦,因此我基本上可以map[string]string从结构和它的字段创建一个.

最后,我想把结果变成一个map[string]interface{},但这个问题有点阻碍我.

我现在的代码:

package main

import (
    "fmt"
    "reflect"
)

type Foo struct {
    FirstName string `tag_name:"tag 1"`
    LastName  string `tag_name:"tag 2"`
    Age       int  `tag_name:"tag 3"`
}

func inspect(f interface{}) map[string]string {

    m := make(map[string]string)
    val := reflect.ValueOf(f).Elem()

    for i := 0; i < val.NumField(); i++ {
        valueField := val.Field(i)
        typeField := val.Type().Field(i)

        f := valueField.Interface()
        val := reflect.ValueOf(f)
        m[typeField.Name] = val.String()
    }

    return m
}

func dump(m map[string]string) {

    for k, v := range m …
Run Code Online (Sandbox Code Playgroud)

reflection go

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

如何使用反射在Golang中调用Scan variadic函数?

我想用反射来调用Rows.Scan()函数.然而,它需要可变数量的指针,但我是Golang的新手,并没有很多源代码示例.我需要使用反射,因为我计划使用Query调用中的值填充切片.所以基本上使用rows.Columns()获得该行的长度,然后make()切片[]interface{}来填充数据点通常会使用传递到指针填充Scan()功能.

基本上像这样的代码:

col := rows.Columns()
vals := make([]interface{}, len(cols))
rows.Scan(&vals)
Run Code Online (Sandbox Code Playgroud)

任何人都有一个调用可变参数函数的例子,它使用我可以看一下的反射来获取指针?

编辑:示例代码似乎没有做我想要的.

package main

import (
    _ "github.com/lib/pq"
    "database/sql"
    "fmt"
)


func main() {

    db, _ := sql.Open(
        "postgres",
        "user=postgres dbname=Go_Testing password=ssap sslmode=disable")

    rows, _ := db.Query("SELECT * FROM _users;")

    cols, _ := rows.Columns()

    for rows.Next() {

        data := make([]interface{}, len(cols))

        rows.Scan(data...)

        fmt.Println(data)
    }

}
Run Code Online (Sandbox Code Playgroud)

结果:

[<nil> <nil> <nil> <nil> <nil>]
[<nil> <nil> <nil> <nil> <nil>]
[<nil> <nil> <nil> <nil> …
Run Code Online (Sandbox Code Playgroud)

database reflection go

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

在数据库行中在Golang中创建一个Map

基本上在执行查询之后我想获取结果行并生成一个[]map[string]interface{},但我不知道如何使用API​​执行此操作,因为该Rows.Scan()函数需要一个特定数量的参数来匹配所请求的列数(可能还有类型)以及)正确获取数据.

同样,我想概括这个调用并接受任何查询并将其转换为a []map[string]interface{},其中map包含映射到该行的值的列名.

这可能非常低效,我计划稍后更改结构,这interface{}是单个数据点的结构.

我如何仅使用database/sql包,或者如果需要使用database/sql/driver包?

database variadic-functions go

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

什么是C#lambda的编译?一个堆栈框架,一个匿名类型的实例,或?

什么是C#lambda的编译?一个堆栈框架,一个匿名类型的实例,或?

我读过这个问题.这主要回答"为什么"在使用隐式类型功能时不能使用lambda.但是,这个问题的目的是回答编译器生成的构造实际执行lambda的代码.它是一个匿名类型的方法调用(类似于在Java中实现接口的匿名类型吗?),还是只是一个堆栈框架,它引用了闭合变量并接受了参数签名?有些lambda不会关闭任何东西 - 因此编译中有两个不同的结果输出.

c# compiler-construction lambda

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

C#是否有漂亮的打印机/代码格式化程序(作为构建系统的一部分)?

C#是否有漂亮的打印机/代码格式化程序(作为构建系统的一部分)?读作:"生活在Visual Studio之外".对于Java,C++/C,Go来说似乎有很多这样的东西 - 所以C#应该还有一些代码格式化程序存在于IDE之外,这似乎更合理吗?

(我实际上喜欢将格式化程序与StyleCop结合起来,并且让dev在提交之前将其作为进程的一部分运行).

注意:不是语法高亮,如在网页中的代码中.相反,代码美化器或代码漂亮的打印机,它将代码和格式化为样式/标准编码格式...... StyleCop进行样式检查以查看代码是否符合格式.

c# pretty-print

15
推荐指数
5
解决办法
5318
查看次数

如何在Visual Studio中添加C++项目引用?

在C#中,添加一个将构建依赖项的项目引用非常简单,将生成的程序集放在原始的Debug /目录中,并针对该程序集进行正确编译.

所以目前,我在一个解决方案中有一个带有Main()和静态库项目的项目.但是,当我编译Main()项目并查看bin/Debug /目录时,我找不到Static.lib文件或.obj文件,我认为需要在那里,或者其他东西.我收到链接器错误.

我想也许我必须配置项目来找到静态库项目生成的.obj和.lib文件(它编译得很好,实际上会生成这些文件.)

我错过了一些东西,而且我对使用C++的Visual Studio不是很精通.

如何在Main项目中添加引用以使用静态库项目生成的库?

c++ project visual-studio

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

Nuget包是真正的exe命令吗?

我正在研究一些Nuget的东西.我想知道Nuget是否适合分发.exe命令 - 或者就此而言,如果Nuget仅用于引用项目(当然你也可以链接到exe而不是dll - IIRC).显然,我可以轻松地创建一个控制台应用程序,然后引用Nuget包,但我想知道是否应该始终这是必要的.此外,它似乎不像宝石,没有宝石的本地回购,所以我觉得.exe(s)不是Nuget包的预期用途,但我不明白为什么他们需要限制在这时尚 - 或者我错过了什么?

exe nuget

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

.NET/C#中是否有内置用于在对象之间复制值?

假设您有2个类,如下所示:

public class ClassA {
    public int X { get; set; }
    public int Y { get; set; }
    public int Other { get; set; }
}

public class ClassB {
    public int X { get; set; }
    public int Y { get; set; }
    public int Nope { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在假设您有一个每个类的实例,并且您想要将值从a复制到b中.有没有类似于MemberwiseClone的东西会复制属性名称匹配的值(当然是容错的 - 一个有get,另一个有set等)?

var a = new ClassA(); var b = new classB();
a.CopyTo(b); // ??
Run Code Online (Sandbox Code Playgroud)

像JavaScript这样的语言很容易.

我猜答案是否定的,但也许有一个简单的替代方案.我已经编写了一个反射库来执行此操作,但如果内置于较低级别的C#/ .NET可能会更有效(以及为什么重新发明轮子).

.net c# copy

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

是否已经内置了这些功能性的C#/ .NET构造?g(h())或

public static Func<V> To<T, V>(this Func<T> g, Func<T, V> h)
{
    return () => h(g());
}

public static Func<T> ToIdentity<T>(this T t)
{
    return () => t;
}
Run Code Online (Sandbox Code Playgroud)

在延迟评估时,我有时会使用这些和其他人.这些已经在.net库中吗?

编辑:

以下是一个示例用法:

public static string SuffixColumn(this string v, string suffix, int columns)
{
    return
    v.ToIdentity()
        .ToScrubbedHtml()
        .ToFormat(() => "{0} " + suffix.ToLower().PadLeft(columns, ' '))
        .ToErrorText(v, suffix, columns)();
}
Run Code Online (Sandbox Code Playgroud)

ToErrorText将'v'检查为合法(非错误代码,非null等),如果好,它运行链接在Func中,如果不好则生成故障安全文本结果.如果v,后缀或列不好,则永远不会调用ToFormat.(因此延迟/未评估的使用).

ToFormat几乎是提供的Func和string.Format的组合.ToIdentity用于将v提升为Func,然后链中的所有内容都基于T的一些Func.

.net c# monads functional-programming

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

编译glib时链接器错误...?

我在Ubuntu上针对glib编译一个简单的示例程序时遇到了麻烦.我收到以下错误.我可以让它编译但不与-c标志链接,我相信这意味着我安装了glib标头,但它没有找到共享对象代码.另请参阅下面的Make文件.

$> make re
gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include  -lglib-2.0       re.c   -o re
/tmp/ccxas1nI.o: In function `print_uppercase_words':
re.c:(.text+0x21): undefined reference to `g_regex_new'
re.c:(.text+0x41): undefined reference to `g_regex_match'
re.c:(.text+0x54): undefined reference to `g_match_info_fetch'
re.c:(.text+0x6e): undefined reference to `g_print'
re.c:(.text+0x7a): undefined reference to `g_free'
re.c:(.text+0x8b): undefined reference to `g_match_info_next'
re.c:(.text+0x97): undefined reference to `g_match_info_matches'
re.c:(.text+0xa7): undefined reference to `g_match_info_free'
re.c:(.text+0xb3): undefined reference to `g_regex_unref'
collect2: ld returned 1 exit status
make: *** [re] Error 1
Run Code Online (Sandbox Code Playgroud)

Makefile 用过的:

# Need to …
Run Code Online (Sandbox Code Playgroud)

c linker compilation

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