本节核心内容

  • 介绍项目的目录结构
  • 介绍包括文件读取、日志、mysql、路由、http、json数据处理等技术
  • 介绍自定义错误码
  • 通过实战代码演练创建一个基础的web项目

本小节视频教程和代码:百度网盘,密码z2ua

可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。

HTTP API 服务器启动流程

image

目录结构

在开发中,一个良好的目录结构是很重要的,好的目录结构不仅能使项目结构清晰,也能让后加入者快速了解项目,便于上手。

├── conf                         # 配置文件统一存放目录
│   ├── config.yaml              # 配置文件
├── config                       # 专门用来处理配置和配置文件的Go package
│   └── config.go                 
├── db.sql                       # 在部署新环境时,可以登录MySQL客户端,执行source db.sql创建数据库和表
├── handler                      # 类似MVC架构中的C,用来读取输入,并将处理流程转发给实际的处理函数,最后返回结果
│   ├── handler.go
│   ├── sd                       # 健康检查handler
│   │   └── check.go 
│   └── user                     # 核心:用户业务逻辑handler
│       ├── create.go            # 新增用户
│       └── user.go              # 存放用户handler公用的函数、结构体等
├── main.go                      # Go程序唯一入口
├── Makefile                     # Makefile文件,一般大型软件系统都是采用make来作为编译工具
├── model                        # 数据库相关的操作统一放在这里,包括数据库初始化和对表的增删改查
│   ├── init.go                  # 初始化和连接数据库
│   ├── model.go                 # 存放一些公用的go struct
│   └── user.go                  # 用户相关的数据库CURD操作
├── pkg                          # 引用的包
│   ├── constvar                 # 常量统一存放位置
│   │   └── constvar.go
│   ├── errno                    # 错误码存放位置
│   │   ├── code.go
│   │   └── errno.go
├── README.md                    # API目录README
├── router                       # 路由相关处理
│   ├── middleware               # API服务器用的是Gin Web框架,Gin中间件存放位置
│   │   ├── header.go
│   │   ├── logging.go
│   │   └── requestid.go
│   └── router.go                # 路由
├── service                      # 实际业务处理函数存放位置
│   └── service.go
├── util                         # 工具类函数存放目录
│   ├── util.go 
│   └── util_test.go
└── vendor                         # vendor目录用来管理依赖包├── github.com├── golang.org├── gopkg.in└── vendor.json

读取配置文件和配置日志对象

配置文件:

mysql:#最大空闲连接数max_idle_conns: 50#链接source_name: root:root@tcp(127.0.0.1:3306)/devops?parseTime=true&charset=utf8&loc=Local
addr: 127.0.0.1:8083                  # HTTP绑定端口

代码:

package configimport ("github.com/spf13/viper""time""os""log"
)// LogInfo 初始化日志配置
func LogInfo()   {file := "./" + time.Now().Format("2006-01-02") + ".log"logFile, _ := os.OpenFile(file,os.O_RDWR| os.O_CREATE| os.O_APPEND, 0766)log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)log.SetOutput(logFile)
}// Init 读取初始化配置文件
func Init() error {// 初始化配置文件if err := Config(); err != nil {return err}// 初始化日志包LogInfo()return nil
}// Config viper解析配置文件
func Config() error  {viper.AddConfigPath("conf")viper.SetConfigName("config")if err := viper.ReadInConfig(); err != nil {return err}return nil
}

配置Mysql

准备表数据

CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT '',`age` int(11) DEFAULT '0',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4

init初始化代码:

package modelimport ("database/sql""log"_ "github.com/go-sql-driver/mysql" //这个引用是必不可少的,因为需要调用driver.go文件里的init方法来提供一个数据库驱动程序"github.com/spf13/viper"
)var DB *sql.DB     //全局变量,这样可以在别处调用func Init() error {var err error//这行代码的作用就是初始化一个sql.DB对象DB ,err = sql.Open("mysql", viper.GetString("mysql.source_name"))if nil != err {return err}//设置最大超时时间DB.SetMaxIdleConns(viper.GetInt("mysql.max_idle_conns"))//建立链接err = DB.Ping()if nil != err{return err}else{log.Println("Mysql Startup Normal!")}return nil
}

model代码:

