change 'Extraction' of GetResult to 1 step
diff --git a/acceptance/openstack/blockstorage/v1/volumes_test.go b/acceptance/openstack/blockstorage/v1/volumes_test.go
index 0d773db..a8fadb7 100644
--- a/acceptance/openstack/blockstorage/v1/volumes_test.go
+++ b/acceptance/openstack/blockstorage/v1/volumes_test.go
@@ -69,12 +69,7 @@
 		return
 	}
 
-	gr, err := volumes.Get(client, cv.ID)
-	if err != nil {
-		t.Error(err)
-		return
-	}
-	v, err := volumes.ExtractVolume(gr)
+	v, err := volumes.Get(client, cv.ID).ExtractVolume()
 	if err != nil {
 		t.Error(err)
 		return
diff --git a/openstack/blockstorage/v1/volumes/requests.go b/openstack/blockstorage/v1/volumes/requests.go
index 74d4c6c..448ebd5 100644
--- a/openstack/blockstorage/v1/volumes/requests.go
+++ b/openstack/blockstorage/v1/volumes/requests.go
@@ -76,13 +76,14 @@
 	return pagination.NewPager(client, volumesURL(client), createPage)
 }
 
-func Get(client *gophercloud.ServiceClient, id string) (GetResult, error) {
+func Get(client *gophercloud.ServiceClient, id string) GetResult {
 	var gr GetResult
 	_, err := perigee.Request("GET", volumeURL(client, id), perigee.Options{
-		Results:     &gr,
+		Results:     &gr.r,
 		MoreHeaders: client.Provider.AuthenticatedHeaders(),
 	})
-	return gr, err
+	gr.err = err
+	return gr
 }
 
 type UpdateOpts struct {
diff --git a/openstack/blockstorage/v1/volumes/results.go b/openstack/blockstorage/v1/volumes/results.go
index ebf788e..14dc4c4 100644
--- a/openstack/blockstorage/v1/volumes/results.go
+++ b/openstack/blockstorage/v1/volumes/results.go
@@ -60,15 +60,22 @@
 	return response.Volumes, err
 }
 
-type GetResult map[string]interface{}
+type GetResult struct {
+	err error
+	r   map[string]interface{}
+}
 
 // ExtractVolume extracts and returns the Volume from a 'Get' request.
-func ExtractVolume(gr GetResult) (*Volume, error) {
+func (gr GetResult) ExtractVolume() (*Volume, error) {
+	if gr.err != nil {
+		return nil, gr.err
+	}
+
 	var response struct {
 		Volume *Volume `json:"volume"`
 	}
 
-	err := mapstructure.Decode(gr, &response)
+	err := mapstructure.Decode(gr.r, &response)
 	if err != nil {
 		return nil, fmt.Errorf("volumes: Error decoding volumes.GetResult: %v", err)
 	}