title: Access random rune element of string without using for ... range
body: <p>I recently asked <a href="https://stackoverflow.com/questions/44487910/does-accessing-elements-of-string-as-byte-perform-conversion">this</a> question and the answers increased my understanding, but they didn't solve the actual problem I had. So, I will try to ask a similar but different question as follows. </p>
  
  <p>Suppose that I want to access random <code>rune</code> element of a <code>string</code>. One way is:</p>
  
  <pre><code>func RuneElement(str string, idx int) rune {
    var ret rune
    for i, c := range str {
      if i == idx {
        return c
      }
    }
    return ret // out of range -&gt; proper handling is needed
  }
  </code></pre>
  
  <p>What if I want to call such a function a lot of times? I guess what I am looking for is like an operator/function like <code>str[i]</code> (which returns a <code>byte</code>) that return the <code>rune</code> element at <code>i</code>-th position. Why this element can be accessed using <code>for ... range</code> but not through a funtcion like <code>str.At(i)</code> for example?</p>