青少年编程与数学 02-004 Go语言Web编程 14课题、数据操作

青少年编程与数学 02-004 Go语言Web编程 14课题、数据操作

  • 一、数据操作
  • 二、CRUD
      • 说明:
  • 三、数据验证
      • 为什么需要数据验证?
      • Go Web应用中的数据验证示例
        • 步骤 1: 定义订单结构体
        • 步骤 2: 实现验证逻辑
        • 步骤 3: 在HTTP处理函数中使用验证
  • 四、数据格式化
      • 什么是数据格式化?
      • 为什么需要数据格式化?
      • GoWeb应用如何将查询结果格式化为JSON数据格式?
        • 步骤 1: 执行数据库查询
        • 步骤 2: 编写HTTP处理函数
        • 步骤 3: 启动HTTP服务器
  • 五、数据聚合
      • 什么是数据聚合?
      • Go Web应用如何对数据进行聚合?
        • 步骤 1: 定义数据库查询
        • 步骤 2: 编写Go代码进行聚合
  • 六、数据分页
      • 什么是数据分页?
      • Go Web应用如何对数据进行分页?
        • 步骤 1: 编写分页查询函数
        • 步骤 2: 编写HTTP处理函数
        • 步骤 3: 启动HTTP服务器
  • 七、重要性

课题摘要:本文探讨了Go Web应用中的数据操作方法,包括CRUD操作、数据验证、格式化、聚合和分页等。CRUD涵盖了数据的创建、读取、更新和删除,是数据处理的基础。数据验证确保输入符合预期格式和业务规则,而数据格式化则涉及将数据转换为特定格式如JSON。数据聚合通过对数据集进行求和、平均等操作提取高层次信息,而分页技术则提高大数据集的可管理性和性能。文章还强调了数据操作在应用程序设计中的重要性,包括数据管理、业务逻辑实现、用户体验提升、数据一致性和安全性保障等方面。通过这些方法,Go Web应用能高效、安全地处理数据,满足业务需求。


一、数据操作

在Go Web应用中,数据操作是核心功能之一,涉及到从数据库的增删改查(CRUD)到数据的格式化、验证和传输。以下是一些常见的数据操作:

  1. CRUD操作

    • 创建(Create):向数据库中插入新数据。通常涉及到接收用户输入的数据,验证数据的有效性,然后执行数据库插入操作。

    • 读取(Read):从数据库中检索数据。可以是单个记录的查询(GET)或多个记录的查询(MULTIGET)。

    • 更新(Update):修改数据库中已存在的数据。通常需要先检索数据,然后根据用户输入进行更新。

    • 删除(Delete):从数据库中删除数据。通常需要根据特定的标识符(如ID)来定位并删除记录。

  2. 数据验证

    • 在处理用户输入之前,验证数据的有效性是非常重要的一步,以确保数据符合预期的格式和约束。
  3. 数据格式化

    • 将数据转换为适合传输的格式,如JSON或XML,以便在Web应用和客户端之间交换。
  4. 数据查询

    • 构建查询以从数据库检索信息,可能涉及到复杂的查询逻辑和优化。
  5. 数据聚合

    • 对数据库中的数据进行汇总和分析,以提供报告或仪表板数据。
  6. 数据分页

    • 在处理大量数据时,为了提高性能和用户体验,常常需要实现数据分页。
  7. 文件上传和下载

    • 处理文件的上传和下载,包括文件的存储、检索和传输。
  8. 数据缓存

    • 为了提高性能,可能会对频繁访问的数据进行缓存。
  9. 数据同步

    • 在多服务或多数据库的环境中,保持数据的一致性和同步。
  10. 错误处理

    • 在数据操作过程中,处理可能出现的各种错误和异常情况。

这些操作通常涉及到与数据库的交互,如MySQL、PostgreSQL、MongoDB等,以及使用Go语言提供的数据库驱动和ORM(对象关系映射)工具。通过这些工具和库,Go Web应用可以高效地处理数据,提供动态的Web服务。

二、CRUD

当然,下面是添加了详细注释的Go Web应用示例代码,实现了对订单数据的CRUD操作:

