Pendahuluan

Berikut adalah error pada golang:

missing import path

package main
 
import fmt
 
func main() {
	fmt.Println("Helo world")
}
helloworld.go:3:11: missing import path
  • Artinya module pada line 3 tidak ditemukan/lokasi module salah

Solusinya yang benar menggunakan simbol kutip "fmg":

package main
 
import "fmt"
 
func main() {
	fmt.Println("Helo world")
}

other declaration of …

helloworld.go
package main
 
import "fmt"
 
func main() {
	fmt.Println("halo world")
}
sample.go
package main
 
import "fmt"
 
func main() {
	fmt.Println("halo world")
}
$ go build

Akan Error seperti dibawah ini

➜ go build
# dasar
./sample.go:5:6: main redeclared in this block
        ./helloworld.go:5:6: other declaration of main
  • Artinya ada 2 function yang sama yaitu main

Solusinya menggunakan nama function yang berbeda.

syntax error: unexpected newline, expected type

package main
 
import "fmt"
 
func main() {
	var name // <-- Error
	name = "rahmat"
	fmt.Println(name)
	name = "Ardiansyah"
	fmt.Println(name)
}

jika kita tidak langsung mengiinisialisasi datanya, golang akan error seperti dibawah

# command-line-arguments
./variable.go:6:10: syntax error: unexpected newline, expected type

Solusinya langsung menginisialisasi datanya seperti dibawah ini

package main
 
import "fmt"
 
func main() {
	var name = "rahmat"
	fmt.Println(name)
	name = "Ardiansyah"
	fmt.Println(name)
}

no new variables on left side of :=

package main
 
import "fmt"
 
func main() {
	name := "rahmat"
	fmt.Println(name)
	name := "Ardiansyah"
	fmt.Println(name)
}
# command-line-arguments
./variable.go:8:7: no new variables on left side of :=

solusinya hilangkan tanda : dibaris yang kedua dan berikutnya

declared and not used

package main
 
func main() {
	var (
		firstName = "Rahmat"
		lastName  = "Ardiansyah"
	)
}
➜ go run variable.go 
# command-line-arguments
./variable.go:10:3: declared and not used: firstName
./variable.go:11:3: declared and not used: lastName
  • Jika variable tersebut tidak digunakan maka akan error saat dijalankan

Solusinya gunakan variable tersebut atau hapus.

missing init expr for name

package main
 
func main() {
	const name
}
➜ go run variable-constant.go 
# command-line-arguments
./variable-constant.go:4:8: missing init expr for name
  • Error terjadi karena variable constant tidak langsung diberi nilai

Solusinya langsung deberi nilai

package main
 
func main() {
	const name = "Rahmat"
}

out of bounds

package main
 
import "fmt"
 
func main() {
	var names [2]string
 
	names[0] = "rahmat"
	names[1] = "ardiansyah"
	names[2] = "mat"
 
	fmt.Println(names)
}
➜ go run array.go 
# command-line-arguments
./array.go:10:8: invalid argument: index 2 out of bounds [0:2]
  • Error diatas terjadi karena jumlah element nya lebih dari maksimal variabel array yang sudah ditentukan. Solusinya tambah maksimal Arraynya atau hapus element yang berlebih.

outside a composite literal

package main
 
import "fmt"
 
func main() {
	var names = [...]string // error
	fmt.Println(names)
}
➜ go run array.go 
# command-line-arguments
./array.go:23:14: invalid use of [...] array (outside a composite literal)
./array.go:23:14: [...]string (type) is not an expression
  • Error diatas disebabkan karena membuat array tanda langsung memberi elementnya.

Solusinya langsung beri value arraynya berupa element string atau lainnya

package main
 
import "fmt"
 
func main() {
	var names = [...]string{"rahmat", "ardiansyah"}
	fmt.Println(names)
}

index out of range

package main
 
import "fmt"
 
func main() {
	var newSlice []string = make([]string, 2, 5)
	newSlice[0] = "HALO"
	newSlice[1] = "DUNIA"
 
	fmt.Println(newSlice)
	fmt.Println(cap(newSlice))
 
	newSlice[2] = "LAGI" // Error
	fmt.Println(newSlice)
}
➜ go run slice.go
[HALO DUNIA]
5
panic: runtime error: index out of range [2] with length 2
 
goroutine 1 [running]:
main.main()
        /home/rahmat/Documents/learn/go/dasar/slice.go:48 +0x679
exit status 2

Error diatas terjadi ketika kita menambahkan data array tapi lebih dari panjang yang sudah ditentukan sebelumnya. Solusinya gunakan append:

package main
 
import "fmt"
 
func main() {
 
	var newSlice []string = make([]string, 2, 5)
	newSlice[0] = "HALO"
	newSlice[1] = "DUNIA"
 
	fmt.Println(newSlice)
	fmt.Println(cap(newSlice))
 
	// newSlice[2] = "LAGI" // Error
	newSlice2 := append(newSlice, "LAGI")
	fmt.Println(newSlice2) // [HALO DUNIA LAGI]
}

not enough arguments in call

package main
 
import "fmt"
 
func sayHelloTo(firstName string, lastName string) {
	fmt.Println("Halo,", firstName, lastName)
}
 
func main() {
	sayHelloTo("rahmat", "ardiansyah") // Halo, rahmat ardiansyah
	sayHelloTo("eko")                  // error
}
  • Code diatas error karena argument ke function sayHelloTo yang dikirim kurang

Solusinya hapus parameter atau menggunakan nilai default parameter

cannot use nil as

package main
 
import "fmt"
 
func sayHelloError(name string) string {
	if name == "" {
		return nil
	} else {
		return name
	}
}
 
func main() {
	fmt.Println(sayHelloError("Rahmat"))
}
➜ go run nil.go 
# command-line-arguments
./nil.go:7:10: cannot use nil as string value in return statement

Code diatas error karena nill hanya bisa digunakan di interface, function, map, slice, pointer dan channel.

panic: interface conversion

package main
 
import "fmt"
 
func random() any {
	return "OK"
}
 
func main() {
	var result any = random()
	var resultString string = result.(string)
 
	fmt.Println(resultString)
 
	var resultInt int = result.(int) // error
	fmt.Println(resultInt)
}
OK
panic: interface conversion: interface {} is string, not int
 
goroutine 1 [running]:
main.main()
        /home/rahmat/Documents/learn/go/dasar/type_assertion.go:15 +0x72
exit status 2

Kode diatas error karena kita mencoba mengubah any atau interface kosong menjadi tipe data yang tidak seharusnya(string)

Solusinya gunakan switch seperti kode dibawah ini:

package main
 
import "fmt"
 
func random() any {
	// return "OK"
	return 123
}
 
func main() {
	var result any = random()
 
	switch value := result.(type) {
	case string:
		fmt.Println("Mengubah menjadi string", value)
	case int:
		fmt.Println("Mengubah menjadi int", value)
	default:
		fmt.Println("Tidak diketahui", value)
	}
}