小编Cha*_*lie的帖子

如何查看嵌套 Go 依赖项的完整依赖项树

我正在尝试在我们的 CI 中调试以下构建错误,其中“A 依赖于 B,它无法构建,因为它依赖于 C。” 我正在构建不直接依赖于 kafkaAvailMonitor.go 的数据服务,这使得此错误难以追踪。换句话说:

数据(我正在构建的)取决于(?),这取决于 kafkaAvailMonitor.go

对于开发人员来说,修复他们只是“去做任何事情”似乎微不足道,但作为发布过程的一部分,我不能这样做 - 我必须找到添加依赖项的人并要求他们修复它。

我知道有一些工具可以可视化依赖树和其他更复杂的构建系统,但这似乎是一个非常基本的问题:有什么方法可以查看完整的依赖树以查看导致构建问题的原因吗?

go build -a -v

../../../msgq/kafkaAvailMonitor.go:8:2: cannot find package 
  "github.com/Shopify/sarama/tz/breaker" in any of:
  /usr/lib/go-1.6/src/github.com/Shopify/sarama/tz/breaker (from $GOROOT)
  /home/jenkins/go/src/github.com/Shopify/sarama/tz/breaker (from $GOPATH)
  /home/jenkins/vendor-library/src/github.com/Shopify/sarama/tz/breaker
  /home/jenkins/go/src/github.com/Shopify/sarama/tz/breaker
  /home/jenkins/vendor-library/src/github.com/Shopify/sarama/tz/breaker
Run Code Online (Sandbox Code Playgroud)

build go dependency-management

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

Python如何访问OS API函数,例如socket()?

更新的问题:

  1. 套接字对象实际上是从哪里创建的?我在socketmodule.c的 4188行找到了这个,但看起来它叫做sock_new而不是套接字?

    static PyObject *sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 是否有一些约定来确定导入socketmodule.c之类的模块的位置?换句话说,当我看到"来自_socket import*"时,谁知道导入的是什么(不搜索整个存储库)?


原版的:

sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Run Code Online (Sandbox Code Playgroud)

我试图理解这段代码是如何工作的,具体是如何/在哪里Python实际上使OS函数调用socket():

class _socketobject(object):

    __doc__ = _realsocket.__doc__

    __slots__ = ["_sock", "__weakref__"] + list(_delegate_methods)

    def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, _sock=None):
        if _sock is None:
            _sock = _realsocket(family, type, proto)
        self._sock = _sock
        for method in _delegate_methods:
            setattr(self, method, getattr(_sock, method))
Run Code Online (Sandbox Code Playgroud)

当我在维基百科上查找BSD套接字时,我看到这个例子是有意义的,因为套接字函数是在types.h下定义的.在上面我看到调用realsocket看起来像一个OS函数调用,但我没有在任何地方定义realsocket(我在Python27/include头文件中根本没有看到任何关于套接字的内容).

  /* Server code in C */

  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <arpa/inet.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h> …
Run Code Online (Sandbox Code Playgroud)

python sockets

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

你为什么要在golang中使用组合?

在下面的代码中,我展示了我认为在golang中嵌入(方法得到提升)和组合(不提升方法)之间的区别.

你为什么要在golang中使用组合?

type obj1Inherited struct {
    obj2
}

type obj1Composed struct {
    someobj obj2
}

type obj2 struct {
}

func (o obj2) printTest() {
    fmt.Println("obj2")
}

