我们都知道,可以根据用户自己的账户信息+程序Id生成代币账户信息。如下图所示:

我通过如下代码可以得到代币账户(token account):
    rpcClient := rpc.New(RpcMainNet)
    programId := solana.MPK("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
    fromPubKey := solana.MustPublicKeyFromBase58("GmKsGRytiVoeMZGmBVCWPcUzJGHVqcvzhP5K9cstdr3E")
    fromTokenAccount, err := rpcClient.GetTokenAccountsByOwner(context.Background(), fromPubKey,
        &rpc.GetTokenAccountsConfig{
            ProgramId: &programId,
        },
        &rpc.GetTokenAccountsOpts{
            Encoding: solana.EncodingBase64Zstd,
        })
    if err != nil {
        fmt.Printf("get from token account failed")
    }
    for index, account := range fromTokenAccount.Value {
        fmt.Printf("get token account %d %v \n", index, account.Pubkey)
    }但是如何根据token account得到实际的token owner的公钥呢?我尝试了下面的方法,得到的owner是SPL Token的ProgramId:
    rpcClient := rpc.New(RpcMainNet)
    tokenMintPubKey := solana.MPK(TokenMainNetAddress)
    tokenAccountPubKey := solana.MustPublicKeyFromBase58("3XRNhFEXkV7itJEJMDBN8iRHBgwhgk83XB5K3s3re3Ew")
    tokenAccountInfo, err := rpcClient.GetAccountInfo(context.Background(), tokenAccountPubKey)
    if err != nil {
        fmt.Printf("get account info error %v\n", err)
    }
    fmt.Printf("get token account owner %v\n", tokenAccountInfo.Value)我希望得到的是实际token的拥有者: GmKsGRytiVoeMZGmBVCWPcUzJGHVqcvzhP5K9cstdr3E
