var bSlashSlash … var bStarSlash … var bSlashStar … var bPlusBuild … var goBuildComment … var errMultipleGoBuild … func isGoBuildComment(line []byte) bool { … } // ShouldBuild reports whether it is okay to use this file, // The rule is that in the file's leading run of // comments // and blank lines, which must be followed by a blank line // (to avoid including a Go package clause doc comment), // lines beginning with '// +build' are taken as build directives. // // The file is accepted only if each such line lists something // matching the file. For example: // // // +build windows linux // // marks the file as applicable only on Windows and Linux. // // If tags["*"] is true, then ShouldBuild will consider every // build tag except "ignore" to be both true and false for // the purpose of satisfying build tags, in order to estimate // (conservatively) whether a file could ever possibly be used // in any build. func ShouldBuild(content []byte, tags map[string]bool) bool { … } func parseFileHeader(content []byte) (trimmed, goBuild []byte, sawBinaryOnly bool, err error) { … } // matchTag reports whether the tag name is valid and tags[name] is true. // As a special case, if tags["*"] is true and name is not empty or ignore, // then matchTag will return prefer instead of the actual answer, // which allows the caller to pretend in that case that most tags are // both true and false. func matchTag(name string, tags map[string]bool, prefer bool) bool { … } // eval is like // // x.Eval(func(tag string) bool { return matchTag(tag, tags) }) // // except that it implements the special case for tags["*"] meaning // all tags are both true and false at the same time. func eval(x constraint.Expr, tags map[string]bool, prefer bool) bool { … } // Eval is like // // x.Eval(func(tag string) bool { return matchTag(tag, tags) }) // // except that it implements the special case for tags["*"] meaning // all tags are both true and false at the same time. func Eval(x constraint.Expr, tags map[string]bool, prefer bool) bool { … } // MatchFile returns false if the name contains a $GOOS or $GOARCH // suffix which does not match the current system. // The recognized name formats are: // // name_$(GOOS).* // name_$(GOARCH).* // name_$(GOOS)_$(GOARCH).* // name_$(GOOS)_test.* // name_$(GOARCH)_test.* // name_$(GOOS)_$(GOARCH)_test.* // // Exceptions: // // if GOOS=android, then files with GOOS=linux are also matched. // if GOOS=illumos, then files with GOOS=solaris are also matched. // if GOOS=ios, then files with GOOS=darwin are also matched. // // If tags["*"] is true, then MatchFile will consider all possible // GOOS and GOARCH to be available and will consequently // always return true. func MatchFile(name string, tags map[string]bool) bool { … }