小编dre*_*ool的帖子

在现有C项目中使用Go代码

自从Go 1.5问世以来,我开始重新审视如何将其整合到我现有的项目中.

该项目的代码库完全用C语言编写,用于低级访问硬件和其他有趣的东西.然而,一些更高级别的东西是乏味的,我想开始用更高级别的语言编写它们(Go)

有什么方法可以从C程序调用Go代码吗?我安装了Go 1.5,它添加了-buildmode=c-archive(https://golang.org/s/execmodes),我正在努力工作.

但是,我似乎无法让Go生成适当的头文件以允许我的项目实际编译.当我生成存档时,我在导出的符号中看到了这个函数(使用objdump),但没有包含gcc的头文件抱怨函数不存在(如预期的那样)

我是Go的新手 - 然而,我喜欢这种语言,并希望能够利用它.是否有任何习惯的方式("惯用"在Go的世界中被广泛使用,我看到......)让这个可以很好地与对方玩耍?

我之所以提出这个问题并特别提到Go 1.5的原因是,根据这份文件,https://docs.google.com/document/d/1nr-TQHw_er6GOQRsF6T43GGhFDelrAP0NqSS_00RgZQ/edit?pli= 1# heading=h.1gw5ytjfcoke Go 1.5支持非Go程序调用Go代码.具体而言,在"Go代码链接到非Go程序并从中调用"一节中提到

c go

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

在全局变量中存储数据库连接

我在这里提供了Golang的MySQL驱动程序

https://github.com/go-sql-driver/mysql

我要做的其中一件事是将数据库变量存储在全局连接中.根据文档,sql.Open()应该返回一个指向DB结构的指针,所以我尝试将其存储为

var db *DB
Run Code Online (Sandbox Code Playgroud)

但是,这导致了错误

undefined: DB
Run Code Online (Sandbox Code Playgroud)

我尝试的下一件事是查看MySQL驱动程序的源代码,我在这里找到了一段代码https://github.com/go-sql-driver/mysql/blob/master/driver.go

func (d MySQLDriver) Open(dsn string) (driver.Conn, error) {
Run Code Online (Sandbox Code Playgroud)

所以,我试图将变量保存为driver.Conn - 但是,我无法(不正确的导入).我也无法导入驱动程序.

我尝试的最后一件事是使用reflect来使变量的名称变亮

package main

    import (
        "fmt"
        "reflect"
)

import "database/sql"
import _ "github.com/go-sql-driver/mysql"

func main() {
        db, _ := sql.Open("mysql", "root:password@/Tracker")
        yt := reflect.TypeOf(db).Kind()
        fmt.Printf("%T: %s\n", yt, yt)
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这也不起作用 - 它显示为指针,而不是它实际指向的变量类型.

我现在不知道如何解决这个问题.在此先感谢您的帮助!

go

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

Multisort Python

我正在尝试用Python编写Blender的自定义导出器.但是,我在弄清楚如何使用Python的本机排序实现以我需要的方式对顶点进行排序时遇到了一些麻烦.

基本上,我需要以这样的方式导出顶点,它们可以形成这样的网格,假设V是双精度的.

V V V V V
V V V V V
V V V V V
V V V V V
Run Code Online (Sandbox Code Playgroud)

我正在编写的"引擎"会根据上面显示的顶点图中的位置自动检索坐标的X和Z值.V代表Y坐标.因此,这个5乘5的顶点图将创建一个4乘4的面网格.

但是,在Blender中,顶点似乎是为网格的每个面单独排序,而不是像我的格式.所以,为了导出它,我需要先按深度(Blender中的Y坐标)然后按宽度(Blender中的X坐标)排序坐标.它必须表现得像SQL查询,其中第一个参数优先于第二个参数.

这是我的代码目前的样子

#!BPY

"""
Name: 'VaV Export'
Blender: 269
Group: 'Export'
Tooltip: 'Export to VaV file format'
"""
import Blender
import bpy

class Coordinate:
    def __init__(self, posX, posY):
        self.posX = posX
        self.posY = posY

    def sortX(self, other):
        if posX < other.posX:
            return 1

    def sortY(self, other):
        if posY < other.posY:
            return 1



def write(filename):
    out = open(filename, …
Run Code Online (Sandbox Code Playgroud)

python sorting blender

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

将任意数量的字节读入缓冲区 Golang

我正在尝试从连接读取信息流。我还没有编写其中的服务器部分,并且无权修改协议(否则我会让协议变得更加友好)

我正在尝试在 Go 中编写一个服务,该服务在循环中将任意数量的字节读取到缓冲区中,并将其传递给另一个处理程序(我也无法修改这部分)

这是我当前的设置

buf := make([]byte, 256)
for {
    n, err := conn.Read(buf)
    fmt.Println(string(buf))
    if err != nil || n== 0 {
        return
    }
    Handle(buf[:n])
}
Run Code Online (Sandbox Code Playgroud)

当有足够的字节可供读取时,此方法工作正常...但是,在流的末尾,没有 256 个字节可读。有没有办法在 Read() 优雅地返回时保留我的 256 字节缓冲区?

go

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

nginx删除.php和.html文件扩展名

我一直在尝试使nginx在没有.php或.html扩展名的情况下工作,我需要一些帮助。在此先感谢您的时间!

我尝试了如何使用NGINX从网址中同时删除.php和.html扩展名的解决方案但是没有效果

这是我当前的nginx配置。它是几个教程的组合,但是可以用。

# You may add here your
# server {
#   ...
# }
# statements for each of your virtual hosts to this file

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# ht

tp://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and …
Run Code Online (Sandbox Code Playgroud)

nginx

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

两边都可见 OpenGL Quad?

我刚开始学习 OpenGL,遇到了一个有趣的错误(这可能是因为我的错误行为)

但是,我似乎无法弄清楚为什么我的脸被默认绘制在两侧,而不是一侧。这是描述问题的一些屏幕截图

在此处输入图片说明

在此处输入图片说明

当我继续启用GL_CULL_FACE 时(因为显然默认情况下它没有启用,因为它应该是),我的四边形被渲染,但都在错误的一边。这是由于我计算法线的方式吗?

这是我计算法线的代码

public static Point3D calculateNormals(Point3D p1, Point3D p2, Point3D p3) {
    Point3D v1 = new Point3D(p2.getX() - p1.getX(), p2.getY() - p1.getY(), p2.getZ() - p1.getZ());
    Point3D v2 = new Point3D(p3.getX() - p1.getX(), p3.getY() - p1.getY(), p3.getZ() - p1.getZ());
    Point3D normal = new Point3D();
    normal.addX((v1.getY() * v2.getZ()) - (v1.getZ() - v2.getY()));
    normal.addY((v2.getZ() * v1.getX()) - (v2.getX() * v1.getZ()));
    normal.addZ((v1.getX() - v2.getY()) - (v1.getY() - v2.getX()));
    return normal;
}
Run Code Online (Sandbox Code Playgroud)

注意:创建一个没有参数的 Point3D 会导致 x、y 和 z 都被设置为 …

java opengl lwjgl

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

具有多个 GitHub 根模块的 IntelliJ 项目

我一直在使用 Git 的命令行将我的代码推送到 GitHub,但最近我认为最好使用 IntelliJ 提供的内置 VCS。如何设置我的项目,以便每个模块映射到不同的 Github 项目?

我也尝试关注这个问题为同一项目中的不同模块设置不同的 git 根 - Intellij IDEA但它看起来像是直接用 git 设置它,而不是 GitHub。

我尝试的是“从 GitHub 中签出”,但是当它要求我创建一个新项目时,我拒绝了,因为我想将其设置为一个模块而不是一个新项目。

我在这里缺少什么?

git github intellij-idea

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

绑定到特定地址但随机端口Linux

是否有一种惯用的方法来指定要绑定的特定地址,但是随机端口?

在我的应用程序中,我打开了几十个连接.我在connect()之前调用bind(),以便我可以指定应该与之建立连接的IP地址.但是,我必须自己找一个开放的端口.它现在工作正常,但如果我需要打开数千个连接,它可能会成为一个问题,因为找到一个开放的端口将变得越来越慢

int fd;
struct sockaddr_in addr;

fd = socket(AF_INET, SOCK_STREAM, 0);

while (TRUE)
{
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("192.168.0.1");
    addr.sin_port = htons((rand() % 65000) + 1);

    if (bind(fd, (struct sockaddr *)&addr, sizeof (struct sockaddr_in)) == 0)
        break;
}
Run Code Online (Sandbox Code Playgroud)

我考虑过编写自己的"端口管理"系统,但我想我会先尝试看看操作系统是否已有功能,然后继续操作

c sockets linux

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

标签 统计

go ×3

c ×2

blender ×1

git ×1

github ×1

intellij-idea ×1

java ×1

linux ×1

lwjgl ×1

nginx ×1

opengl ×1

python ×1

sockets ×1

sorting ×1