How can I externally rate-limit a golang http upload?
<p>I have a golang utility that uploads a lot of data via https to OpenStack Object Storage. I'm running it on Ubuntu Linux, and I would like to ensure that its maximum upload bandwidth does not exceed 2,500KB/s, preferably without affecting other users on the same system (i.e. slowing down the ethernet interface). </p>

<p>How can I do this, preferably without altering my source code? I've tried a few approaches so far:</p>

<ol>
<li><strong>Traffic Shaping:</strong> I've been unable to figure out the appropriate network shaping techniques to affect a single process, though I know that should be possible with <code>iptables</code> and <code>tc</code>. Any guidance on how to do this would be appreciated. My networking background isn't very extensive.</li>
<li><strong>Flowrate Limiting:</strong> I tried using the <a href="https://github.com/mxk/go-flowrate" rel="nofollow noreferrer"><code>flowrate</code></a> package in go to rate-limit my writes to the upload. This didn't have any discernable effect. I think this doesn't work because the <a href="https://godoc.org/github.com/ncw/swift#ObjectCreateFile" rel="nofollow noreferrer"><code>github.com/ncw/swift.ObjectCreateFile.Write()</code></a> method doesn't upload the data as it is recieved, but rather when it is closed. I could be mistaken about this though.</li>
<li><strong>trickle:</strong> I tried the <code>trickle</code> command, but it isn't compatible with golang executables (see <a href="https://stackoverflow.com/questions/40386936/why-doesnt-the-trickle-utility-affect-my-dynamically-linked-golang-program">this question</a>)</li>
</ol>