这个Go程序不会编译.它抛出错误global_var declared and not used
package main
import "log"
var global_var int
func main() {
global_var, new_string := returnTwoVars()
log.Println("new_string: " + new_string)
}
func returnTwoVars() (int, string) {
return 1234, "woohoo"
}
func usesGlobalVar() int {
return global_var * 2
}
Run Code Online (Sandbox Code Playgroud)
但是,当我:=通过new_string在main函数中声明并简单地使用来消除使用运算符的需要时=,编译器看到global_var全局声明并在程序中的其他地方使用时没有问题.我的直觉告诉我它应该知道global_var已经宣布了
我在解析以下结构时遇到问题,其中JsonData是存储在数据库中的JSON字符串.
type User struct {
Id uint64 `json:"user_id"`
JsonData string `json:"data"`
}
user := &User {
Id: 444,
JsonData: `{"field_a": 73, "field_b": "a string"}`,
}
Run Code Online (Sandbox Code Playgroud)
如果我json.Marshal这个,它将逃避引号,但这将给我JSON:
{
"user_id" : 444,
"data": "{\"field_a\": 73, \"field_b\": \"a string\"}"
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉marshaller避免转义JsonData字符串并将其放在引号中,所以它看起来像这样?
{
"user_id" : 444,
"data": {"field_a": 73, "field_b": "a string"}
}
Run Code Online (Sandbox Code Playgroud)
我宁愿不跳过太多的箍,比如创建一个全新的类似用户的对象和/或解组/重新编组字符串等.
我很难理解如何设置已作为指针传递的接口值.我正在尝试按照以下方式完成某些事情:
import "fmt"
var Stuff map[string]interface{}
func main() {
var num int
Stuff["key"] = 9001
get("key", &num)
fmt.Println("num:", num)
}
func get(k string, v interface{}) {
*v = Stuff[k]
}
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能使我的程序输出
num: 9001
Run Code Online (Sandbox Code Playgroud)
编辑:是否有可能使用的全能解决方案reflect?
我在理解stateParams应该如何工作方面遇到了很多麻烦.我看到的任何地方都表明,item_id当我前往URL时,这应该通过456 /#/manage/456,而是$stateParams一个空对象.此外,在$state传递给MainCtrl 的对象中,我可以通过使用来访问所有参数$state.params,但这似乎是不合需要的和hackish.
angular
.module('router',['ui.router'])
.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider)
{
$stateProvider
.state('manage',
{
url: '/manage',
templateUrl: '/templates/main.html',
controller: 'MainCtrl'
})
.state('manage.item_id',
{
url: '/:item_id',
templateUrl: '/templates/main.html',
controller: 'MainCtrl'
})
}])
.controller('MainCtrl', ['$scope', '$stateParams', '$state', function($scope, $stateParams, $state)
{
// empty object
console.log('$stateParams: ', $stateParams);
// shows the variables i want
console.log('$state.params: ', $state.params);
}])
Run Code Online (Sandbox Code Playgroud) 使用database/sql包中的东西sql.Exec会返回动态生成的,未引用的错误,例如
"Error 1062: Duplicate entry '192' for key 'id'"
Run Code Online (Sandbox Code Playgroud)
问题是它还可以返回错误,例如
"Error 1146: Table 'tbl' doesn't exist"
Run Code Online (Sandbox Code Playgroud)
从同一个电话到 sql.Exec
如何在没有这两个错误的情况下区分它们
或者这个问题的惯用解决方案是什么?
我有以下Google Go和MySql,其中有date_update问题的字段经常作为NULL值返回.
var date_update time.Time
query := `SELECT date_update FROM users WHERE user_id=?`
err := conn.QueryRow(query, user_id).Scan(&date_update)
Run Code Online (Sandbox Code Playgroud)
当我运行此查询并碰巧收到该字段的空值之一时,我收到错误 unsupported driver -> Scan pair: <nil> -> *time.Time
我使用其他数据类型处理此方法(例如INT)
SELECT IFNULL(integer_field, 0) FROM table
Run Code Online (Sandbox Code Playgroud)
但它似乎不适用于时间戳或日期时间.有任何想法吗?
所以我有这样的形式:
<form method="POST" action="/parse">
<div>
<input name="photo[0]" value="Hey I'm photo zero!" />
</div>
<div>
<input name="photo[1]" value="Photo one here!" />
</div>
<div>
<input name="photo[2]" value="Awh I'm photo 2 but I'm the third photo..." />
</div>
<div>
<button type="submit">submit</button>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
在Go中,看起来,net/http库将允许您通过表单中的字符串键一次查询表单数据:
r.PostFormValue("photo[0]")
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以直接将此表单解析为Go中的切片?
也就是说,能够像这样访问照片的元素:
photos := r.PostFormValue("photo");
log.Println(photos[1]);
Run Code Online (Sandbox Code Playgroud)
或者除了字符串改写之外,在Golang中的表单发布数据中正确访问"数组类似"数据结构的任何其他建议......