本文整理汇总了Golang中github.com/almighty/almighty-core/log.Error函数的典型用法代码示例。如果您正苦于以下问题:Golang Error函数的具体用法?Golang Error怎么用?Golang Error使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Error函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Transactional
// Transactional executes the given function in a transaction. If todo returns an error, the transaction is rolled back
func Transactional(db DB, todo func(f Application) error) error {
var tx Transaction
var err error
if tx, err = db.BeginTransaction(); err != nil {
log.Error(nil, map[string]interface{}{
"err": err,
}, "database BeginTransaction failed!")
return errors.WithStack(err)
}
if err := todo(tx); err != nil {
log.Debug(nil, map[string]interface{}{
"pkg": "application",
}, "Rolling back the transaction...")
tx.Rollback()
log.Error(nil, map[string]interface{}{
"err": err,
}, "database transaction failed!")
return errors.WithStack(err)
}
log.Debug(nil, map[string]interface{}{
"pkg": "application",
}, "Commit the transaction!")
return tx.Commit()
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:31,代码来源:transaction.go
示例2: Delete
// Delete deletes the space with the given id
// returns NotFoundError or InternalError
func (r *GormRepository) Delete(ctx context.Context, ID satoriuuid.UUID) error {
if ID == satoriuuid.Nil {
log.Error(ctx, map[string]interface{}{
"spaceID": ID.String(),
}, "unable to find the space by ID")
return errors.NewNotFoundError("space", ID.String())
}
space := Space{ID: ID}
tx := r.db.Delete(space)
if err := tx.Error; err != nil {
log.Error(ctx, map[string]interface{}{
"spaceID": ID.String(),
}, "unable to delete the space")
return errors.NewInternalError(err.Error())
}
if tx.RowsAffected == 0 {
log.Error(ctx, map[string]interface{}{
"spaceID": ID.String(),
}, "none row was affected by the deletion operation")
return errors.NewNotFoundError("space", ID.String())
}
return nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:27,代码来源:space.go
示例3: Save
// Save updates the given iteration in the db. Version must be the same as the one in the stored version
// returns NotFoundError, VersionConflictError or InternalError
func (m *GormIterationRepository) Save(ctx context.Context, i Iteration) (*Iteration, error) {
itr := Iteration{}
tx := m.db.Where("id=?", i.ID).First(&itr)
if tx.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"iterationID": i.ID,
}, "iteration cannot be found")
// treating this as a not found error: the fact that we're using number internal is implementation detail
return nil, errors.NewNotFoundError("iteration", i.ID.String())
}
if err := tx.Error; err != nil {
log.Error(ctx, map[string]interface{}{
"iterationID": i.ID,
"err": err,
}, "unknown error happened when searching the iteration")
return nil, errors.NewInternalError(err.Error())
}
tx = tx.Save(&i)
if err := tx.Error; err != nil {
log.Error(ctx, map[string]interface{}{
"iterationID": i.ID,
"err": err,
}, "unable to save the iterations")
return nil, errors.NewInternalError(err.Error())
}
return &i, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:29,代码来源:iteration.go
示例4: Migrate
// Migrate executes the required migration of the database on startup.
// For each successful migration, an entry will be written into the "version"
// table, that states when a certain version was reached.
func Migrate(db *sql.DB) error {
var err error
if db == nil {
return errs.Errorf("Database handle is nil\n")
}
m := getMigrations()
var tx *sql.Tx
for nextVersion := int64(0); nextVersion < int64(len(m)) && err == nil; nextVersion++ {
tx, err = db.Begin()
if err != nil {
return errs.Errorf("Failed to start transaction: %s\n", err)
}
err = migrateToNextVersion(tx, &nextVersion, m)
if err != nil {
oldErr := err
log.Info(nil, map[string]interface{}{
"pkg": "migration",
"nextVersion": nextVersion,
"migrations": m,
"err": err,
}, "Rolling back transaction due to: ", err)
if err = tx.Rollback(); err != nil {
log.Error(nil, map[string]interface{}{
"nextVersion": nextVersion,
"migrations": m,
"err": err,
}, "error while rolling back transaction: ", err)
return errs.Errorf("Error while rolling back transaction: %s\n", err)
}
return oldErr
}
if err = tx.Commit(); err != nil {
log.Error(nil, map[string]interface{}{
"migrations": m,
"err": err,
}, "error during transaction commit: ", err)
return errs.Errorf("Error during transaction commit: %s\n", err)
}
}
if err != nil {
log.Error(nil, map[string]interface{}{
"migrations": m,
"err": err,
}, "migration failed with error: ", err)
return errs.Errorf("Migration failed with error: %s\n", err)
}
return nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:62,代码来源:migration.go
示例5: Save
// Save updates the given tracker in storage.
// returns NotFoundError, ConversionError or InternalError
func (r *GormTrackerRepository) Save(ctx context.Context, t app.Tracker) (*app.Tracker, error) {
res := Tracker{}
id, err := strconv.ParseUint(t.ID, 10, 64)
if err != nil || id == 0 {
return nil, NotFoundError{entity: "tracker", ID: t.ID}
}
log.Info(ctx, map[string]interface{}{
"pkg": "remoteworkitem",
"trackerID": id,
}, "Looking for a tracker repository with id ", id)
tx := r.db.First(&res, id)
if tx.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"trackerID": id,
}, "tracker repository not found")
return nil, NotFoundError{entity: "tracker", ID: t.ID}
}
_, present := RemoteWorkItemImplRegistry[t.Type]
// Ensure we support this remote tracker.
if present != true {
return nil, BadParameterError{parameter: "type", value: t.Type}
}
newT := Tracker{
ID: id,
URL: t.URL,
Type: t.Type}
if err := tx.Save(&newT).Error; err != nil {
log.Error(ctx, map[string]interface{}{
"trackerID": newT.ID,
"err": err,
}, "unable to save tracker repository")
return nil, InternalError{simpleError{err.Error()}}
}
log.Info(ctx, map[string]interface{}{
"pkg": "remoteworkitem",
"tracker": newT.ID,
}, "Tracker repository successfully updated")
t2 := app.Tracker{
ID: strconv.FormatUint(id, 10),
URL: t.URL,
Type: t.Type}
return &t2, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:53,代码来源:tracker_repository.go
示例6: Load
// Load returns the work item link type for the given ID.
// Returns NotFoundError, ConversionError or InternalError
func (r *GormWorkItemLinkTypeRepository) Load(ctx context.Context, ID string) (*app.WorkItemLinkTypeSingle, error) {
id, err := satoriuuid.FromString(ID)
if err != nil {
// treat as not found: clients don't know it must be a UUID
return nil, errors.NewNotFoundError("work item link type", ID)
}
log.Info(ctx, map[string]interface{}{
"pkg": "link",
"wiltID": ID,
}, "Loading work item link type")
res := WorkItemLinkType{}
db := r.db.Model(&res).Where("id=?", ID).First(&res)
if db.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"wiltID": ID,
}, "work item link type not found")
return nil, errors.NewNotFoundError("work item link type", id.String())
}
if db.Error != nil {
return nil, errors.NewInternalError(db.Error.Error())
}
// Convert the created link type entry into a JSONAPI response
result := ConvertLinkTypeFromModel(res)
return &result, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:28,代码来源:type_repository.go
示例7: Delete
// Delete deletes the work item link with the given id
// returns NotFoundError or InternalError
func (r *GormWorkItemLinkRepository) Delete(ctx context.Context, ID string) error {
id, err := satoriuuid.FromString(ID)
if err != nil {
// treat as not found: clients don't know it must be a UUID
return errors.NewNotFoundError("work item link", ID)
}
var link = WorkItemLink{
ID: id,
}
log.Info(ctx, map[string]interface{}{
"pkg": "link",
"wilID": ID,
}, "Deleting the work item link repository")
db := r.db.Delete(&link)
if db.Error != nil {
log.Error(ctx, map[string]interface{}{
"wilID": ID,
"err": db.Error,
}, "unable to delete work item link repository")
return errors.NewInternalError(db.Error.Error())
}
if db.RowsAffected == 0 {
return errors.NewNotFoundError("work item link", id.String())
}
return nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:29,代码来源:link_repository.go
示例8: Show
// Show returns the authorized user based on the provided Token
func (c *UserController) Show(ctx *app.ShowUserContext) error {
id, err := c.tokenManager.Locate(ctx)
if err != nil {
jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrBadRequest(err.Error()))
return ctx.BadRequest(jerrors)
}
return application.Transactional(c.db, func(appl application.Application) error {
identity, err := appl.Identities().Load(ctx, id)
if err != nil || identity == nil {
log.Error(ctx, map[string]interface{}{
"identityID": id,
}, "auth token containers id %s of unknown Identity", id)
jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrUnauthorized(fmt.Sprintf("Auth token contains id %s of unknown Identity\n", id)))
return ctx.Unauthorized(jerrors)
}
var user *account.User
userID := identity.UserID
if userID.Valid {
user, err = appl.Users().Load(ctx.Context, userID.UUID)
if err != nil {
return jsonapi.JSONErrorResponse(ctx, errors.Wrap(err, fmt.Sprintf("Can't load user with id %s", userID.UUID)))
}
}
return ctx.OK(ConvertUser(ctx.RequestData, identity, user))
})
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:30,代码来源:user.go
示例9: Load
// Load returns the tracker configuration for the given id
// returns NotFoundError, ConversionError or InternalError
func (r *GormTrackerRepository) Load(ctx context.Context, ID string) (*app.Tracker, error) {
id, err := strconv.ParseUint(ID, 10, 64)
if err != nil || id == 0 {
// treating this as a not found error: the fact that we're using number internal is implementation detail
return nil, NotFoundError{"tracker", ID}
}
log.Info(ctx, map[string]interface{}{
"pkg": "remoteworkitem",
"trackerID": id,
}, "Loading tracker repository...")
res := Tracker{}
tx := r.db.First(&res, id)
if tx.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"trackerID": ID,
}, "tracker repository not found")
return nil, NotFoundError{"tracker", ID}
}
if tx.Error != nil {
return nil, InternalError{simpleError{fmt.Sprintf("error while loading: %s", tx.Error.Error())}}
}
t := app.Tracker{
ID: strconv.FormatUint(res.ID, 10),
URL: res.URL,
Type: res.Type}
return &t, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:33,代码来源:tracker_repository.go
示例10: Load
// Load returns the tracker query for the given id
// returns NotFoundError, ConversionError or InternalError
func (r *GormTrackerQueryRepository) Load(ctx context.Context, ID string) (*app.TrackerQuery, error) {
id, err := strconv.ParseUint(ID, 10, 64)
if err != nil || id == 0 {
// treating this as a not found error: the fact that we're using number internal is implementation detail
return nil, NotFoundError{"tracker query", ID}
}
log.Info(ctx, map[string]interface{}{
"pkg": "remoteworkitem",
"trackerQueryid": id,
}, "Loading the tracker query")
res := TrackerQuery{}
if r.db.First(&res, id).RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"trackerID": id,
}, "tracker resource not found")
return nil, NotFoundError{"tracker query", ID}
}
tq := app.TrackerQuery{
ID: strconv.FormatUint(res.ID, 10),
Query: res.Query,
Schedule: res.Schedule,
TrackerID: strconv.FormatUint(res.TrackerID, 10)}
return &tq, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:29,代码来源:trackerquery_repository.go
示例11: LoadTypeFromDB
// LoadTypeFromDB return work item type for the given id
func (r *GormWorkItemTypeRepository) LoadTypeFromDB(ctx context.Context, name string) (*WorkItemType, error) {
log.Logger().Infoln("Loading work item type", name)
res, ok := cache.Get(name)
if !ok {
log.Info(ctx, map[string]interface{}{
"pkg": "workitem",
"type": name,
}, "Work item type doesn't exist in the cache. Loading from DB...")
res = WorkItemType{}
db := r.db.Model(&res).Where("name=?", name).First(&res)
if db.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"witName": name,
}, "work item type repository not found")
return nil, errors.NewNotFoundError("work item type", name)
}
if err := db.Error; err != nil {
return nil, errors.NewInternalError(err.Error())
}
cache.Put(res)
}
return &res, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:26,代码来源:workitemtype_repository.go
示例12: Save
// Save updates the given work item link in storage. Version must be the same as the one int the stored version.
// returns NotFoundError, VersionConflictError, ConversionError or InternalError
func (r *GormWorkItemLinkRepository) Save(ctx context.Context, lt app.WorkItemLinkSingle) (*app.WorkItemLinkSingle, error) {
res := WorkItemLink{}
if lt.Data.ID == nil {
return nil, errors.NewBadParameterError("work item link", nil)
}
db := r.db.Model(&res).Where("id=?", *lt.Data.ID).First(&res)
if db.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"wilID": *lt.Data.ID,
}, "work item link not found")
return nil, errors.NewNotFoundError("work item link", *lt.Data.ID)
}
if db.Error != nil {
log.Error(ctx, map[string]interface{}{
"wilID": *lt.Data.ID,
"err": db.Error,
}, "unable to find work item link")
return nil, errors.NewInternalError(db.Error.Error())
}
if lt.Data.Attributes.Version == nil || res.Version != *lt.Data.Attributes.Version {
return nil, errors.NewVersionConflictError("version conflict")
}
if err := ConvertLinkToModel(lt, &res); err != nil {
return nil, errs.WithStack(err)
}
res.Version = res.Version + 1
if err := r.ValidateCorrectSourceAndTargetType(ctx, res.SourceID, res.TargetID, res.LinkTypeID); err != nil {
return nil, errs.WithStack(err)
}
db = r.db.Save(&res)
if db.Error != nil {
log.Error(ctx, map[string]interface{}{
"wilID": res.ID,
"err": db.Error,
}, "unable to save work item link")
return nil, errors.NewInternalError(db.Error.Error())
}
log.Info(ctx, map[string]interface{}{
"pkg": "link",
"wilID": res.ID,
}, "Work item link updated")
result := ConvertLinkFromModel(res)
return &result, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:47,代码来源:link_repository.go
示例13: fetchTrackerQueries
func fetchTrackerQueries(db *gorm.DB) []trackerSchedule {
tsList := []trackerSchedule{}
err := db.Table("tracker_queries").Select("trackers.id as tracker_id, trackers.url, trackers.type as tracker_type, tracker_queries.query, tracker_queries.schedule").Joins("left join trackers on tracker_queries.tracker_id = trackers.id").Where("trackers.deleted_at is NULL AND tracker_queries.deleted_at is NULL").Scan(&tsList).Error
if err != nil {
log.Error(nil, map[string]interface{}{
"err": err,
}, "fetch operation failed for tracker queries")
}
return tsList
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:10,代码来源:scheduler.go
示例14: Generate
// Generate obtain the access token from Keycloak for the test user
func (c *LoginController) Generate(ctx *app.GenerateLoginContext) error {
if !configuration.IsPostgresDeveloperModeEnabled() {
log.Error(ctx, map[string]interface{}{
"method": "Generate",
}, "Postgres developer mode not enabled")
jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrUnauthorized("Postgres developer mode not enabled"))
return ctx.Unauthorized(jerrors)
}
var scopes []account.Identity
scopes = append(scopes, test.TestIdentity)
scopes = append(scopes, test.TestObserverIdentity)
client := &http.Client{Timeout: 10 * time.Second}
username := configuration.GetKeycloakTestUserName()
res, err := client.PostForm(configuration.GetKeycloakEndpointToken(), url.Values{
"client_id": {configuration.GetKeycloakClientID()},
"client_secret": {configuration.GetKeycloakSecret()},
"username": {username},
"password": {configuration.GetKeycloakTestUserSecret()},
"grant_type": {"password"},
})
if err != nil {
return jsonapi.JSONErrorResponse(ctx, errors.NewInternalError("error when obtaining token "+err.Error()))
}
token, err := readToken(res, ctx)
if err != nil {
log.Error(ctx, map[string]interface{}{
"tokenEndpoint": res,
"err": err,
}, "Error when unmarshal json with access token")
return jsonapi.JSONErrorResponse(ctx, e.Wrap(err, "Error when unmarshal json with access token"))
}
var tokens app.AuthTokenCollection
tokens = append(tokens, &app.AuthToken{Token: token})
// Creates the testuser user and identity if they don't yet exist
c.auth.CreateKeycloakUser(*token.AccessToken, ctx)
return ctx.OK(tokens)
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:44,代码来源:login.go
示例15: Create
// Create creates a new work item in the repository
// returns BadParameterError, ConversionError or InternalError
func (r *GormWorkItemTypeRepository) Create(ctx context.Context, extendedTypeName *string, name string, fields map[string]app.FieldDefinition) (*app.WorkItemType, error) {
existing, _ := r.LoadTypeFromDB(ctx, name)
if existing != nil {
log.Error(ctx, map[string]interface{}{"witName": name}, "unable to create new work item type")
return nil, errors.NewBadParameterError("name", name)
}
allFields := map[string]FieldDefinition{}
path := name
if extendedTypeName != nil {
extendedType := WorkItemType{}
db := r.db.First(&extendedType, "name = ?", extendedTypeName)
if db.RecordNotFound() {
return nil, errors.NewBadParameterError("extendedTypeName", *extendedTypeName)
}
if err := db.Error; err != nil {
return nil, errors.NewInternalError(err.Error())
}
// copy fields from extended type
for key, value := range extendedType.Fields {
allFields[key] = value
}
path = extendedType.Path + pathSep + name
}
// now process new fields, checking whether they are ok to add.
for field, definition := range fields {
existing, exists := allFields[field]
ct, err := convertFieldTypeToModels(*definition.Type)
if err != nil {
return nil, errs.WithStack(err)
}
converted := FieldDefinition{
Required: definition.Required,
Type: ct,
}
if exists && !compatibleFields(existing, converted) {
return nil, fmt.Errorf("incompatible change for field %s", field)
}
allFields[field] = converted
}
created := WorkItemType{
Version: 0,
Name: name,
Path: path,
Fields: allFields,
}
if err := r.db.Save(&created).Error; err != nil {
return nil, errors.NewInternalError(err.Error())
}
result := convertTypeFromModels(&created)
return &result, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:57,代码来源:workitemtype_repository.go
示例16: Load
// Load a single Iteration regardless of parent
func (m *GormIterationRepository) Load(ctx context.Context, id uuid.UUID) (*Iteration, error) {
defer goa.MeasureSince([]string{"goa", "db", "iteration", "get"}, time.Now())
var obj Iteration
tx := m.db.Where("id = ?", id).First(&obj)
if tx.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"iterationID": id.String(),
}, "iteration cannot be found")
return nil, errors.NewNotFoundError("Iteration", id.String())
}
if tx.Error != nil {
log.Error(ctx, map[string]interface{}{
"iterationID": id.String(),
"err": tx.Error,
}, "unable to load the iteration")
return nil, errors.NewInternalError(tx.Error.Error())
}
return &obj, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:21,代码来源:iteration.go
示例17: CanStartIteration
// CanStartIteration checks the rule - Only one iteration from a space can have state=start at a time.
// More rules can be added as needed in this function
func (m *GormIterationRepository) CanStartIteration(ctx context.Context, i *Iteration) (bool, error) {
var count int64
m.db.Model(&Iteration{}).Where("space_id=? and state=?", i.SpaceID, IterationStateStart).Count(&count)
if count != 0 {
log.Error(ctx, map[string]interface{}{
"iterationID": i.ID,
"spaceID": i.SpaceID,
}, "one iteration from given space is already running!")
return false, errors.NewBadParameterError("state", "One iteration from given space is already running")
}
return true, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:14,代码来源:iteration.go
示例18: Save
// Save a single comment
func (m *GormCommentRepository) Save(ctx context.Context, comment *Comment) (*Comment, error) {
c := Comment{}
tx := m.db.Where("id=?", comment.ID).First(&c)
if tx.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"commentID": comment.ID,
}, "comment not found!")
// treating this as a not found error: the fact that we're using number internal is implementation detail
return nil, errors.NewNotFoundError("comment", comment.ID.String())
}
if err := tx.Error; err != nil {
log.Error(ctx, map[string]interface{}{
"commentID": comment.ID,
"err": err,
}, "comment search operation failed!")
return nil, errors.NewInternalError(err.Error())
}
// make sure no comment is created with an empty 'markup' value
if comment.Markup == "" {
comment.Markup = rendering.SystemMarkupDefault
}
tx = tx.Save(comment)
if err := tx.Error; err != nil {
log.Error(ctx, map[string]interface{}{
"commentID": comment.ID,
"err": err,
}, "unable to save the comment!")
return nil, errors.NewInternalError(err.Error())
}
log.Debug(ctx, map[string]interface{}{
"pkg": "comment",
"commentID": comment.ID,
}, "Comment updated!")
return comment, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:40,代码来源:comment.go
示例19: Load
// Load a single comment regardless of parent
func (m *GormCommentRepository) Load(ctx context.Context, id uuid.UUID) (*Comment, error) {
defer goa.MeasureSince([]string{"goa", "db", "comment", "get"}, time.Now())
var obj Comment
tx := m.db.Where("id=?", id).First(&obj)
if tx.RecordNotFound() {
log.Error(ctx, map[string]interface{}{
"commentID": id.String(),
}, "comment search operation failed!")
return nil, errors.NewNotFoundError("comment", id.String())
}
if tx.Error != nil {
log.Error(ctx, map[string]interface{}{
"commentID": id.String(),
"err": tx.Error,
}, "unable to load the comment")
return nil, errors.NewInternalError(tx.Error.Error())
}
return &obj, nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:23,代码来源:comment.go
示例20: ContextIdentity
// ContextIdentity returns the identity's ID found in given context
// Uses tokenManager.Locate to fetch the identity of currently logged in user
func ContextIdentity(ctx context.Context) (string, error) {
tm := ReadTokenManagerFromContext(ctx)
if tm == nil {
log.Error(ctx, map[string]interface{}{
"token": tm,
}, "missing token manager")
return "", errs.New("Missing token manager")
}
uuid, err := tm.Locate(ctx)
if err != nil {
// TODO : need a way to define user as Guest
log.Error(ctx, map[string]interface{}{
"uuid": uuid,
"tm": tm,
"err": err,
}, "identity belongs to a Guest User")
return "", errs.WithStack(err)
}
return uuid.String(), nil
}
开发者ID:Ritsyy,项目名称:almighty-core,代码行数:24,代码来源:service.go
注:本文中的github.com/almighty/almighty-core/log.Error函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论