package mainimport ("database/sql""encoding/json""fmt""log""net/http""strconv"_ "github.com/go-sql-driver/mysql" // 导入MySQL驱动
)// 数据库配置常量
const (userName = "your_username" // 数据库用户名password = "your_password" // 数据库密码ip       = "localhost"     // 数据库地址port     = "3306"         // 数据库端口dbName   = "your_dbname"  // 数据库名
)// DB 是数据库连接的全局变量
var DB *sql.DB// Order 定义订单结构体,对应数据库中的表结构
type Order struct {OrderNum  int    `json:"order_num"`  // 订单编号OrderDate string `json:"order_date"` // 订单日期CustID    int    `json:"cust_id"`    // 客户ID
}// initDB 初始化数据库连接
func initDB() {var err error// 构建数据库连接字符串DB, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", userName, password, ip, port, dbName))if err != nil {log.Fatal(err) // 如果连接失败,记录错误并退出}if err = DB.Ping(); err != nil {log.Fatal(err) // 测试连接是否成功,失败则退出}
}// init 在程序启动时调用,用于初始化数据库连接
func init() {initDB()
}// handleGet 处理GET请求,用于查询单个订单
func handleGet(w http.ResponseWriter, r *http.Request) {idStr := r.URL.Path[len("/order/"):] // 从URL路径中获取订单IDid, err := strconv.Atoi(idStr)      // 将ID转换为整数if err != nil {http.Error(w, "Invalid ID", http.StatusBadRequest) // 如果ID无效,返回400错误return}order := Order{} // 创建订单结构体实例// 查询订单数据err = DB.QueryRow("SELECT order_num, order_date, cust_id FROM orders WHERE order_num = ?", id).Scan(&order.OrderNum, &order.OrderDate, &order.CustID)if err != nil {http.Error(w, "Order not found", http.StatusNotFound) // 如果订单不存在,返回404错误return}w.Header().Set("Content-Type", "application/json") // 设置响应头为JSONjson.NewEncoder(w).Encode(order)                   // 将订单数据编码为JSON并返回
}// handleInsert 处理POST请求,用于创建新订单
func handleInsert(w http.ResponseWriter, r *http.Request) {decoder := json.NewDecoder(r.Body) // 创建JSON解码器var order Order                   // 创建订单结构体实例err := decoder.Decode(&order)      // 解码请求体到订单结构体if err != nil {http.Error(w, "Invalid request payload", http.StatusBadRequest) // 如果请求体无效,返回400错误return}// 插入订单数据到数据库result, err := DB.Exec("INSERT INTO orders (order_date, cust_id) VALUES (?, ?)", order.OrderDate, order.CustID)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError) // 如果插入失败,返回500错误return}w.Header().Set("Content-Type", "application/json") // 设置响应头为JSONorder.OrderNum, _ = result.LastInsertId()        // 获取新插入订单的IDjson.NewEncoder(w).Encode(order)                  // 将订单数据编码为JSON并返回
}// handleDelete 处理DELETE请求,用于删除订单
func handleDelete(w http.ResponseWriter, r *http.Request) {idStr := r.URL.Path[len("/order/"):] // 从URL路径中获取订单IDid, err := strconv.Atoi(idStr)      // 将ID转换为整数if err != nil {http.Error(w, "Invalid ID", http.StatusBadRequest) // 如果ID无效,返回400错误return}// 从数据库中删除订单_, err = DB.Exec("DELETE FROM orders WHERE order_num = ?", id)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError) // 如果删除失败,返回500错误return}w.WriteHeader(http.StatusOK) // 设置响应状态码为200
}func main() {// 注册路由处理函数http.HandleFunc("/order/", handleGet)http.HandleFunc("/order/", handleInsert)http.HandleFunc("/order/", handleDelete)log.Println("Server starting on port 8080") // 打印启动日志err := http.ListenAndServe(":8080", nil)    // 启动HTTP服务器if err != nil {log.Fatal(err) // 如果启动失败,记录错误并退出}
}

说明:

  • initDB:这个函数负责建立数据库连接,并在连接失败时终止程序。
  • handleGet:这个函数处理GET请求,用于根据ID查询单个订单。它从URL中提取订单ID,查询数据库,并返回订单的JSON表示。
  • handleInsert:这个函数处理POST请求,用于创建新订单。它从请求体中读取订单数据,插入到数据库,并返回新创建的订单的JSON表示。
  • handleDelete:这个函数处理DELETE请求,用于根据ID删除订单。它从URL中提取订单ID,并从数据库中删除对应的订单。

要运行这个应用,请确保你的MySQL数据库已经设置好,并且替换代码中的数据库配置信息。然后,使用go run main.go命令启动服务器,并使用HTTP客户端测试API。

