2016-04-08 2 views
1

Если я создал файл в моей main() функции:Перейти: передать указатель файла на другую функцию?

output, err := os.Create("D:\\output.txt") 

И я хочу, чтобы все, что еще одна функция в программе гравюр, чтобы поместить в этот файл, используя:

output.WriteString(str) 

Как мог я передать указатель на этот файл, чтобы функция могла писать на него? Кроме того, есть ли другой способ, который я должен использовать для записи строки в файл, или WriteString является succicient?

Спасибо!

ответ

3

Есть ваша функция принимает указатель на качестве параметра с использованием модификатора * типа, и просто передать свой объект файл как есть, так как os.Create уже возвращает указатель:

func WriteStringToFile(f *os.File) { 
    n, err := f.WriteString("foobar") 
} 

// .. 

output, err := os.Create("D:\\output.txt") 
WriteStringToFile(output) 

Кроме того, обратите внимание, что это хорошая практика не игнорировать ошибки.

Чтобы записать строки в файл, можно сделать несколькими способами, особенно если вы хотите не использовать объект os.File напрямую и использовать только интерфейс io.Writer. Например:

fmt.Fprint(output, "foo bar") 
+0

ладно спасибо! мне даже не нужно было использовать амперсанд, так как os.Create уже возвращает адрес этой переменной. Кроме того, знаете ли вы, как я могу «распечатать» новую строку в файле? когда я использую «\ n», он отлично работает в консоли, но не работает вообще, когда я выводил его как строку в файл .txt. – Gambit2007

+0

Хорошо, что вы на самом деле поймали ошибку в обоих ответах самостоятельно :) Это было полностью сделано специально, ха-ха. Просто шучу, я это исправлю. Кроме того, в Windows, если вы хотите, чтобы ваш файл выглядел правильно в блокноте, вам нужно использовать «\ r \ n» вместо «\ n» – SirDarius

+0

Hahaha отлично! еще раз спасибо! – Gambit2007

2

Просто определить функцию, которая может принимать *File указатель в качестве аргумента:

func Write(output *os.File) { 
(...) 
} 

Write(&output) //call function. 

}

Кроме того, вы можете гарантировать, что файл будет закрыт в конце концов с помощью:

defer output.Close() 
+0

Спасибо, но мне пришлось использовать * os, файл, как указано ниже! – Gambit2007

+0

Правильно! :) Я исправил свой ответ для дальнейшего использования. – Esse

2

Использование интерфейса, такого как io.Writer, является способом идти. Многие типы в Go выполняют io.Writer, просто используя метод Write. os.File является одним из таких типов.

Смежные вопросы