Golang 未定义函数

标签 go

我有以下包 src/helpers 但是当我将它导入到不同的包中时,唯一导出的函数是 EmailValidator,而不是其他函数,所有这些都以 Mayus 开头,所以我不知道发生了什么。谢谢

package models

import (
    "helpers"
    ...
)

func FindByUsername(username *string) (*User, error) {
    if username == nil || len(*username) == 0 ||
            !helpers.UniqueNamesValidator(*username) {
            return nil, errors.New("Invalid Username")
    }
    ...
}

src/models/user.go:88: undefined: helpers.UniqueNamesValidator

但是

func FindByEmail(email *string) (*User, error) {
    if email == nil || len(*email) == 0 || !helpers.EmailValidator(*email) {
            return nil, errors.New("Invalid Email")
    }
 ...
 }

效果不错

这是源代码。

package helpers

import (
    "regexp"
)

const (
    email_key    = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*"
    email_domain = "@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
)

func EmailValidator(email string) bool {
    pattern := regexp.MustCompile(email_key + email_domain)
    return pattern.MatchString(email)
}

func UserNamesValidator(name string) bool {
    pattern := regexp.MustCompile(`\A([ña-zA-ZÑ]{3,16} {0,1}){1,3}\z`)
    return pattern.MatchString(name)
}

func UniqueNamesValidator(unique_name string) bool {
    pattern := regexp.MustCompile(`\A\w{4,10}\z`)
    return pattern.MatchString(unique_name)
}

func ProductNameValidator(p_name string) bool {
    pattern := regexp.MustCompile(`\A(\w|\s){4,30}\z`)
    return pattern.MatchString(p_name)
}

func TextOnlyValidator(text string) bool {
    pattern := regexp.MustCompile(`\A(\w+|\s)+\z`)
    return pattern.MatchString(text)
}

最佳答案

作为illustrated in this Makefile , 并确认 in the comments ,更好的定义是:

GOCMD=go 
GOBUILD=$(GOCMD) 
build all: $(GOBUILD) $(HELPERS_DIR) $(GOBUILD) $(MODELS_DIR)

关于Golang 未定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215149/

相关文章:

go - 为结构字段分配默认值

templates - 在 consul-template 的循环中覆盖变量

图像 blob 到 base64

json - 如何在不嵌入的情况下将 JSON 解码添加到外部库类型

go - Golang 中 main 函数的两个 .RUN() 函数

go - 用户空间程序(runc)是否调节 docker 容器进程的物理地址空间的大小?

go - 如何在编码(marshal)中省略结构的条件字段

go - 终止过程:消音和终止信号之间的区别

casting - Go:将 map[string]interface{} 转换为 map[string]string 的类型失败

arrays - 在golang中转储接口(interface)数组