Using extract and inline refactorings
With extract and inline refactorings, you can quickly clean up your code and make it more streamlined or explicit.
Extract a variable
Select and right-click the following code fragment:
&User{ ID: 1, Name: "Smith",}
.Navigate to
.Type u as a name for a new variable.
Code snippet
package main
import (
"errors"
"fmt"
"log"
)
type User struct {
ID int
Name string
}
func findUser(user string) (*User, error) {
if user != "smith" {
return nil, errors.New("user not found")
}
return &User{
ID: 1,
Name: "Smith",
}, nil
}
func main() {
user, err := findUser("smith")
if err != nil {
log.Fatalf("could not find user %s\n", "smith")
}
fmt.Printf("user found: %#v\n", user)
}
Extract methods
Select and right-click the following code fragment:
&User{ ID: 1, Name: "Smith",}
.Navigate to
.
Code snippet
package main
import "fmt"
type rect struct {
width, height int
}
func main() {
r := rect{width: 10, height: 5}
perim := 2*r.width + 2*r.height
area := r.width * r.height
fmt.Println("area: ", area)
fmt.Println("perim: ", perim)
}
Extract a constant
In the editor, select an expression or declaration of a variable you want to replace with a constant.
- Press Ctrl+Alt+C to introduce a constant or select
Select an expression you want to extract as constant and press Enter. Select the number of occurrences you want to replace and a name you want to use.
.
Code snippet
package main
import "fmt"
func plus(a int, b int) int {
return a + b
}
func plusPlus(a, b, c int) int {
return a + b + c
}
func main() {
res := plus(1, 2)
fmt.Println("1+2+3·=", res)
res = plusPlus(1, 2, 3)
fmt.Println("1+2+3·=", res)
}
Extract a function or a method
In the editor, select an expression or its part that you want to extract. You can also place the cursor within the expression, in this case GoLand offers you a list of potential code selections.
Press Ctrl+Alt+M or on the main menu, select
.Type a method name and press Enter.
Code snippet
package main
import "fmt"
type rect struct {
width, height int
}
func main() {
r := rect{width: 10, height: 5}
perim := 2*r.width + 2*r.height
area := r.width * r.height
fmt.Println("area: ", area)
fmt.Println("perim:", perim)
}