code: func (f *file) lintReceiverNames() {
  	typeReceiver := map[string]string{}
  	f.walk(func(n ast.Node) bool {
  		fn, ok := n.(*ast.FuncDecl)
  		if !ok || fn.Recv == nil || len(fn.Recv.List) == 0 {
  			return true
  		}
  		names := fn.Recv.List[0].Names
  		if len(names) < 1 {
  			return true
  		}
  		name := names[0].Name
  		const ref = styleGuideBase + "#receiver-names"
  		if name == "_" {
  			f.errorf(n, 1, link(ref), category("naming"), `receiver name should not be an underscore, omit the name if it is unused`)
  			return true
  		}
  		if name == "this" || name == "self" {
  			f.errorf(n, 1, link(ref), category("naming"), `receiver name should be a reflection of its identity; don't use generic names such as "this" or "self"`)
  			return true
  		}
  		recv := receiverType(fn)
  		if prev, ok := typeReceiver[recv]; ok && prev != name {
  			f.errorf(n, 1, link(ref), category("naming"), "receiver name %s should be consistent with previous receiver name %s for %s", name, prev, recv)
  			return true
  		}
  		typeReceiver[recv] = name
  		return true
  	})
  }
docs: // lintReceiverNames examines receiver names. It complains about inconsistent
  // names used for the same type and names such as "this".