三、数据验证

数据验证是确保输入数据符合特定格式、标准或业务规则的过程。在Web应用中,数据验证是至关重要的,因为它有助于防止无效数据、错误数据或恶意数据进入系统,从而保护系统安全和数据完整性。

为什么需要数据验证?

  1. 防止错误:确保用户输入的数据是正确的,避免因数据错误导致的程序错误。
  2. 增强安全性:防止SQL注入、跨站脚本(XSS)等安全攻击。
  3. 提高数据质量:确保存储在数据库中的数据是准确和有用的。
  4. 用户体验:给用户提供即时反馈,提升用户体验。

Go Web应用中的数据验证示例

假设我们有一个Go Web应用,用户可以提交订单信息,包括订单日期和客户ID。我们需要验证订单日期是否是有效的日期格式,以及客户ID是否是一个正整数。

步骤 1: 定义订单结构体
package mainimport ("encoding/json""net/http""regexp""time"
)// Order 定义订单结构体
type Order struct {OrderDate string `json:"order_date"`CustID    int    `json:"cust_id"`
}
步骤 2: 实现验证逻辑
// ValidateOrder 验证订单信息
func ValidateOrder(order *Order) error {// 验证客户ID是否为正整数if order.CustID <= 0 {return errors.New("cust_id must be a positive integer")}// 验证订单日期是否符合YYYY-MM-DD格式// 正则表达式匹配日期格式datePattern := `^(?:19|20)\d{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$`if !regexp.MustCompile(datePattern).MatchString(order.OrderDate) {return errors.New("order_date must be in YYYY-MM-DD format")}// 尝试解析日期,确保它是有效的日期_, err := time.Parse("2006-01-02", order.OrderDate)if err != nil {return errors.New("order_date is not a valid date")}return nil
}
步骤 3: 在HTTP处理函数中使用验证
func submitOrderHandler(w http.ResponseWriter, r *http.Request) {// 只接受JSON格式的请求体r.Header.Set("Content-Type", "application/json")// 解析请求体中的JSON数据var order Orderif err := json.NewDecoder(r.Body).Decode(&order); err != nil {http.Error(w, "Invalid request body", http.StatusBadRequest)return}// 验证订单信息if err := ValidateOrder(&order); err != nil {http.Error(w, err.Error(), http.StatusBadRequest)return}// 如果验证通过,处理订单数据(例如,存储到数据库)// ...// 返回成功响应w.WriteHeader(http.StatusOK)w.Write([]byte("Order submitted successfully"))
}func main() {http.HandleFunc("/submit-order", submitOrderHandler)http.ListenAndServe(":8080", nil)
}

在这个示例中,我们定义了一个Order结构体来表示订单信息,并实现了一个ValidateOrder函数来验证订单日期和客户ID。在HTTP处理函数submitOrderHandler中,我们首先解析请求体中的JSON数据,然后调用ValidateOrder函数进行验证。如果验证失败,我们返回一个错误响应;如果验证成功,我们继续处理订单数据。

这个简单的示例展示了如何在Go Web应用中进行数据验证,以确保接收到的数据是有效和安全的。

四、数据格式化

什么是数据格式化?

数据格式化是指将数据转换成特定格式的过程。在编程和数据处理中,这通常涉及到将数据结构转换为可读性强、结构化的文本格式,比如JSON、XML或CSV。格式化的数据可以被人类阅读或由其他系统和应用程序处理。

为什么需要数据格式化?

  1. 可读性:格式化的数据更易于人类阅读和理解。
  2. 交换:格式化的数据可以在网络上传输,作为不同系统间的数据交换格式。
  3. 存储:格式化的数据可以被存储和检索,用于持久化存储。
  4. 标准化:使用标准化的格式(如JSON或XML)可以简化不同系统间的集成。

GoWeb应用如何将查询结果格式化为JSON数据格式?

在Go语言中,标准库encoding/json提供了将Go数据结构编码为JSON格式的工具。以下是一个简单的示例,展示了如何将从数据库查询得到的结果格式化为JSON数据格式。

步骤 1: 执行数据库查询

首先,我们需要从数据库中查询数据。这里假设我们已经有一个数据库连接DB和一个Order结构体。

