我正在尝试构建一个易于使用的模板系统。基本上我只想用不同的变量(字符串)创建一个切片,然后遍历切片并用{{}}实际值替换标记。因此,如果变量 ' 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) 我不确定我错过了什么但是我遇到了死锁错误.我正在使用一个缓冲的通道,在完成所有程序后我将其范围覆盖.该通道的容量为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 OS在我的机器上设置一些环境变量
err := os.Setenv("DBHOST", dbHostLocal)
if err != nil {
log.Fatalf("err %v", err)
}
Run Code Online (Sandbox Code Playgroud)
似乎变量可用于Go程序,但是一旦我完全/终止Go过程,变量就不再可用了.我想知道是否可以永久设置这些变量.原因是我正在寻找为本地和开发环境创建一个带有配置文件(数据库名称等)的"设置"文件,以便我可以在没有任何设置的情况下切换...只需一次运行setup.go .
我正在尝试通过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) 我正在尝试处理特定的错误,但我对这种行为感到惊讶.
例子:
如果我使用
if err == errors.New("something"){}`
Run Code Online (Sandbox Code Playgroud)
它会返回true,即使err是nil.
如果我使用
if err.String() == "something"`
Run Code Online (Sandbox Code Playgroud)
它吓坏了err的nil.
我真的很期待
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) 我有两个结构如下,我需要使用模板包在模板上呈现数据.我收到这个错误
<.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但它们似乎没用.
我正在使用angular-UI显示一些警报,这些警报基本上由bootstrap提供.但问题是,如果客户端导航到页面底部,则无法看到警报.我想知道如何总是在顶部显示警报(我认为正确的术语是"在固定位置")
我正在动态构建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) 我有一个输入如下,我想用查询字符串的值预填充值,以便当我访问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) 我有一个函数,它只返回一个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) 我正在尝试从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)