Вы не должны заботиться. Необходимо использовать int
большую часть времени. Это поможет портированию Вашей программы к более широкой архитектуре в будущем (в настоящее время int
, псевдоним к System.Int32
, но это могло измениться). Только, когда разрядная ширина переменных вопросов (например: управлять расположением в память о struct
), необходимо использовать int32
и другие (со связанным" using System;
").
[] байт
- это фрагмент (аналогичный подстроке) всего или части массива байтов. Подумайте о срезе как о структуре значений со скрытым полем указателя для системы, чтобы найти и получить доступ ко всему или части массива (срез), плюс поля для длины и емкости среза, к которым вы можете получить доступ, используя len ()
и cap ()
функции.
Вот вам рабочий стартовый комплект, который читает и печатает двоичный файл; вам нужно будет изменить буквальное значение inName
, чтобы ссылаться на небольшой файл в вашей системе.
package main
import (
"fmt";
"os";
)
func main()
{
inName := "file-rw.bin";
inPerm := 0666;
inFile, inErr := os.Open(inName, os.O_RDONLY, inPerm);
if inErr == nil {
inBufLen := 16;
inBuf := make([]byte, inBufLen);
n, inErr := inFile.Read(inBuf);
for inErr == nil {
fmt.Println(n, inBuf[0:n]);
n, inErr = inFile.Read(inBuf);
}
}
inErr = inFile.Close();
}
Просто взглянув на документацию, кажется, что вам нужно просто объявить буфер типа [] byte и передать его для чтения, который затем будет читать до этого количества символов и возвращать количество фактически прочитанных символов (и ошибка).
Документы говорят, что
Read читает до len (b) байтов из файла. Он возвращает количество прочитанных байтов и ошибку, если таковая имеется. EOF сигнализируется нулевым счетчиком с err, установленным на EOF.
Разве это не работает?
РЕДАКТИРОВАТЬ: Также, я думаю, вам, возможно, следует использовать интерфейсы Reader / Writer, объявленные в пакете bufio вместо использования пакета os .
Попробуйте следующее:
package main
import (
"io";
)
func main() {
contents,_ := io.ReadFile("filename");
println(string(contents));
io.WriteFile("filename", contents, 0644);
}
Это хорошая версия:
package main
import (
"io/ioutil";
)
func main() {
contents,_ := ioutil.ReadFile("plikTekstowy.txt")
println(string(contents))
ioutil.WriteFile("filename", contents, 0644)
}