package mainimport ("database/sql""encoding/json""log""net/http"_ "github.com/go-sql-driver/mysql"
)// Order 定义订单结构体
type Order struct {OrderNum  int    `json:"order_num"`OrderDate string `json:"order_date"`CustID    int    `json:"cust_id"`
}// QueryOrder 查询单个订单
func QueryOrder(db *sql.DB, orderNum int) (*Order, error) {var order Ordererr := db.QueryRow("SELECT order_num, order_date, cust_id FROM orders WHERE order_num = ?", orderNum).Scan(&order.OrderNum, &order.OrderDate, &order.CustID)if err != nil {return nil, err}return &order, nil
}
步骤 2: 编写HTTP处理函数

编写一个HTTP处理函数,用于处理请求并返回查询结果的JSON格式。

func getOrderHandler(w http.ResponseWriter, r *http.Request) {// 解析URL参数中的订单编号orderNumStr := r.URL.Query().Get("order_num")if orderNumStr == "" {http.Error(w, "Order number is required", http.StatusBadRequest)return}orderNum, err := strconv.Atoi(orderNumStr)if err != nil {http.Error(w, "Invalid order number", http.StatusBadRequest)return}// 从数据库查询订单db, err := sql.Open("mysql", "your_db_connection_string")if err != nil {http.Error(w, "Database connection failed", http.StatusInternalServerError)return}defer db.Close()order, err := QueryOrder(db, orderNum)if err != nil {http.Error(w, "Order not found", http.StatusNotFound)return}// 设置响应头为JSONw.Header().Set("Content-Type", "application/json")// 将订单数据编码为JSON格式encoder := json.NewEncoder(w)if err := encoder.Encode(order); err != nil {http.Error(w, "Failed to encode order data", http.StatusInternalServerError)return}
}
步骤 3: 启动HTTP服务器
func main() {http.HandleFunc("/get-order", getOrderHandler)log.Println("Server starting on port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatal("ListenAndServe: ", err)}
}

在这个示例中,我们定义了一个Order结构体来表示订单数据,并编写了一个QueryOrder函数来从数据库查询订单信息。在HTTP处理函数getOrderHandler中,我们首先解析请求参数中的订单编号,然后查询数据库,并将查询结果使用json.NewEncoder编码为JSON格式,最后将JSON数据写入HTTP响应中。

这个简单的示例展示了如何在Go Web应用中将数据库查询结果格式化为JSON数据格式,并返回给客户端。

五、数据聚合

什么是数据聚合?

数据聚合是指将多个数据源或多个数据点组合成一个有意义的整体的过程。在数据库和数据分析领域,聚合通常涉及到对数据集进行求和、平均、计数、最大值、最小值等操作,以提供更高层次的数据视图。聚合操作可以帮助我们从大量数据中提取有用的信息和洞察。

Go Web应用如何对数据进行聚合?

在Go Web应用中,数据聚合通常涉及到以下几个步骤:

  1. 查询数据:从数据库中查询所需的原始数据。
  2. 处理数据:在服务器端对查询结果进行处理,执行聚合操作。
  3. 返回结果:将聚合后的结果返回给客户端。

以下是一个简单的示例,展示了如何在Go Web应用中对数据进行聚合。

步骤 1: 定义数据库查询

假设我们有一个订单数据库表,我们想要聚合每个客户的总订单金额。

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,customer_id INT NOT NULL,order_amount DECIMAL(10, 2) NOT NULL
);
步骤 2: 编写Go代码进行聚合
package mainimport ("database/sql""encoding/json""fmt""log""net/http"_ "github.com/go-sql-driver/mysql"
)// OrderAggregate 定义聚合结果的结构体
type OrderAggregate struct {CustomerID int     `json:"customer_id"`TotalAmount float64 `json:"total_amount"`
}// getAggregateData 聚合订单数据
func getAggregateData(db *sql.DB) ([]OrderAggregate, error) {var aggregates []OrderAggregaterows, err := db.Query("SELECT customer_id, SUM(order_amount) as total_amount FROM orders GROUP BY customer_id")if err != nil {return nil, err}defer rows.Close()for rows.Next() {var aggregate OrderAggregateif err := rows.Scan(&aggregate.CustomerID, &aggregate.TotalAmount); err != nil {return nil, err}aggregates = append(aggregates, aggregate)}return aggregates, nil
}// aggregateHandler 处理聚合数据的HTTP请求
func aggregateHandler(w http.ResponseWriter, r *http.Request) {db, err := sql.Open("mysql", "your_db_connection_string")if err != nil {http.Error(w, "Database connection failed", http.StatusInternalServerError)return}defer db.Close()aggregates, err := getAggregateData(db)if err != nil {http.Error(w, "Failed to aggregate data", http.StatusInternalServerError)return}w.Header().Set("Content-Type", "application/json")if err := json.NewEncoder(w).Encode(aggregates); err != nil {http.Error(w, "Failed to encode response", http.StatusInternalServerError)}
}func main() {http.HandleFunc("/aggregate", aggregateHandler)log.Println("Server starting on port 8080")if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatal("ListenAndServe: ", err)}
}

