小编Zhe*_* Hu的帖子

golang json marshal:如何省略空嵌套结构

去操场

如上面的代码所示,可以使用json:",omitempty"省略结构中的某些字段以显示在json中.

例如

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}
type Total struct {
    A ColorGroup`json:",omitempty"`
    B string`json:",omitempty"`
}
group := Total{
       A: ColorGroup{},

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,B将不会出现json.Marshal(group)

但是,如果

group := Total{
       B:"abc",

}
Run Code Online (Sandbox Code Playgroud)

A 仍然出现在 json.Marshal(group)

{"A":{"Name":"","Colors":null},"B":"abc"}
Run Code Online (Sandbox Code Playgroud)

问题是我们如何才得到

{"B":"abc"}
Run Code Online (Sandbox Code Playgroud)

编辑:经过一些谷歌搜索,这里是一个建议使用指针,换句话说,Total变成

type Total struct {
    A *ColorGroup`json:",omitempty"`
    B string`json:",omitempty"`
}
Run Code Online (Sandbox Code Playgroud)

json go

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

使用ngrok with websocket(或socket.io)

是否有任何简单的示例代码显示ngrok转发socket.io/websocket(在localhost上的nodejs下运行)?

换句话说,是吗

ngrok http 3000
Run Code Online (Sandbox Code Playgroud)

使用在端口3000上运行的nodejs服务器和socket.io?或类似的东西

ngrok http+tcp 3000 (just wild guessing)
Run Code Online (Sandbox Code Playgroud)

编辑:

在ngrok.com的帮助下回答我自己的问题

简单地用

ngrok http 3000
Run Code Online (Sandbox Code Playgroud)

您将看到localhost绑定到的Web地址字符串.所以在客户端的javascript代码中,改变

var socket = io.connect('http://localhost:3000');
Run Code Online (Sandbox Code Playgroud)

var socket = io.connect('http://94349fe6.ngrok.io');
Run Code Online (Sandbox Code Playgroud)

注意:

http://94349fe6.ngrok.io就是那个网址.你的不同之处.

再次编辑:

实际上,如果只是一个人:

var socket = io();
Run Code Online (Sandbox Code Playgroud)

"它默认尝试连接到为页面提供服务的主机"

所以它也有效.

websocket node.js socket.io ngrok

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

mongodb nodejs本机驱动程序是否关闭连接

在nodejs中,每个请求打开mongodb连接并在回调中关闭它是一个好习惯吗?

app.get('/some_route', function(){
      MongoClient.connect(url,function(err, db){
          //some db query with callback
          db.collection("some_collection").findOne(doc, function(err,item){
               if(err){
                      res.send(err);
                      //close db connection 
                      db.close();
                }else{
                      //do something with item
                      res.send(item);
                      //close db connection 
                      db.close();
                }

      });
    });
Run Code Online (Sandbox Code Playgroud)

有些人说没有必要在每个请求上打开/关闭mongodb连接,因为一旦打开,就可以共享一个连接池.

问题是如何维护和共享该池?猫鼬已经自动完成吗?

特别是,在mongodb超时或断开连接时,是否需要重新连接?

我发现这里有矛盾的答案,不管是否请求mongodb连接

几乎所有在线doc node都是mongodb本机驱动程序和我读过的示例代码,db.open()与回调中某处的db.close()配对.

因为如果共享连接池,可能会编码 根据christkv的回答,人们可能会编码:

var p_db=null;
var c_opt = {server:{auto_reconnect:true}};

app.get('/some_route', function(){
      //pseudo code
    if (!p_db){
           MongoClient.connect(url, c_opt, function(err,db){
                  p_db = db;
                  p_db.collection("some_collection").findOne(doc, function(err,item){
                  if(err){
                      res.send(err);                          
                  }else{
                      //do something with item
                      res.send(item);
                  }

             });
           });
       }else {
          p_db.collection("some_collection").findOne(doc, function(err,item){
               if(err){
                      res.send(err);
                }else{
                      //do …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js

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

去漂浮数字划分

我尝试在Go中获得2.4/0.8 == 3

w:=float64(2.4)
fmt.Println(math.Floor(w/0.8),math.Floor(2.4/0.8) )
Run Code Online (Sandbox Code Playgroud)

它给了我"2 3".

问题是为什么math.Floor(w/0.8)不给我3.它是浮点数的精度限制吗?

go

5
推荐指数
2
解决办法
7366
查看次数

用于smalltalk的数据可视化(2-d plot)包

是否有针对smalltalk(squeak或pharo)平台的任何当前数据可视化或二维绘图包?

类似于d3js或processing.org的东西,或者sdl支持在屏幕上绘制线条/点?

smalltalk squeak pharo

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

如何在SDL 2.0绘制点,线或矩形中指定"宽度"或"点大小"

我正在尝试使用SDL 2.0功能SDL_RenderDrawPoints()在屏幕上绘制数据点.

在"processing.org"中,我可以strokeWeight()用来改变我的"点数"的大小.如何在SDL 2.0中执行此操作

c sdl-2

5
推荐指数
2
解决办法
8422
查看次数

golang使用具有超时模式的通道跳出循环

从go time out模式学习并发模式,我尝试检查一个通道并打破for循环

Loop: 
   for {
      //do something repeatedly very fast in the for loop

     //check exitMessage to see whether to break out or not
      select {
          case <- exitMessage:
               break Loop
          case <- time.After(1 * time.Millisecond):
       }
   }  
Run Code Online (Sandbox Code Playgroud)

超时可避免select从通道读取卡纸.问题是在Windows XP机器上,该延迟远远超过1毫秒(每次延迟不准确性问题),这显着减慢了for循环.

一个被黑客攻击的解决方案是让另一个goroutine(我知道它很便宜)来倾听 exitMessage

exitFlag := 0

//another goroutine to check exitMessage
go fun(in chan int){
    exitFlag = <-in
}(exitMessage)


for exitFlag == 0 {
       //do something repeatedly very fast in the for loop


 } …
Run Code Online (Sandbox Code Playgroud)

go

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

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

Mecrisp Forth 在 TI LaunchPad MSP-EXP430G2ET (MSP430G2553) 上没有响应

我使用 TI UniFlash 云工具成功上传了 MSP430G2553 的 Mecrisp Forth 十六进制文件。

(我也使用相同的工具来刷新 MSP430F5529 和 TI Tiva LaunchPad 的其他 Mecrisp Forth 十六进制文件。)

不幸的是,以 9600 波特率运行的 Tera Term 没有响应。

(我已使用相同的Tera Term成功与在 MSP430F5529 和 Tiva 上运行的 Mecrisp Forth 进行对话。)

我关注了早期G2 LaunchPad的硬件RX/TX业务。事实上,最新的EXP430G2ET已经在板上清楚地标明了,并且它带有晶体焊接。

那么我错过了什么?

forth

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

Verilog 按位或 ("|") monadic

我见过使用按位或运算符(“|”)的 Verilog 代码。目的是什么?

例如

| address[15:14]==0
Run Code Online (Sandbox Code Playgroud)

或者

|address[15:14]? io_din : ramrd
Run Code Online (Sandbox Code Playgroud)

我们不能省略“|”吗?在这些情况下?

verilog

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

标签 统计

go ×3

node.js ×2

c ×1

forth ×1

j ×1

json ×1

mongodb ×1

ngrok ×1

pharo ×1

sdl-2 ×1

smalltalk ×1

socket.io ×1

sorting ×1

squeak ×1

verilog ×1

websocket ×1