code: func (s *ServiceNode) IsSameService(other *ServiceNode) bool {
  	// Skip the following fields, see ServiceNode definition
  	// Address                  string
  	// Datacenter               string
  	// TaggedAddresses          map[string]string
  	// NodeMeta                 map[string]string
  	if s.ID != other.ID ||
  		s.Node != other.Node ||
  		s.ServiceKind != other.ServiceKind ||
  		s.ServiceID != other.ServiceID ||
  		s.ServiceName != other.ServiceName ||
  		!reflect.DeepEqual(s.ServiceTags, other.ServiceTags) ||
  		s.ServiceAddress != other.ServiceAddress ||
  		s.ServicePort != other.ServicePort ||
  		!reflect.DeepEqual(s.ServiceMeta, other.ServiceMeta) ||
  		!reflect.DeepEqual(s.ServiceWeights, other.ServiceWeights) ||
  		s.ServiceEnableTagOverride != other.ServiceEnableTagOverride ||
  		s.ServiceProxyDestination != other.ServiceProxyDestination ||
  		!reflect.DeepEqual(s.ServiceProxy, other.ServiceProxy) ||
  		!reflect.DeepEqual(s.ServiceConnect, other.ServiceConnect) {
  		return false
  	}
  
  	return true
  }
docs: // IsSameService checks if one Service of a ServiceNode is the same as another,
  // without looking at the Raft information or Node information (that's why we
  // didn't call it IsEqual).
  // This is useful for seeing if an update would be idempotent for all the functional
  // parts of the structure.
  // In a similar fashion as ToNodeService(), fields related to Node are ignored
  // see ServiceNode for more information.