我使用jmoiron/sqlx库与我的Go应用程序中的PostgreSql服务器进行通信.在我的应用程序的某个地方,我有以下代码:
sqlQuery := `
INSERT INTO table_to_insert (
code,
status,
create_time,
create_by
) VALUES (
'',
0,
CURRENT_TIMESTAMP,
0
) RETURNING id
`
datas, err := tx.NamedExec(sqlQuery, structToInsert)
Run Code Online (Sandbox Code Playgroud)
问题:如何使用返回来获取最后一个插入ID tx.NamedExec()?我已经尝试datas.LastInsertId()但它总是返回0.
注意:我确定插入postgres是成功的.
我正在用Laravel 5.1构建一个简单的买卖应用程序.每个购买模型都有许多BuyDetail,它存储购买的商品数量和buy_price.我已经在Model上实现了表之间的关系.
class Buy extends Model
{
#Eloquent relationships
public function supplier()
{
return $this->belongsTo('App\Supplier');
}
public function buyDetails()
{
return $this->hasMany('App\BuyDetail');
}
}
Run Code Online (Sandbox Code Playgroud)
我想计算每次购买的总价.使用Eloquent ORM计算总价的最佳方法是什么?
现在我只是这样实现它:
@foreach($buys as $key => $value)
<?php
$total = 0;
?>
@foreach($value->buyDetails as $k => $bD)
<?php
$total += ($bD['buy_price']*$bD['qty']);
?>
@endforeach
<tr>
<td>{{$value->ref_number}}</td>
<td>{{$value->suplier->name}}</td>
<td>{{$value->created_at}}</td>
<td>{{$value->buyDetails->count()}}</td>
<td>{{$total}}</td>
<td>
<a href="" class="btn btn-default btn-sm" title="show">Detail</a>
<a href="" class="btn btn-primary btn-sm" title="edit">Edit</a>
<a href="" class="btn btn-danger btn-sm" title="delete">Delete</a>
</td>
</tr>
@endforeach
Run Code Online (Sandbox Code Playgroud) 假设我有一个类似的结构
type A struct{
name string`json:"name"`
}
Run Code Online (Sandbox Code Playgroud)
然后在主要我有代码
var jsonString string = `{"status":false}`
var a A
error := json.Unmarshal([]byte(jsonString),&a)
Run Code Online (Sandbox Code Playgroud)
显然上面的代码产生了一个nil错误,无论json格式是不同的.什么时候json.Unmarshal()会在Go中返回错误?
假设我有两个分支A和B
(A)--------(A+B)--------------(A+B+R)
\ / merge \ revert /
\ / \ /
(B)----(B+) (R)----
Run Code Online (Sandbox Code Playgroud)
首先,我将分支合并B到A,然后我使用 GitHub 的恢复功能恢复了合并请求。
现在,当我在分支上修复一些代码B并需要A再次合并时,几乎所有更改(我修复的新更改除外)都将被忽略。我怎样才能再次获得更改?
我想转换一个float64数字,让我们也说1.003要1003(整型).我的实现只是将float64with 乘以1000并将其转换为int.
package main
import "fmt"
func main() {
var f float64 = 1.003
fmt.Println(int(f * 1000))
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行该代码时,我得到的1002不是1003.因为Go会自动存储1.003为1.002999...变量.在Golang上进行这种操作的正确方法是什么?
在https://golang.org/pkg/testing/ 中描述了我们可以使用testing.B.RunParallel()函数在并行设置中运行基准测试。我尝试编写简单的测试代码:
func BenchmarkFunctionSome(b *testing.B) {
for i := 0; i < b.N; i++ {
SomeFunction()
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将其更改为使用 RunParallel()
func BenchmarkFunctionSome(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
SomeFunction()
}
})
}
Run Code Online (Sandbox Code Playgroud)
使用RunParallel()的比第一个基准测试慢。
实际上,基准测试中并行设置的含义是什么?为什么我使用它会变慢RunParallel()?