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 …
package main
import "fmt"
func main() {
fmt.Println("halo world")
}package main
import "fmt"
func main() {
fmt.Println("halo world")
}$ go buildAkan 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 typeSolusinya 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 2Error 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
sayHelloToyang 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 statementCode 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 2Kode 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)
}
}