I/O #
Operasi input/output (I/O) di Golang mencakup berbagai interaksi dengan sistem file, pembacaan dan penulisan data, serta komunikasi dengan jaringan. Golang menyediakan paket os
, io
, dan bufio
untuk melakukan operasi I/O. Berikut adalah penjelasan dan contoh penggunaan operasi I/O utama di Golang.
Paket os
#
Paket os
digunakan untuk berinteraksi dengan sistem operasi. Ini mencakup operasi file seperti membuka, membaca, menulis, dan menutup file.
Membuka dan Membaca File #
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
// Membuka file
file, err := os.Open("example.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Membaca isi file
data, err := ioutil.ReadAll(file)
if err != nil {
log.Fatal(err)
}
// Menampilkan isi file
fmt.Println(string(data))
}
Menulis ke File #
package main
import (
"log"
"os"
)
func main() {
// Membuka file dengan opsi menulis
file, err := os.OpenFile("example.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Menulis data ke file
_, err = file.WriteString("Hello, World!")
if err != nil {
log.Fatal(err)
}
}
Paket io
#
Paket io
menyediakan fungsi dasar untuk operasi I/O, seperti pembacaan dan penulisan.
Menyalin Data #
package main
import (
"io"
"log"
"os"
)
func main() {
srcFile, err := os.Open("source.txt")
if err != nil {
log.Fatal(err)
}
defer srcFile.Close()
destFile, err := os.Create("destination.txt")
if err != nil {
log.Fatal(err)
}
defer destFile.Close()
// Menyalin data dari source.txt ke destination.txt
_, err = io.Copy(destFile, srcFile)
if err != nil {
log.Fatal(err)
}
}
Membaca Data #
package main
import (
"fmt"
"io"
"strings"
)
func main() {
reader := strings.NewReader("Hello, Go!")
buf := make([]byte, 4)
for {
n, err := reader.Read(buf)
if err == io.EOF {
break
}
fmt.Printf("Read %d bytes: %s\n", n, string(buf[:n]))
}
}
Paket bufio
#
Paket bufio
menyediakan buffering untuk I/O yang lebih efisien, terutama untuk operasi yang sering membaca atau menulis data.
Membaca File dengan Buffer #
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Membuat buffered reader
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err != nil {
break
}
fmt.Print(line)
}
}
Menulis File dengan Buffer #
package main
import (
"bufio"
"log"
"os"
)
func main() {
file, err := os.Create("example.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// Membuat buffered writer
writer := bufio.NewWriter(file)
_, err = writer.WriteString("Hello, Buffered World!\n")
if err != nil {
log.Fatal(err)
}
// Memastikan semua data ditulis
writer.Flush()
}
Contoh Lengkap #
Berikut adalah contoh lengkap yang mencakup pembacaan dan penulisan file dengan menggunakan paket os
, io
, dan bufio
.
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
)
func main() {
// Membuka file untuk dibaca
srcFile, err := os.Open("source.txt")
if err != nil {
log.Fatal(err)
}
defer srcFile.Close()
// Membuat file baru untuk menulis
destFile, err := os.Create("destination.txt")
if err != nil {
log.Fatal(err)
}
defer destFile.Close()
// Menyalin data dari source.txt ke destination.txt
_, err = io.Copy(destFile, srcFile)
if err != nil {
log.Fatal(err)
}
// Membuka kembali file destination.txt untuk membaca
destFile, err = os.Open("destination.txt")
if err != nil {
log.Fatal(err)
}
defer destFile.Close()
// Membaca isi file destination.txt dengan buffered reader
reader := bufio.NewReader(destFile)
for {
line, err := reader.ReadString('\n')
if err == io.EOF {
break
}
fmt.Print(line)
}
}
Kesimpulan #
Operasi I/O di Golang mencakup berbagai interaksi dengan sistem file, pembacaan dan penulisan data, serta komunikasi dengan jaringan. Dengan menggunakan paket os
, io
, dan bufio
, Anda dapat melakukan berbagai operasi I/O dengan efisien dan aman. Pemahaman yang baik tentang cara kerja operasi I/O ini sangat penting untuk mengembangkan aplikasi yang membutuhkan interaksi dengan data eksternal atau sistem file.