package modelimport ("log""fmt"
)//	Insert 插入操作
func Insert(sql string,args... interface{})(int64,error) {stmt, err := DB.Prepare(sql)defer stmt.Close()if err != nil{return 1,err}result, err := stmt.Exec(args...)if err != nil{return 1,err}id, err := result.LastInsertId()if err != nil{return 1,err}fmt.Printf("插入成功,ID为%v\n",id)return id,nil
}//	Delete 删除操作
func Delete(sql string,args... interface{})  {stmt, err := DB.Prepare(sql)defer stmt.Close()CheckErr(err, "SQL语句设置失败")result, err := stmt.Exec(args...)CheckErr(err, "参数添加失败")num, err := result.RowsAffected()CheckErr(err,"删除失败")fmt.Printf("删除成功,删除行数为%d\n",num)
}//	Update 修改操作
func Update(sql string,args... interface{})  {stmt, err := DB.Prepare(sql)defer stmt.Close()CheckErr(err, "SQL语句设置失败")result, err := stmt.Exec(args...)CheckErr(err, "参数添加失败")num, err := result.RowsAffected()CheckErr(err,"修改失败")fmt.Printf("修改成功,修改行数为%d\n",num)
}// CheckErr 用来校验error对象是否为空
func CheckErr(err error,msg string)  {if nil != err {log.Panicln(msg,err)}
}

准备数据库表和对应实体类对象

user.db数据:

