go - 如何从其他文件访问我的日志实例

标签 go dependencies

我最近开始学习 Go,当我决定将我的代码放在多个文件 (main.go) 中时,出现了一个问题。我经常需要的常用内容(如日志、缓存、配置、指标等)在其他文件中都不可用,即使它们属于同一个“package main”。我想根据配置(viper 包)中的数据配置一次我的日志实例(logrus 包)。而这仅仅是个开始,我很快就会有一个 DB 实例(?)、Cache 实例等。

解决我的问题的最好方法是什么,围棋的最佳实践是什么?如何遵循 DRY 原则?

如果我将我的初始日志设置放入“mylog”包中,然后将其导入到每个包的每个文件中,那么会有多少个 mylog 实例?每个文件/包/? ?有效率吗?

Log和Config也是相互依赖的。我需要记录配置错误,我需要配置来配置日志。

user@host:~/dev/go/src/helloworld$ go build && ./helloworld  
# helloworld
./cache.go:10: undefined: Log
./cache.go:17: undefined: Log

main.go:

package main

import (
    "fmt"
    "time"
    "os"
    "strconv"
    "strings"
    "github.com/julienschmidt/httprouter"
    "crypto/hmac"
    "crypto/sha256"
    // "github.com/gin-gonic/gin"
    "net"
    "net/http"
    Log "github.com/Sirupsen/logrus"
    // "io/ioutil"
    "encoding/json"
    "encoding/hex"
    "encoding/base64"
    "golang.org/x/crypto/bcrypt"
    "github.com/asaskevich/govalidator"
    "gopkg.in/gomail.v2-unstable"
    "github.com/spf13/viper"
)
.
.
.

缓存.go:

package main

import  (
    "github.com/bradfitz/gomemcache/memcache"
)

var conn = memcache.New("10.1.11.1:11211")

func Set(key string, value []byte, ttl int32) error {
    Log.Info("Cache: Set: key: " + key)
    err := conn.Set(&memcache.Item{Key: key, Value: value, Expiration: ttl})
    // fmt.Println(err)
    return err
}

最佳答案

您需要将您使用的包添加到使用该包的每个 文件的导入部分。所以在你的cache.go中,写

import  (
    "github.com/bradfitz/gomemcache/memcache"
    Log "github.com/Sirupsen/logrus"
    // List all packages mentioned in cache.go.
)

关于go - 如何从其他文件访问我的日志实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32115109/

相关文章:

amazon-web-services - 使用非默认 VPC (aws-sdk-go) 时无法调用 ec2.AuthorizeSecurityGroupIngressInput

go - 如何在cgo中初始化空的C.CString

go - Gopath已在个人资料中设置,但仍看不到Go版本

gradle - 如何为 Gradle 构建脚本依赖项生成 BOM

go - 无法将功能添加到接口(interface)

amazon-web-services - 在 Golang 中获取用于 AWS S3 图像上传的 S3_REGION

python-3.x - 捆绑第三方库以在 Python 3 中分发的最佳实践

docker - Tensorflow:docker镜像和-gpu后缀

java - 如何从 pom.xml 中提取所有依赖项?