Интерпретированные строковые литералы представляют собой последовательности символов между двойными кавычками "", используя (возможно многобайтовое) кодирование UTF-8 отдельных символов. В UTF-8 символы ASCII имеют один байт, соответствующий первым 128 символам Юникода. Строки ведут себя как кусочки байтов. Руна представляет собой целочисленное значение, определяющее кодовую точку Юникода. Поэтому
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1])) // ASCII only
fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}
Выход:
e
e
界
Чтение:
Перейти к разделу Спецификация языка программирования в Конверсии .
Я не могу иметь явный конструктор без параметров, только неявный, который инициализирует все члены по умолчанию.
Хотя CLR позволяет это, C # не позволяет структурам иметь параметр без параметров конструктор. Причина в том, что для типа значения компиляторы по умолчанию не генерируют конструктор по умолчанию, и не генерируют вызов конструктору по умолчанию. Таким образом, даже если вам удалось определить конструктор по умолчанию, он не будет вызван, и это только смутит вас. Чтобы избежать таких проблем, компилятор C # запрещает пользователю определять конструктор по умолчанию. И поскольку он не генерирует конструктор по умолчанию, вы не можете инициализировать поля при их определении, ...
blockquote>
Достаточно разумное объяснение можно найти по адресу: http://en.csharp-online.net/CSharp_FAQ:_Why_must_struct_constructors_have_at_least_one_argument
Цитата: ".NET. Common Language Runtime (CLR) не гарантирует, что вызовутся конструкторы без параметров. Если структурам было разрешено иметь конструкторы без параметров без параметров, то подразумевалось, что конструкторы по умолчанию всегда будут вызываться. Тем не менее, CLR не дает такой гарантии. "