在这个示例中,我们定义了一个OrderAggregate结构体来存储聚合结果。getAggregateData函数执行SQL查询,使用GROUP BY子句对每个客户的订单金额进行求和。然后,我们在aggregateHandler中调用这个函数,并将结果编码为JSON格式返回给客户端。

这个简单的示例展示了如何在Go Web应用中对数据库中的数据进行聚合,并返回聚合后的结果。在实际应用中,聚合操作可能会更复杂,涉及到多个表的连接、多个字段的聚合等。

六、数据分页

什么是数据分页?

数据分页是一种将大量数据分割成多个页面的技术,每个页面包含固定数量的数据项。这样做的目的是为了提高用户体验,避免一次性加载过多数据导致的性能问题,同时也使得数据的浏览和导航更加方便。

Go Web应用如何对数据进行分页?

在Go Web应用中,数据分页通常涉及到以下几个步骤:

  1. 确定每页数据量:设定每个页面显示的数据条目数量。
  2. 接收分页参数:通常通过查询参数接收页码(page)和每页数据量(limit)。
  3. 计算偏移量:根据页码和每页数据量计算SQL查询的偏移量(offset)。
  4. 执行分页查询:使用计算出的偏移量执行数据库查询,获取当前页的数据。
  5. 返回分页结果:将当前页的数据和分页信息(如总页数、当前页码等)返回给客户端。

以下是一个简单的示例,展示了如何在Go Web应用中对数据进行分页。

步骤 1: 编写分页查询函数
package mainimport ("database/sql""net/http""strconv"_ "github.com/go-sql-driver/mysql"
)// paginateQuery 执行分页查询
func paginateQuery(db *sql.DB, query string, page int, pageSize int) (*sql.Rows, error) {offset := (page - 1) * pageSizereturn db.Query(query, offset, pageSize)
}
步骤 2: 编写HTTP处理函数
func ordersHandler(w http.ResponseWriter, r *http.Request) {pageStr := r.URL.Query().Get("page") // 获取页码pageSizeStr := r.URL.Query().Get("pageSize") // 获取每页数据量page, err := strconv.Atoi(pageStr)if err != nil || page <= 0 {page = 1 // 默认页码为1}pageSize, err := strconv.Atoi(pageSizeStr)if err != nil || pageSize <= 0 {pageSize = 10 // 默认每页10条数据}db, err := sql.Open("mysql", "your_db_connection_string")if err != nil {http.Error(w, "Database connection failed", http.StatusInternalServerError)return}defer db.Close()rows, err := paginateQuery(db, "SELECT * FROM orders LIMIT ? OFFSET ?", page, pageSize)if err != nil {http.Error(w, "Failed to query orders", http.StatusInternalServerError)return}defer rows.Close()// 处理rows,例如转换为JSON并返回// ...
}
步骤 3: 启动HTTP服务器
func main() {http.HandleFunc("/orders", ordersHandler)http.ListenAndServe(":8080", nil)
}

在这个示例中,我们定义了一个paginateQuery函数来执行分页查询。在HTTP处理函数ordersHandler中,我们首先解析请求参数中的页码和每页数据量,然后调用paginateQuery函数获取当前页的数据。最后,我们将当前页的数据返回给客户端。

请注意,这个示例假设你已经有一个名为orders的数据库表,并且你的数据库连接字符串是正确的。在实际应用中,你可能需要根据实际的数据库表结构和业务需求调整查询语句和处理逻辑。

七、重要性

