小编hey*_*hey的帖子

如何获取源代码中的变量名称(使用反射)

我正在尝试构建一个易于使用的模板系统。基本上我只想用不同的变量(字符串)创建一个切片,然后遍历切片并用{{}}实际值替换标记。因此,如果变量 ' name' 是onevar,它将在模板中查找{{onevar}}并将其替换为变量的实际值。

问题:如何获取变量名?基本上是源代码中的内容。是否可以 ?我已经尝试过一些带有反射的东西,但似乎我做对了。见下图

onevar := "something"
other := "something else"

var msg string
    sa := []string{onevar, other}
    for _, v := range sa {
        vName := reflect.TypeOf(v).Name()
        vName = fmt.Sprintf("{{%s}}", vName)
        msg = strings.Replace(msg, vName, v, -1)
    }
Run Code Online (Sandbox Code Playgroud)

go

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

为什么这是golang/waitgroup的死锁?

我不确定我错过了什么但是我遇到了死锁错误.我正在使用一个缓冲的通道,在完成所有程序后我将其范围覆盖.该通道的容量为4,我正在运行4个例程,所以我希望它在达到最大容量后自动"关闭".

package main

import "fmt"
import "sync"

func main() {
    ch := make(chan []int, 4)
    var m []int

    var wg sync.WaitGroup
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            ch <- m
            return
        }()
    }
    wg.Wait()

    for c := range ch {
        fmt.Printf("c is %v", c)
    }
}
Run Code Online (Sandbox Code Playgroud)

go

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

如何设置持续的环境变量?在去

我正在尝试使用Go OS在我的机器上设置一些环境变量

    err := os.Setenv("DBHOST", dbHostLocal)
    if err != nil {
        log.Fatalf("err %v", err)
    }
Run Code Online (Sandbox Code Playgroud)

似乎变量可用于Go程序,但是一旦我完全/终止Go过程,变量就不再可用了.我想知道是否可以永久设置这些变量.原因是我正在寻找为本地和开发环境创建一个带有配置文件(数据库名称等)的"设置"文件,以便我可以在没有任何设置的情况下切换...只需一次运行setup.go .

environment-variables go

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

如何通过Gmail Go SDK发送电子邮件?

我正在尝试通过gmail软件包发送新电子邮件。但是,send方法所需的消息类型记录不多。大多数字段似乎用于实际解析/阅读电子邮件。对于send方法,唯一有意义的字段是MessagePart类型的有效负载, 尽管我似乎不知道如何生成MessagePartBody,因为它似乎是一种mime类型。下面是我到目前为止的代码。

