github.com/Rookout/GoSDK@v0.1.48/pkg/services/instrumentation/binary_info/utils.go (about)

     1  // The MIT License (MIT)
     2  
     3  // Copyright (c) 2014 Derek Parker
     4  
     5  // Permission is hereby granted, free of charge, to any person obtaining a copy of
     6  // this software and associated documentation files (the "Software"), to deal in
     7  // the Software without restriction, including without limitation the rights to
     8  // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
     9  // the Software, and to permit persons to whom the Software is furnished to do so,
    10  // subject to the following conditions:
    11  
    12  // The above copyright notice and this permission notice shall be included in all
    13  // copies or substantial portions of the Software.
    14  
    15  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    16  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
    17  // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
    18  // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
    19  // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    20  // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    21  
    22  package binary_info
    23  
    24  import (
    25  	"fmt"
    26  	"runtime"
    27  )
    28  
    29  func uniq(s []string) []string {
    30  	if len(s) <= 0 {
    31  		return s
    32  	}
    33  	src, dst := 1, 1
    34  	for src < len(s) {
    35  		if s[src] != s[dst-1] {
    36  			s[dst] = s[src]
    37  			dst++
    38  		}
    39  		src++
    40  	}
    41  	return s[:dst]
    42  }
    43  
    44  
    45  func GoVersionAfterOrEqual(major int, minor int) bool {
    46  	var realMajor, realMinor int
    47  	n, err := fmt.Sscanf(runtime.Version(), "go%d.%d", &realMajor, &realMinor)
    48  	if err != nil || n != 2 {
    49  		return false
    50  	}
    51  
    52  	return realMajor > major || (realMajor == major && realMinor >= minor)
    53  }
    54  
    55  func complexType(typename string) bool {
    56  	for _, ch := range typename {
    57  		switch ch {
    58  		case '*', '[', '<', '{', '(', ' ':
    59  			return true
    60  		}
    61  	}
    62  	return false
    63  }