Error with golang "undefined (type string has no field or method)"

14,992

In main, your variable name hash contains a long string. So it shadows the package name hash. You should rename one or the other.

Share:
14,992
lab0
Author by

lab0

Updated on June 09, 2022

Comments

  • lab0
    lab0 almost 2 years

    i use this library golang.org/x/crypto/bcrypt to hash password and compare hash with password but I having problem see below:

    main.go file

    package main
    
    import (
            "./hash"
    )
    
    func main() {
            password := "passwd"
            hash := "hhhhhhhhaaaaaaaaaassssssssssshhhhhhhhhhh"
    
            check := hash.CheckPasswordHash(password, hash)
    }
    

    hash/hash.go file

    package hash
    
    import "golang.org/x/crypto/bcrypt"
    
    func HashPassword(password string) (string, error) {
            bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
    
            return string(bytes), err
    }
    
    func CheckPasswordHash(password, hash string) bool {
            err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
    
            return err == nil
    }
    

    if you run this:

    $ go run main.go
    

    It will show this error:

    ./main.go:11:15: hash.CheckPasswordHash undefined (type string has no field or method CheckPasswordHash)

    why this error?