func (em *Email) SendMessage(cl *Client) error {
    config.ClientId = cl.Username
    config.ClientSecret = cl.Password

    t := &oauth.Transport{

        Config:    config,
        Transport: http.DefaultTransport,
    }
    var tk oauth.Token
    err := json.Unmarshal([]byte(cl.Meta), &tk)
    t.Token = &tk
    if err != nil {
        log.Errorf("meta %v, err %v", cl.Meta, err)
        return err
    }
    gmailService, err := gmail.New(t.Client())
    if err != nil {
        log.Error(err)
        return err
    }

    p := gmail.MessagePart{}
    p.Headers = append(p.Headers, &gmail.MessagePartHeader{
        Name:  "From",
        Value: em.FromEmail,
    }) …
Run Code Online (Sandbox Code Playgroud)

gmail go gmail-api

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

特定错误处理时的行为不明确

我正在尝试处理特定的错误,但我对这种行为感到惊讶.

例子:

如果我使用

if err == errors.New("something"){}` 
Run Code Online (Sandbox Code Playgroud)

它会返回true,即使errnil.

如果我使用

if err.String() == "something"` 
Run Code Online (Sandbox Code Playgroud)

它吓坏了errnil.

我真的很期待

err == errors.New("something")` 
Run Code Online (Sandbox Code Playgroud)

工作,我不知道为什么它会返回true.

更多代码:

以下是一些澄清问题的代码(Play):

package main

import "fmt"
import "errors"

func main() {

    e := errors.New("error")
    //I'm expecting this to return true
    if e == errors.New("error") {
        fmt.Println("Hello, playground")
    }
}
Run Code Online (Sandbox Code Playgroud)

go

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

如何在Go模板中解析范围之外的变量?

我有两个结构如下,我需要使用模板包在模板上呈现数据.我收到这个错误

<.Email>: Email is not a field of struct type Notes.

问题似乎是只有范围结构的字段似乎在范围循环中可用,所以我想知道如何从范围结构外部导入字段(例如电子邮件字符串).

这种行为非常意外.

type notes struct{
    Note string
    sf string
}

type uis struct{
    notes []Note
    Email string
}

var ui uis
Run Code Online (Sandbox Code Playgroud)

HTML

{{range .notes}}
    {{.Email}} {{.sf}}
    {{end}}

Email {{.Email}}
Run Code Online (Sandbox Code Playgroud)

我检查过godocs但它们似乎没用.

templates go

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

如何在顶部显示boostrap/angularUI警报?

我正在使用angular-UI显示一些警报,这些警报基本上由bootstrap提供.但问题是,如果客户端导航到页面底部,则无法看到警报.我想知道如何总是在顶部显示警报(我认为正确的术语是"在固定位置")

css twitter-bootstrap angularjs

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

如何在Go中构建类型接口的varidics?

我正在动态构建mysql查询(由于mysql IN子句)所以我需要传递一个参数列表,因为sql.Query函数需要.知道如何做到这一点?我真的不明白可变参数类型是如何工作的,或者我如何"生成"它.如果我传递一个切片,sql会抱怨只有一个参数而不是len(in clause params)因此我只能假设该函数将切片视为参数而不是参数的列表(可变参数).

我的查询/代码

var carsa []string
q := `SELECT field1,field2 FROM cooltable WHERE nicecars IN(?` + strings.Repeat(",?", len(ha.cars)-1) + ")"
hs := strings.Join(carsa, "','")
    hs = "'" + hs + "'"

    rows, err := cx.Query(q, country, hs)
Run Code Online (Sandbox Code Playgroud)

sql查询

func (db *DB) Query(query string, args ...interface{}) (*Rows, error) {
Run Code Online (Sandbox Code Playgroud)

编辑:我正在尝试运行的实际代码失败并显示错误 sql: converting Exec argument #0's type: unsupported type []interface {}, a slice

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() { …
Run Code Online (Sandbox Code Playgroud)

mysql sql go

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

如何使用jQuery使用查询字符串值填充输入?

我有一个输入如下,我想用查询字符串的值预填充值,以便当我访问example.com/my.html?phone=12345时,值1234应显示在输入字段中.对不起,如果我的问题似乎很愚蠢,但我对jquery和javascript没有任何经验

<input type="phone" value="" class="form-control" id="phonenumber"
placeholder="Phone number">
Run Code Online (Sandbox Code Playgroud)

jquery

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

为什么地图不会返回其值?

我有一个函数,它只返回一个map的值.但由于某些原因,它不会这样做.知道为什么吗?我在这里贴了代码.你也可以用它来玩

试试吧!

package main

import "fmt"

func main() {    
    a := CountryCode("Australia")    
    fmt.Println(a)    
}

func CountryCode(s string) string {    
    m := make(map[string]string)
    // [snip]
    m["AU"] = "Australia"
    // [snip]
    return m[s]
}

func CodeByCountry(s string) string {
    m := make(map[string]string)
    // [snip]
    m["Australia"] = "AU"
    // [snip]
    return m[s]
}
Run Code Online (Sandbox Code Playgroud)

go

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

如何从IP地址获取主机名?

我正在尝试从IP地址获取主机名,但我总是得到以下错误:

 err couln't get hostnames,err lookup 220.220.103.65.in-addr.arpa.: no such host,ip 65.103.220.220
Run Code Online (Sandbox Code Playgroud)

代码 :

var hostname string
hostnames, err := net.LookupAddr(c.ip)
 if err != nil {
  glog.Errorf("err couln't get hostnames,err %v,ip %v", err, c.ip)
  } else {
  hostname = strings.Join(hostnames, " ")
 }
Run Code Online (Sandbox Code Playgroud)

go

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