Home >Backend Development >Golang >Why Do I Get Errors When Calling Methods on Interface Pointers in Go?
When working with the Gorp library for database access, which offers both a DbMap type and a Transaction type, you may encounter the need to call methods on interface pointers. This can arise when you need to perform a rollback while using a transaction.
To resolve the issue encountered in the code sample, it's important to understand that passing a pointer to an interface is unnecessary in Go. Unlike other languages, Go does not use call by reference. Instead, passing a pointer is only required when you need to modify the original value within the function, which is not typically the case for interface values.
The problem возникает because the Get method of the gorp.SqlExecutor interface takes a pointer value as its first parameter. However, your repository struct attempts to assign a non-pointer value (*gorp.SqlExecutor) to this parameter, causing the error message.
The correct way to resolve this issue is to use the pointer to the interface value directly in the method call. Here's the corrected code:
package repositories import ( "github.com/coopernurse/gorp" ) type Repository struct { Gorp gorp.SqlExecutor } func (r *Repository) GetById(i interface{}, key interface{}) interface{} { obj, err := r.Gorp.Get(i, key) if err != nil { panic(err) } return obj }
By using the pointer to the interface directly, you allow the Get method to modify the original value, which is necessary for rolling back transactions.
The above is the detailed content of Why Do I Get Errors When Calling Methods on Interface Pointers in Go?. For more information, please follow other related articles on the PHP Chinese website!