小编Joh*_*ohn的帖子

Golang通过引用传递变量来结构成员值

我很难通过引用或传递指针将值传递给结构.我将概述我想要实现的目标:

type FooStruct struct {
    foo1, foo2, foo3 int //etc
    connection *net.Conn
}

func(session FooStruct) Run(conn *net.Conn) {
    session.connection = conn
    session.connection.RemoteAddr()
    ......
}

func main() {
    server, err := net.Listen("tcp", ":8484")
    connection, err := server.Accept()
    foo := FooStruct{}
    foo.Run(&connection)
}
Run Code Online (Sandbox Code Playgroud)

以上是我试图实现的一个示例我只想将结构指针传递给结构中的连接变量.我已经尝试阅读文档并完成教程但我已经感到困惑.

编译时我得到错误 - session.connection.RemoteAddr undefined(类型*net.Conn没有字段或方法RemoteAddr).它确实有这种方法,因为复制变量时工作正常.然而,这不是我想要做的.

struct pointers reference go

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

Golang按位运算以及一般字节操作

我有一些c#代码对一个字节执行一些按位操作.我试图在golang做同样的事情,但我遇到了困难.

c#中的示例

byte a, c;
byte[] data; 
int j;
c = data[j];
c = (byte)(c + j);
c ^= a;
c ^= 0xFF;
c += 0x48;
Run Code Online (Sandbox Code Playgroud)

我已经读过golang不能对字节类型执行按位操作.因此,我是否必须将我的代码修改为类型uint8才能执行这些操作?如果是这样,有一个干净,正确/标准的方式来实现这一点?

byte bit-manipulation go

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

Golang数据包strcuture返回缓冲区

我已经制作了一个包内部的数据包,如下所示:

//A packet buffer object
package Packet

import (
    "bytes"
    "encoding/binary"
)

type Packet struct {
    buffer bytes.Buffer
}

func (p Packet) GetBytes() []byte {
    return p.buffer.Bytes()
}

func (p Packet) AddString(s string) {
    p.buffer.Write([]byte(s))
}

func (p Packet) AddInt(i_ int) {
    //Convert int to byte
    b := make([]byte, 2)
    binary.LittleEndian.PutUint16(b, uint16(i_))
    //Push byte to buffer
    p.buffer.Write([]byte(b))
}

func (p Packet) AddByte(b []byte) {
    p.buffer.Write(b)
}
Run Code Online (Sandbox Code Playgroud)

这是使用数据包结构形成数据包并将其发送到客户端的会话包

package Session

type MapleSession struct {
    connection net.Conn
    EncryptIV, DecryptIV []byte
    isConnected bool …
Run Code Online (Sandbox Code Playgroud)

byte struct function go packet

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

std::shared 从基类到派生类的 std::dynamic_pointer_cast 返回 NULL

我有一个函数,它接受类型的共享指针Base,然后std::dynamic_pointer_cast指向派生类型。但是,派生指针是 NULL,我不明白为什么。我已确保在我的基类中包含一个虚拟析构函数。我不想使用静态强制转换,因为这不能保证我的派生成员变量和函数被保留?

代码如下:

基类:

class Base
{
public:
    mType get_type()
    {
        return msg_type;
    }

    void set_type(mType type)
    {
        msg_type = type;
    }

    virtual ~cMsg() = default;
protected:
    mType msg_type;
    message msg;
};
Run Code Online (Sandbox Code Playgroud)

派生类:

class Derived : public Base
{
public:
    void set_i(int j)
    {
        i = j;
    }

    int get_i()
    {
        return i;
    }
private:
    int i;
};
Run Code Online (Sandbox Code Playgroud)

功能执行演员表:

void callback(std::shared_ptr<Base> msg_received)
{
    std::cout<< "Callback called\n";
    auto real_msg = std::dynamic_pointer_cast<Derived>(msg_received);

    if (real_msg != NULL)
    {
        std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ casting smart-pointers shared-ptr c++11

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