code: func (m *Messenger) ProfileByID(id int64, profileFields []string) (Profile, error) {
  	p := Profile{}
  	url := fmt.Sprintf("%v%v", ProfileURL, id)
  
  	req, err := http.NewRequest("GET", url, nil)
  	if err != nil {
  		return p, err
  	}
  
  	fields := strings.Join(profileFields, ",")
  
  	req.URL.RawQuery = "fields=" + fields + "&access_token=" + m.token
  
  	client := &http.Client{}
  	resp, err := client.Do(req)
  	if err != nil {
  		return p, err
  	}
  	defer resp.Body.Close()
  
  	content, err := ioutil.ReadAll(resp.Body)
  	if err != nil {
  		return p, err
  	}
  
  	err = json.Unmarshal(content, &p)
  	if err != nil {
  		return p, err
  	}
  
  	if p == *new(Profile) {
  		qr := QueryResponse{}
  		err = json.Unmarshal(content, &qr)
  		if qr.Error != nil {
  			err = fmt.Errorf("Facebook error : %s", qr.Error.Message)
  		}
  	}
  
  	return p, err
  }
docs: // ProfileByID retrieves the Facebook user profile associated with that ID.
  // According to the messenger docs: https://developers.facebook.com/docs/messenger-platform/identity/user-profile,
  // Developers must ask for access except for some fields that are accessible without permissions.
  //
  // At the time of writing (2019-01-04), these fields are
  // - Name
  // - First Name
  // - Last Name
  // - Profile Picture