func main() {
    o := obj1Inherited{}
    o.printTest() //fine - printTest is promoted

    obj1Composed := obj1Composed{}
    obj1Composed.selector.printTest() //fine because I'm using the composed obj
    obj1Composed.printTest() //not fine - printTest is NOT promoted
Run Code Online (Sandbox Code Playgroud)

go

6
推荐指数
1
解决办法
2749
查看次数

量角器:WebDriverError:未知错误:Android上不支持操作

我正在尝试在真实设备(Android手机,Android 5.0.1版本)上运行量角器测试.它正在打开浏览器(Chrome),但没有导航到网址并抛出以下错误消息.

super(opt_error);
         ^
WebDriverError: unknown error: operation is unsupported on Android
  (Session info: chrome=49.0.2623.105)
  (Driver info: chromedriver=2.18.343845 (73dd713ba7fbfb73cbb514e62641d8c96a94682a),platform=Windows NT 10.0 x86_64).
Run Code Online (Sandbox Code Playgroud)

这是来自conf js的代码(仅限于需要的代码):

seleniumAddress: 'http://localhost:4723/wd/hub',

   capabilities: {
     browserName: 'chrome',
     platformName: 'android',
     deviceName: ' ',
   },
   framework: 'jasmine2',
   specs: ['../functional/AppLogin.js'],
Run Code Online (Sandbox Code Playgroud)

实际规格代码:

describe("Verify Login", function(){
     it("Verify Application Login",function(){
         browser.get("http://juliemr.github.io/protractor-demo/");
     });
});
Run Code Online (Sandbox Code Playgroud)

注意:设备连接到系统正常,Appium节点服务器运行正常.

android appium protractor

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

VBA代码不会将数组写入范围,只会写入第一个元素

我需要执行以下操作:

  • 将 C2:AU264 范围提升为 2D 数组
  • 创建另一个一维数组,(1 到 11880)
  • 用第一个数组中的值填充第二个数组(“转置”)
  • 将数组 2 写回工作表

这是我正在使用的代码:

Private Ws As Worksheet
Private budgets() As Variant
Private arrayToWrite() As Variant
Private lastrow As Long
Private lastcol As Long

Private Sub procedure()
Application.ScreenUpdating = False

Set Ws = Sheet19
Ws.Activate

lastrow = Ws.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).row
lastcol = Ws.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column

ReDim budgets(1 To lastrow - 1, 1 To lastcol - 2)
budgets= Ws.Range("C2:AU265")

ReDim arrayToWrite(1 To (lastCol - 2) * (lastRow - 1))

k = …
Run Code Online (Sandbox Code Playgroud)

arrays excel vba

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

将 REST Web API 应用程序与 SignalR 集成?

目标:通过在数据库中存储新消息(发布到 Web API)并将其推送到单个监听客户端 (SignalR),促进 2 个用户之间的聊天。

以下是我的担忧:

  • 除了命令和查询职责分离(CQRS)模式事件溯源模式之外,我找不到任何可以解决此问题的设计模式。这两者似乎都专注于复杂的实时应用程序。我的应用程序具有许多传统的 REST 功能,但目前唯一的实时组件是聊天,因此似乎没有必要使用这些模式之一。
  • 是否有更简单的方法将基于 REST 的网站 (Web API) 与实时组件 (SignalR) 集成?
  • 我现在所做的感觉就像是在混合两种完全不同的东西。

我想过尝试一下:

  • 使用事件将我的 POST 处理程序耦合到我的推送处理程序- 尽管我不确定这对我有帮助,因为我不希望我的应用程序的“发送消息”部分从“接收”部分发展出一部分。
  • 将我所有的推送逻辑移至由消息代理处理的作业中 - 这似乎也没有必要,但会产生更好的分离。根据这个答案,我的理解是 SignalR 使用内存中消息代理,这样广播就不会等待接收消息,因此不需要外部消息代理,除非我确实需要横向扩展。

也许我的应用程序太简单,不需要更好的设计?

这是我到目前为止所拥有的:

public class chatPush
{
    public chatPush(){}

    public push(string msg)
    {
        try{
            string jsonMsg = JsonConvert.SerializeObject(msg);
            await Clients.User(userId).send(jsonMsg);
        }
        catch
        {
            string errorMsg = //error with msg
            await Clients.User(userId).send(errorMsg);
        }
    }
}

async Task<IHttpActionResult> PostMessage(Message msg)

    db.Messages.Add(msg);

    try
    {
        await db.SaveChangesAsync();
    }
    catch
    { …
Run Code Online (Sandbox Code Playgroud)

c# websocket signalr asp.net-web-api asp.net-web-api2

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

“每个 JVM 线程都有自己的程序计数器”是什么意思?

我试图理解这句话的意思:

每个 Java 虚拟机线程都有自己的 pc(程序计数器)寄存器。在任何时候,每个 Java 虚拟机线程都在执行单个方法的代码,即该线程的当前方法(第 2.6 节)。

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1

我假设 JVM 线程像任何其他线程一样工作 - 每次该线程被安排运行时(比如 Linux 内核),它的“程序计数器”是从它的task_struct 数据结构加载的,所以从 CPU 的角度来看,只有一个程序计数器 - 每次操作系统切换线程时,它都会被操作系统更新。

那是对的吗?我很困惑,因为整个页面似乎一直在强调每个 JVM 都有自己的 PC/堆栈/堆等等。

java multithreading jvm process linux-kernel

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