数据操作在应用程序设计中的重要性不言而喻,它是构建现代应用程序的核心部分。以下是数据操作在应用程序设计中的几个关键重要性:

  1. 数据管理

    • 应用程序通常需要存储、检索和更新数据,数据操作提供了管理这些数据的基本能力。
  2. 业务逻辑实现

    • 数据操作是实现业务逻辑的基础,它们允许应用程序执行必要的操作来满足业务需求。
  3. 用户体验

    • 通过有效的数据操作,应用程序可以提供快速响应和流畅的用户体验,例如实时搜索、过滤和排序功能。
  4. 数据一致性和完整性

    • 正确的数据操作可以确保数据的一致性和完整性,防止数据损坏和丢失。
  5. 安全性

    • 数据操作需要考虑到安全性,包括数据的验证、授权和加密,以保护敏感数据不被未授权访问。
  6. 可扩展性

    • 良好的数据操作设计可以支持应用程序的扩展,处理不断增长的数据量和用户请求。
  7. 性能优化

    • 优化的数据操作可以提高应用程序的性能,减少响应时间和提高吞吐量。
  8. 数据分析和报告

    • 数据操作使得从数据库中提取和聚合数据成为可能,这对于数据分析和生成报告至关重要。
  9. 数据迁移和备份

    • 数据操作还包括数据迁移和备份,这对于数据恢复和灾难恢复计划是必要的。
  10. API和集成

    • 数据操作为应用程序提供了与其他系统和API集成的能力,允许数据在不同系统间流动。
  11. 国际化和本地化

    • 对于全球运营的应用程序,数据操作需要支持不同语言和地区的数据格式和规则。
  12. 法规遵从

    • 数据操作必须遵守相关的数据保护法规,如GDPR或HIPAA,确保数据处理符合法律要求。
  13. 测试和调试

    • 数据操作的代码需要被彻底测试和调试,以确保应用程序的稳定性和可靠性。

总之,数据操作是应用程序设计和开发中的基石,它们直接影响应用程序的功能、性能和用户体验。因此,设计健壮、高效和安全的数据操作机制对于任何应用程序的成功至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kali设置中文输入法

目录 下载 使用 下载 打开终端输入 sudo apt-get install ibus ibus-pinyin 点击y即可 使用 桌面右上角这里可以选择中文输入法 效果如下

VTK知识学习(27)- 图像基本操作(二)

1、图像类型转换 1&#xff09;vtkImageCast 图像数据类型转换在数字图像处理中会频繁用到。一些常用的图像算子(例如梯度算子)在计算时出于精度的考虑&#xff0c;会将结果存储为float或double类型&#xff0c;但在图像显示时&#xff0c;一般要求图像为 unsigned char 类型,…

活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享

近年来&#xff0c;云原生技术迅猛发展&#xff0c;成为企业数字化转型的关键动力&#xff0c;云原生不仅极大地提升了系统的灵活性和可扩展性&#xff0c;还为企业带来了前所未有的创新机遇。 12 月 28 日 知乎携手 AutoMQ、OceanBase 和快猫星云推出“云原生创新论坛”主题的…

学习因子异步化的粒子群优化算法(AsyLnCPSO)——源码

目录 1. 学习因子异步化的概念 2. 算法步骤 2.1 初始化 2.2 迭代过程 3.优势 4. 与传统粒子群算法的区别 5.代码下载&#xff1a; 学习因子异步化的粒子群优化算法&#xff08;AsyLnCPSO&#xff09;是一种改进的粒子群优化&#xff08;PSO&#xff09;算法&#xff0c;…

windows安装Elasticsearch及增删改查操作

1.首先去官网下载Elasticsearch 下载地址 我这里选择的是7.17.18 选择windows版本 下载完成后解压是这样的 下载完成后点击elasticsearch.bat启动elasticsearch服务 输入http://localhost:9200看到如下信息说明启动成功。 还有记得修改elasticsearch.yml文件,创建node名…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件&#xff0c;它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏&#xff08;AppBar&#xff09;、内容区域&#xff08;body&#xff09;、抽屉菜单&#xff08;Drawer&#xff09;、底部导…

低代码软件搭建自学第2.5天——箭头连线和动态更新

文章目录 使用 PyQtGraph 实现图形连接器&#xff1a;支持动态拖动和箭头连线引言实现功能的关键点代码实现功能演示实现过程中的经验教训结语 使用 PyQtGraph 实现图形连接器&#xff1a;支持动态拖动和箭头连线 引言 在这篇博客中&#xff0c;使用 PyQtGraph 和 PyQt6 创建一…

CoinShares预测2025年加密市场前景看涨

原文来源&#xff1a;CoinShares预测2025年加密市场前景看涨 - 币热网 - 区块链数字货币新闻消息资讯 欧洲加密投资公司CoinShares发布了2025年的市场预测&#xff0c;概述了可能塑造行业的关键趋势。 报告指出&#xff0c;在即将上任的川普政府下&#xff0c;监管环境将更加…

