go not running program with name package_test.go

10,173

Solution 1

You can't name your program files as *_test.go as this is part of integrated Go testing system

To write a new test suite, create a file whose name ends _test.go that contains the TestXxx functions as described here. Put the file in the same package as the one being tested. The file will be excluded from regular package builds but will be included when the “go test” command is run. For more detail, run “go help test” and “go help testflag”.

Just rename package_test.go to packagetest.go

Solution 2

Not a bug, it's designed so. go run detects the _test files and consider them as test files for a package, test files will be compiled as a separate package, and then linked and run with the main test binary.
It's recommended to put your package file to GOPATH/src/PACK_NAME/, then run your *_test.go with go test.

Share:
10,173
shivams
Author by

shivams

SOreadytohelp I am amazed daily by how technology(especially computing) is solving our day to day problems so easily. This is what drives me to learn more and more about this field. I am system administrator by profession but like to do programming too. I am trying to improve daily and to be better personally and professionally. Stack exchange sites are really good for a person like me who is new in this industry and still exploring it. It helps me get familiar with new things and also keep amazing me. :)

Updated on July 17, 2022

Comments

  • shivams
    shivams almost 2 years

    I have following code under package pack1. Name of file is pack1.go

    package pack1
    
    var Pack1Int int = 42
    var pack1Float = 3.14
    
    func ReturnStr() string {
        return "Hello world!"
    }
    

    And following code in main program. Name of file is package_test.go

    package main
    
    import (
        "fmt"
        "./pack1"
    )
    
    func main() {
        var test1 string
        test1 = pack1.ReturnStr()
        fmt.Printf("Return string from pack1 : %s\n", test1)
        fmt.Printf("Integer from pack1 : %d\n", pack1.Pack1Int)
    }
    

    When I try to run it with command go run package_test.go I get following error:

    go run: cannot run *_test.go files (package_test.go)

    But if I rename file to abc.go then I am getting proper output i.e.

    Return string from pack1 : Hello world!
    Integer from pack1 : 42
    

    I am curious about what is wrong with using package_test.go as file name. For code with only main package this name is working fine.

    Is this a bug in Go or I am doing something wrong ?

  • shivams
    shivams over 8 years
    Can you please elaborate it a little ?
  • Jessica
    Jessica about 4 years
    This seems like a silly language feature, as it means you can't store _test.go files in the same directory as the rest of your go package. Unless I'm misunderstanding?