我从Bitbucket到Github的项目迁移,我找不到将文件附加到问题的方法(例如:截图,规格等)
怎么做?
基本上,迭代a字段值的唯一方法(我知道)struct是这样的:
type Example struct {
a_number uint32
a_string string
}
//...
r := &Example{(2 << 31) - 1, "...."}:
for _, d:= range []interface{}{ r.a_number, r.a_string, } {
//do something with the d
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果有更好,更通用的实现方式[]interface{}{ r.a_number, r.a_string, },所以我不需要单独列出每个参数,或者,是否有更好的方法来循环结构?
我试图透过reflect包裹看,但是我碰了一堵墙,因为我不知道一旦取回就该做什么reflect.ValueOf(*r).Field(0).
谢谢!
如果我想计算地图结构中的项目,我应该使用什么语句?我试着用
for _, _ := range m {...}
Run Code Online (Sandbox Code Playgroud)
但似乎语法是错误的.
我正在调用一个函数,如果没有值,则返回一个空数组.
当我这样做时,它不起作用:
if r == [] {
fmt.Println("No return value")
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的工作是:
var a [0]int
if r == a {
fmt.Println("No return value")
}
Run Code Online (Sandbox Code Playgroud)
但是声明一个变量只是为了检查返回值似乎并不正确.有什么更好的方法呢?
http://play.golang.org/p/W70J4GU7nA
s := []int{5, 2, 6, 3, 1, 4}
sort.Reverse(sort.IntSlice(s))
fmt.Println(s)
// 5, 2, 6, 3, 1, 4
Run Code Online (Sandbox Code Playgroud)
很难理解func Reverse(数据接口)接口的含义.
如何反转阵列?我不需要排序.
我需要能够构建一个go应用程序的不同版本; 'debug'版本和普通版本.
这很容易做到; 我只是有一个const DEBUG,它控制着应用程序的行为,但是每次我需要在构建类型之间进行交换时都必须编辑配置文件.
我正在阅读关于go build(http://golang.org/pkg/go/build/)和标签,我想也许我可以这样做:
config.go:
// +build !debug
package build
const DEBUG = false
Run Code Online (Sandbox Code Playgroud)
config.debug.go:
// +build debug
package build
const DEBUG = true
Run Code Online (Sandbox Code Playgroud)
然后我应该能够使用"go build"或"go build -tags debug"进行构建,标签应该排除config.go并包含config.debug.go.
......但这不起作用.我明白了:
src/build/config.go:3:DEBUG在此块(<0>)中重新声明src/build/config.debug.go上的声明:3
我究竟做错了什么?
是否有其他更合适的#ifdef风格的方式我应该使用?
我尝试连接数据库,但我没有为数据库设置密码,我在密码字段中将其留空。但它没有连接并显示错误connector.go:95: could not use requested auth plugin 'mysql_native_password': this user requires mysql native password authentication.。另外,我使用 phpmyadmin 作为数据库,所以如何连接这里是我的代码
package main
import (
"database/sql"
"fmt"
"log"
"github.com/go-sql-driver/mysql"
)
var db *sql.DB
func main() {
// Capture connection properties.
cfg := mysql.Config{
User: "root",
Passwd: "",
Net: "tcp",
Addr: "127.0.0.1:3306",
DBName: "recordings",
}
// Get a database handle.
var err error
db, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil {
log.Fatal(err)
}
pingErr := db.Ping()
if pingErr != nil { …Run Code Online (Sandbox Code Playgroud) 我有一行包含3个数字,我想从stdin用fmt.Scanln()读取,但这段代码不起作用:
X := make([]int, 3)
fmt.Scanln(X...)
fmt.Printf("%v\n", X)
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
cannot use X (type []int) as type []interface {} in function argument
Run Code Online (Sandbox Code Playgroud)
我不明白.
我正在阅读preshing的博客Memory Reordering Caught in the Act,并通过他的示例代码重现内存重新排序
然后我想知道我是否可以通过Go重现内存重新排序,所以我在go中编写了示例代码,但是在Go中没有显示内存重新排序.
我写信是为了分享一些调查结果.
你能帮忙解释为什么Go无法进行内存重新排序吗?谢谢.
Go中的示例代码:
package main
import (
"fmt"
"math/rand"
)
var x, y, r1, r2 int
var detected = 0
func randWait() {
for rand.Intn(8) != 0 {
}
}
func main() {
beginSig1 := make(chan bool, 1)
beginSig2 := make(chan bool, 1)
endSig1 := make(chan bool, 1)
endSig2 := make(chan bool, 1)
go func() {
for {
<-beginSig1
randWait()
x = 1
r1 = y
endSig1 <- true …Run Code Online (Sandbox Code Playgroud) go ×9
build ×1
c++ ×1
concurrency ×1
github ×1
go-reflect ×1
map ×1
memory ×1
mysql ×1
slice ×1