/*
Navicat MySQL Data TransferSource Server         : localhost
Source Server Version : 50625
Source Host           : 127.0.0.1:3306
Source Database       : testTarget Server Type    : MYSQL
Target Server Version : 50625
File Encoding         : 65001Date: 2019-02-17 22:47:26
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`user_name` varchar(20) NOT NULL DEFAULT '',`password` varchar(20) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),KEY `id` (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'admin', '12164');

实体类:

type User struct {UserName 	string `json:"user_name"`Password 	string `json:"password"`
}

自定义错误码

error相关代码:

package errnoimport "fmt"type Errno struct {Code    intMessage string
}func (err Errno) Error() string {return err.Message
}// Err represents an error
type Err struct {Code    intMessage stringErr     error
}func New(errno *Errno, err error) *Err {return &Err{Code: errno.Code, Message: errno.Message, Err: err}
}func (err *Err) Add(message string) error {err.Message += " " + messagereturn err
}func (err *Err) Addf(format string, args ...interface{}) error {err.Message += " " + fmt.Sprintf(format, args...)return err
}func (err *Err) Error() string {return fmt.Sprintf("Err - code: %d, message: %s, error: %s", err.Code, err.Message, err.Err)
}func IsErrUserNotFound(err error) bool {code, _ := DecodeErr(err)return code == ErrUserNotFound.Code
}func DecodeErr(err error) (int, string) {if err == nil {return OK.Code, OK.Message}switch typed := err.(type) {case *Err:return typed.Code, typed.Messagecase *Errno:return typed.Code, typed.Messagedefault:}return InternalServerError.Code, err.Error()
}

定义code错误码:

package errnovar (// Common errorsOK                  = &Errno{Code: 0, Message: "OK"}InternalServerError = &Errno{Code: 10001, Message: "Internal server error"}ErrBind             = &Errno{Code: 10002, Message: "Error occurred while binding the request body to the struct."}ErrValidation = &Errno{Code: 20001, Message: "Validation failed."}ErrDatabase   = &Errno{Code: 20002, Message: "Database error."}// user errorsErrUserNotFound      = &Errno{Code: 20101, Message: "The user was not found."}ErrPasswordIncorrect = &Errno{Code: 20102, Message: "The password was incorrect."}
)

定义响应的handler

package handlerimport ("net/http""apiserver/pkg/errno""github.com/gin-gonic/gin"
)type Response struct {Code    int         `json:"code"`Message string      `json:"message"`Data    interface{} `json:"data"`
}func SendResponse(c *gin.Context, err error, data interface{}) {code, message := errno.DecodeErr(err)// always return http.StatusOKc.JSON(http.StatusOK, Response{Code:    code,Message: message,Data:    data,})
}

创建路由

使用中间件控制请求头:

middleware代码:

package middlewareimport ("net/http""time""github.com/gin-gonic/gin"
)// NoCache is a middleware function that appends headers
// to prevent the client from caching the HTTP response.
func NoCache(c *gin.Context) {c.Header("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate, value")c.Header("Expires", "Thu, 01 Jan 1970 00:00:00 GMT")c.Header("Last-Modified", time.Now().UTC().Format(http.TimeFormat))c.Next()
}// Options is a middleware function that appends headers
// for options requests and aborts then exits the middleware
// chain and ends the request.
func Options(c *gin.Context) {if c.Request.Method != "OPTIONS" {c.Next()} else {c.Header("Access-Control-Allow-Origin", "*")c.Header("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS")c.Header("Access-Control-Allow-Headers", "authorization, origin, content-type, accept")c.Header("Allow", "HEAD,GET,POST,PUT,PATCH,DELETE,OPTIONS")c.Header("Content-Type", "application/json")c.AbortWithStatus(200)}
}// Secure is a middleware function that appends security
// and resource access headers.
func Secure(c *gin.Context) {c.Header("Access-Control-Allow-Origin", "*")c.Header("X-Frame-Options", "DENY")c.Header("X-Content-Type-Options", "nosniff")c.Header("X-XSS-Protection", "1; mode=block")if c.Request.TLS != nil {c.Header("Strict-Transport-Security", "max-age=31536000")}// Also consider adding Content-Security-Policy headers// c.Header("Content-Security-Policy", "script-src 'self' https://cdnjs.cloudflare.com")
}

router代码:

package routerimport ("net/http""myapi/service""myapi/router/middleware""github.com/gin-gonic/gin"
)//InitRouter 初始化路由
func InitRouter(g *gin.Engine) {middlewares := []gin.HandlerFunc{}// Middlewares.g.Use(gin.Recovery())g.Use(middleware.NoCache)g.Use(middleware.Options)g.Use(middleware.Secure)g.Use(middlewares...)// 404 Handler.g.NoRoute(func(c *gin.Context) {c.String(http.StatusNotFound, "The incorrect API route.")})// The health check handlersrouter := g.Group("/user"){router.POST("/addUser", service.AddUser)					//添加用户router.POST("/selectUser", service.SelectUser)			//查询用户}}

处理路由

service层

package serviceimport ("github.com/gin-gonic/gin""myapi/model". "myapi/handler""myapi/pkg/error""fmt"
)func AddUser(c *gin.Context)  {var r model.Userif err := c.Bind(&r); err != nil {SendResponse(c, errno.ErrBind, nil)return}u := model.User{UserName: r.UserName,Password: r.Password,}// Validate the data.if err := u.Validate(); err != nil {SendResponse(c, errno.ErrValidation, nil)return}// Insert the user to the database.if _,err := u.Create(); err != nil {SendResponse(c, errno.ErrDatabase, nil)return}// Show the user information.SendResponse(c, nil, u)
}// SelectUser 查询用户
func SelectUser(c *gin.Context)  {name := c.Query("user_name")if name == ""{SendResponse(c, errno.ErrValidation, nil)return}var  user model.Userif err := user.SelectUserByName(name);nil != err {fmt.Println(err)SendResponse(c, errno.ErrUserNotFound, nil)return}// Validate the data.if err := user.Validate(); err != nil {SendResponse(c, errno.ErrUserNotFound, nil)return}SendResponse(c, nil, user)
}

数据库层

package modelimport ("errors""myapi/pkg/error""encoding/json""log"
)type User struct {UserName 	string `json:"user_name"`Password 	string `json:"password"`
}func (user *User)SelectUserByName(name string)error {stmt,err := DB.Prepare("SELECT user_name,password FROM user WHERE user_name=?")if err != nil {return err}defer stmt.Close()rows, err := stmt.Query(name)defer rows.Close()if err != nil {return err}// 数据处理for rows.Next() {rows.Scan( &user.UserName, &user.Password)}if err := rows.Err(); err != nil {return err}return nil
}// Validate the fields.
func (u *User) Validate() error {if u.UserName =="" || u.Password ==""{return errors.New(errno.ErrValidation.Message)}return nil
}
func (user *User) Create() (int64,error)  {id,err := Insert("INSERT INTO  user(user_name,password) values (?,?)", user.UserName, user.Password)if err != nil {return 1,err}return id,nil
}func (user *User)UserToJson()string  {jsonStr, err := json.Marshal(user)if err != nil {log.Println(err)}return string(jsonStr)
}func (user *User)JsonToUser(jsonBlob string)error  {err := json.Unmarshal([]byte(jsonBlob), &user)if err != nil {return err}return nil
}

main方法

package mainimport ("myapi/config""myapi/model""github.com/gin-gonic/gin""log""github.com/spf13/viper""myapi/router"
)func main() {if err := config.Init();err != nil {panic(err)}if err := model.Init();err != nil {panic(err)}//g := gin.Default()// Set gin mode.gin.SetMode(viper.GetString("runmode"))// Create the Gin engine.g := gin.New()router.InitRouter(g)log.Printf("Start to listening the incoming requests on http address: %s\n", viper.GetString("addr"))//log.Println(http.ListenAndServe(viper.GetString("addr"), g).Error())if err := g.Run(viper.GetString("addr"));err != nil {log.Fatal("ListenAndServe:", err)}}

Json格式处理

func (user *User)UserToJson()string  {jsonStr, err := json.Marshal(user)if err != nil {log.Println(err)}return string(jsonStr)
}func (user *User)JsonToUser(jsonBlob string)error  {err := json.Unmarshal([]byte(jsonBlob), &user)if err != nil {return err}return nil
}

小节

本小节主要通过结合之前讲过的知识点,将知识点串联起来,带领大家实现一个简单的项目,创建一个项目的步骤可大致分为下面几步:

  • 创建数据库表
  • 创建项目和目录结构
  • 读取配置文件和配置日志对象
  • 配置Mysql
  • 自定义错误码
  • 定义响应的handler层
  • 定义路由
  • 处理路由
    • service层
    • sql层
  • 一些数据格式的处理
    • 如结构体和Json的格式处理
  • main方法
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 【smarty模板引擎】smarty模板引擎教程

    我们知道PHP语言作为开源社区的一员,提供了各种模板引擎,如FastTemplate,Smarty,SimpleTemplate等,而Smarty是现在使用得比较多的PHP模板引擎,今天和大家分享在PHP开发中如何安装与使用Smarty,也算是对Smarty的入门学习。一、准备工作1、选择安装Smarty的目录如果拥有服…...

    2024/4/24 6:09:56
  2. Java调用本地方法又是怎么一回事

    JNIJNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少量汇编编写,在执行Java字节码时如果遇到有某个方法标明为Native的则从JVM中找到对应的C/C++函数,一般本地方法对…...

    2024/4/20 1:10:54
  3. android开发中continue,break、return的区别与使用

    一、continue :作用是跳过循环本中剩余的语句而强行执行下一次循环(即:不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环)。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。public class Test { public …...

    2024/4/13 13:45:39
  4. Smarty模板执行原理

    为了实现程序的业务逻辑和内容表现页面的分离从而提高开发速度,php 引入了模板引擎的概念,php 模板引擎里面最流行的可以说是smarty了,smarty因其功能强大而且速度快而被广大php web开发者所认可。本文将记录一下smarty模板引擎的工作执行原理,算是加深一下理解。其实所有的…...

    2024/5/7 17:28:58
  5. go语言-LiteIDE 安装及使用教程

    下载地址:https://www.golangtc.com/download/liteide然后解压第一个程序: hello vworldpackage mainimport ("fmt")func main() {fmt.Println("Hello World!")}写了一个 报错了找了错误:win64 :# native compiler windows amd64GOROOT=c:\go#GOBIN=GO…...

    2024/4/20 11:18:05
  6. Java中return的用法

    作用: (1)回方法指定类型的值(这个值总是确定的) (2)结束方法的执行(仅仅一个return语句)。 以下是无返回值的情况: public void test1() {System.out.println("-----无返回值类型的return语句测试--------");for (int i =1; ; i++) {if (i ==4)return;Syst…...

    2024/4/10 8:15:52
  7. Java的运行机制

    我们写的代码都是源代码(.java),源代码不能执行,必须要翻译成字节码文件(.class)编译:javac 文件名.java运行:java 字节码文件(class文件)首先java文件被编译成class文件后存在硬盘之中,当运行的时候,jvm在内存中创建了一个内存空间,通过cpu的调度,把硬盘中的cla…...

    2024/4/12 7:09:09
  8. oninput和onpropertychange测试

    输入框值改变时ie下可以用propertychange事件,其它浏览器都会触发input。oninput事件:a). 当脚本中改变value时,不会触发; b). 从浏览器的自动下拉提示中选取时,不会触发。onpropertychange事件:当input设置为disable=true后,onpropertychange不会触发。IE 有一个 onp…...

    2024/4/18 17:21:31
  9. smarty实例教程---程序设计部分

    smarty的程序设计部分: 在smarty的模板设计部分我简单的把smarty在模板中的一些常用设置做了简单的介绍,这一节主要来介绍一下如何在smarty中开始我们程 序设计。 PHP代码:-------------------------------------------------------------------------------- 首先来介绍一下…...

    2024/4/12 7:09:03
  10. javascript中return,return true,return false三者的用法及区别

    这篇文章主要介绍了javascript中return,return true,return false三者的用法及区别的相关资料,需要的朋友可以参考下1.语法及返回方式 ①返回控制与函数结果语法为:return 表达式;语句结果函数的执行,返回调用函数,而且把表达式的值作为函数结果返回出去 ②返回控制无函数结果…...

    2024/5/3 21:54:36
  11. smarty入门教程三-------Smarty引擎的工作原理

    1. Smarty的工作原理是: Smarty自带编译类,作用是将模版中的标签替换成PHP代码,每次检查PHP源码的修改时间,只有PHP修改了,才重新编译,所以Smarty的性能还可以。下面我们自己编写一个简单的编译类,实现替换模板中标签的功能,实现一个最小功能的Smarty模板,一次来理解…...

    2024/5/2 0:50:09
  12. js中return false,return,return true的用法及区别

    首先return作为返回关键字,他有以下两种返回方式 1.返回控制与函数结果 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 2.返回控制无函数结果 语法为:return;在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如…...

    2024/4/15 3:26:02
  13. [jvm解析系列][八]方法表集合,Code属性和Exceptions属性,你的字节码存在哪里了?

    根据我们第五章的总构图来看,这一章我们正该讲到方法表集合: 大家可能注意到在java中声明一个方法和声明一个变量很相似,public int a = 0;和public int a(){};于是在方法表集合中和字段表集合也很相似。 一个方法表的结构应当和下图一样:对比字段表应该发现几乎是一样的。…...

    2024/5/1 22:41:23
  14. JS监听输入框值变化兼容 onpropertychange、oninput

    onpropertychange 属IE oninput 属除IE外(Chrome、Firefox、SS)所以肯简单的办法嘛: 1. 一个input里面写两个属性事件 2.写在JS中判断浏览器添加监听事件<script type="text/javascript">function immediately() {element = document.getElementById("…...

    2024/4/15 23:11:11
  15. smarty下载及入门教程(转)

    smarty下载及入门教程(转) 2009-06-24 09:46smarty下载: Smarty 2.6.18 Source March 7th, 2007 Smarty 2.6.17 Source March 5th, 2007 Smarty 2.6.16 Source Dec 1st, 2006 Smarty 2.6.15 Source Nov 30th, 2006刚开始接触模版引擎的 PHP 设计师,听到 Smarty 时,都会觉…...

    2024/4/26 13:23:59
  16. go语言的学习之路(五)—— net/http学习

    ...

    2024/5/2 0:00:13
  17. C语言再学习 -- 关键字return和exit ()函数

    终于到了最后一个关键字 return 了。感觉时间过的飞快,转眼间又是一年,如果时间可以 return 就好了。一、return 介绍参看:C语言中return 用法1.含义: return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,返回值可以是一个常量,变量,或是表达式。2.作…...

    2024/5/2 3:22:00
  18. Go语言 Google资深工程师深度讲解

    1.扩充已有包:为结构定义的方法必须放在同一个包内,但是可以是不同的文件。定义别名:type S struct {B//类型B}使用组合type A struct {BC}2.常用接口fmt包的Stringer 以及io包的Reder Writer3.map的key不可以是slice map function float 或者含有这些类型的struct...

    2024/5/2 1:35:56
  19. python-函数-返回值(return)

    ...

    2024/4/26 2:56:56
  20. 面试笔试题库

    http://www.jobhere.net/mianshi/bishi/2287.shtml 软件测试面试题集(部分收集)http://www.jobhere.net/mianshi/bishi/2288.shtml J2EE经典面试题集(附答案) http://www.jobhere.net/mianshi/bishi/2289.shtml 分享130道ASP.NET面试题和答案[推 http://www.jobhere.net/…...

    2024/4/23 12:45:34

最新文章

  1. Actions和Mutations

    在Vuex中&#xff0c;actions和mutations都是用来改变store中的状态的方法&#xff0c;它们之间的区别如下&#xff1a; Mutations&#xff1a;用于同步地修改state的方法。它们接收state作为第一个参数&#xff0c;并且可以接收额外的参数作为payload。Mutations应该是纯函数&…...

    2024/5/7 23:52:03
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 【LeetCode热题100】【二叉树】二叉树的中序遍历

    题目链接&#xff1a;94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 中序遍历就是先遍历左子树再遍历根最后遍历右子树 class Solution { public:void traverse(TreeNode *root) {if (!root)return;traverse(root->left);ans.push_back(root->val);tra…...

    2024/5/5 8:39:08
  4. Python 潮流周刊#44:Mojo 本周开源了;AI 学会生成音乐了

    △△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…...

    2024/5/7 10:16:32
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57