CAN'T SEND myTOKEN

I tried to use infura multiple times to send smart contract tokens. After broadcasting, I read information on Ethereum.

[Warning! Error encountered during contract execution [Out of gas]
ERC-20 Token Transfer Error (Unable to locate corresponding Transfer Event Logs), Check with Sender.]

Is it a problem with my code or something? Would like to ask how to deal with, thank you

This is my code.

   privateKey, err := crypto.HexToECDSA("......................")
if err != nil {
	log.Fatal(err)
}
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)

if !ok {
	log.Fatal("cannot asser type:publicKey is not of type *ecdsa.PublicKey")
}

fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA)
nonce, err := client.PendingNonceAt(context.Background(), fromAddress)
if err != nil {
	log.Fatal(err)
}
	value := big.NewInt(0)
	gasPrice, err := client.SuggestGasPrice(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	//转入地址
	toAddress := common.HexToAddress("................")
	tokenAddress := common.HexToAddress("0xbfa4fBBf7C725769C9825154504772668d7Db5cf")

	transferFnSignature := []byte("transfer(address,uint256)")
	hash := sha3.NewLegacyKeccak256()
	hash.Write(transferFnSignature)
	methidID := hash.Sum(nil)[:4]
	fmt.Println(hexutil.Encode(methidID)) //

	paddedAddress := common.LeftPadBytes(toAddress.Bytes(), 32)
	fmt.Println(hexutil.Encode(paddedAddress))

	amount := new(big.Int)
	amount.SetString("1000000000000000000000000000", 10)
	paddedAmount := common.LeftPadBytes(amount.Bytes(), 32)
	fmt.Println(hexutil.Encode(paddedAmount))

	var data []byte
	data = append(data, methidID...)
	data = append(data, paddedAddress...)
	data = append(data, paddedAmount...)
	//formaddress:=common.HexToAddress("0xFb53cF8cdE0e6869A528566AfF9C54BCCB0c7A7F")
	gasLimit, err := client.EstimateGas(context.Background(), ethereum.CallMsg{
		To: &toAddress,
		//Gas:      0,
		//GasPrice: nil,
		//Value:    nil,
		Data: data,
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(gasLimit)
	tx := types.NewTransaction(nonce, tokenAddress, value, gasLimit, gasPrice, data)
	//gasPrice, err := client.SuggestGasPrice(context.Background())
	chainID, err := client.NetworkID(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), privateKey)
	if err != nil {
		log.Fatal(err)
	}
	err = client.SendTransaction(context.Background(), signedTx)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("tx sent:%s", signedTx.Hash().Hex())
}

AND tx hash
0x170c457ce2b9bd57fa6206f848ce1871e0889622593a62746a491fae6e4b5313

An “Out of Gas” error means that your transaction did not include enough gas to cover the execution of it. This would not be an issue with Infura but rather in how much gas you provide when sending to Infura. I recommend looking closer at how gas works on Ethereum and increasing that amount when you send. Furthermore, I think you would be better off using one of the testnets with your gas experimentation rather than mainnet, and when you are comfortable resubmit to mainnet.

client, err := ethclient.Dial(“https://mainnet.infura.io/v3/…”)
if err != nil {
log.Fatal(err)
}
//用户私钥
privateKey, err := crypto.HexToECDSA("…")
if err != nil {
log.Fatal(err)
}
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)

if !ok {
	log.Fatal("cannot asser type:publicKey is not of type *ecdsa.PublicKey")
}

fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA)
nonce, err := client.PendingNonceAt(context.Background(), fromAddress)
if err != nil {
	log.Fatal(err)
}
value := big.NewInt(0)
//gasPrice, err := client.SuggestGasPrice(context.Background())
gasPrice := big.NewInt(30000000000)
//if err != nil {
//	log.Fatal(err)
//}
toAddress := common.HexToAddress("0xa3E3F1e36772d477512193D1Bb587cb6339A9D69")
tokenAddress := common.HexToAddress("0xbfa4fBBf7C725769C9825154504772668d7Db5cf")

transferFnSignature := []byte("transfer(address,uint256)")
hash := sha3.NewLegacyKeccak256()
hash.Write(transferFnSignature)
methidID := hash.Sum(nil)[:4]
fmt.Println(hexutil.Encode(methidID)) //

paddedAddress := common.LeftPadBytes(toAddress.Bytes(), 32)
fmt.Println(hexutil.Encode(paddedAddress))

amount := new(big.Int)
amount.SetString("1000000000000000000000000000", 10)
paddedAmount := common.LeftPadBytes(amount.Bytes(), 32)
fmt.Println(hexutil.Encode(paddedAmount))

var data []byte
data = append(data, methidID...)
data = append(data, paddedAddress...)
data = append(data, paddedAmount...)
//formaddress:=common.HexToAddress("0xFb53cF8cdE0e6869A528566AfF9C54BCCB0c7A7F")
gasLimit, err := client.EstimateGas(context.Background(), ethereum.CallMsg{
	To: &toAddress,
	//Gas:      0,
	//GasPrice: nil,
	//Value:    nil,
	Data: data,
})
if err != nil {
	log.Fatal(err)
}
fmt.Println(gasLimit)
tx := types.NewTransaction(nonce, tokenAddress, value, gasLimit, gasPrice, data)
//gasPrice, err := client.SuggestGasPrice(context.Background())
chainID, err := client.NetworkID(context.Background())
if err != nil {
	log.Fatal(err)
}
signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), privateKey)
if err != nil {
	log.Fatal(err)
}
err = client.SendTransaction(context.Background(), signedTx)
if err != nil {
	log.Fatal(err)
}
fmt.Printf("tx sent:%s", signedTx.Hash().Hex())

I changed the gas, but still the same error