func (features *Features) Remove(featureID string, force bool) error {
	endpoint := fmt.Sprintf("%s/Remove", features.endpoint)
	client := NewHTTPClient(features.client)
	body := []byte(fmt.Sprintf(`{"featureId":"%s","force":%t}`, featureID, force))
	_, err := client.Post(endpoint, bytes.NewBuffer(body), features.config)
	return err
}
Remove deactivates a feature by its ID (GUID) in the parent container (Site or Web)
package api
import (
	"bytes"
	"encoding/json"
	"fmt"
	"github.com/koltyakov/gosip"
)
type Features struct {
	client   *gosip.SPClient
	config   *RequestConfig
	endpoint string
}
type FeatureInfo struct {
	DefinitionID string `json:"DefinitionId"`
}
func NewFeatures(client *gosip.SPClient, endpoint string, config *RequestConfig) *Features {
	return &Features{
		client:   client,
		endpoint: endpoint,
		config:   config,
	}
}
func (features *Features) Get() ([]*FeatureInfo, error) {
	client := NewHTTPClient(features.client)
	data, err := client.Get(features.endpoint, features.config)
	if err != nil {
		return nil, err
	}
	data, _ = NormalizeODataCollection(data)
	var res []*FeatureInfo
	if err := json.Unmarshal(data, &res); err != nil {
		return nil, err
	}
	return res, nil
}
func (features *Features) Add(featureID string, force bool) error {
	endpoint := fmt.Sprintf("%s/Add", features.endpoint)
	client := NewHTTPClient(features.client)
	body := []byte(fmt.Sprintf(`{"featdefScope":0,"featureId":"%s","force":%t}`, featureID, force))
	_, err := client.Post(endpoint, bytes.NewBuffer(body), features.config)
	return err
}