ChromeOS 131 版本更新

ChromeOS 131 版本更新 1. ChromeOS Flex 自动注册 在 ChromeOS 131 中&#xff0c;ChromeOS Flex 的自动注册功能现已允许大规模部署 ChromeOS Flex 设备。与 ChromeOS 零接触注册类似&#xff0c;自动注册将通过组织管理员创建的注册令牌嵌入到 ChromeOS Flex 镜像中。这将…

【LeetCode】394、字符串解码

【LeetCode】394、字符串解码 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 // go func decodeString(s string) string {// 如果遇到 嵌套括号的情况, 则递归// 可能连续多位数字, 则 通过 cur cur * 10 …

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户&#xff0c;使用websocket。web服务器选用nginx&#xff0c;但是域名是以前通过阿里云申请的&#xff0c;解析ip也是阿里云的服务器&#xff0c;甲方不希望更换域名。新的系统需要部署在内网服务器&#xff0c;简单拓扑图如…

Everything实现,快速搜索文件

最近编写NTFS文件实时搜索工具, 类似 Everything 这样, 翻阅了很多博客, 结果大致如下: 1.分析比较肤浅, 采用USN日志枚举来获取文件记录 速度一言难尽, 因为日志枚举的是全盘所有文件的所有日志, 记录比文件记录还多, 速度当然很慢, 还有的甚至于是 使用 DeviceIoControl 函数…

京东大数据治理探索与实践 | 京东零售技术实践

01背景和方案 在当今的数据驱动时代&#xff0c;数据作为关键生产要素之一&#xff0c;其在商业活动中的战略价值愈加凸显&#xff0c;京东也不例外。 作为国内领先的电商平台&#xff0c;京东在数据基础设施上的投入极为巨大&#xff0c;涵盖数万台服务器、数 EB 级存储、数百…

nodejs搭配express网站开发后端接口设计需要注意事项

nodejs搭配express网站开发后端接口设计需要注意事项&#xff01;为了回避一些常见的误区&#xff0c;今天和大家汇总一下&#xff0c;最近我遇到的一些错误信息&#xff0c;虽然都是小问题&#xff0c;但是还是需要分享一下&#xff0c;以免大家再次犯错。 1&#xff1a;第一个…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1&#xff1a;使用科学上网 方法2&#xff1a;手动下载 方法3 在使用vscode使用ssh远程连接服务器时&#xff0c;一直卡在下载"vscode 服务器"阶段&#xff0c;但MobaXterm可以正常连接服务器&#xff0c;大概率是网络问题&#xff0c;解决方法如下: 方…

Spring Boot实现OAuth2.0登录实战

一、前言 最近在研究Springboot Vue 的前后端分离框架&#xff0c;刚开始做登录功能&#xff0c;做着做着觉得普通账户密码登录太简单了&#xff0c;决定再加上 GitHub授权 和 人脸识别等多种快捷登录方式。 而GitHub授权登录正好用到了OAuth2.0中最复杂的授权码模式&#xf…

电脑开机提示error loading operating system怎么修复?

前一天电脑还能正常运行&#xff0c;但今天启动时却显示“Error loading operating system”&#xff08;加载操作系统错误&#xff09;。我已经仔细检查了硬盘、接线、内存、CPU和电源&#xff0c;确认这些硬件都没有问题。硬盘在其他电脑上可以正常使用&#xff0c;说明不是硬…

Java web的发展历史

目录 前言&#xff1a; 一.Model I和Model II 1.Model I开发模式 ​编辑 2.Model II开发模式 二. MVC模式 前言&#xff1a; 该篇文章主要介绍了Java web的发展历史&#xff0c;以及MVC相关内容 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是&#xff…

Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程

目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件&#xff0c;适用于工程控制系统。它用于 Intel Edge Controls for Industrial&#xff08;Intel ECI 或 ECI&#xff09;&#xff0c;…

SQL语句练习

阅读《SQL必知必会》&#xff08;第五版&#xff09;然后结合往常表做的练习记录 这里使用的数据库时sqlite3,使用的工具时navicat 表资源链接https://wenku.baidu.com/view/349fb3639b6648d7c1c74652.html 表录入后如上图所示。后面如果有多张表之间的操作&#xff0c;在引入…