当前位置: 首页 > article >正文

(done) Go 语言:三种多文件协作方式

go 语言多文件协作有三种方式:
1.同一文件夹下,同时编译运行多个 go 文件
2.使用 go.mod 配置项目结构,把不同文件分在不同包里
3.把一部分文件编译成动态库 .so 文件,然后一个 main 程序加载调用他们


task1: 同一文件夹下,同时编译运行多个 go 文件

main.go 内容如下:

package main

func main() {
    PrintHello() // 调用函数
}

print.go 内容如下:

package main

import "fmt"

// PrintHello 打印 "Hello, World!"
func PrintHello() {
    fmt.Println("Hello, World!")
}

运行方式如下(不编译)

go run main.go print.go

构建运行方式如下:

go build main.go print.go 
./main

task2: 使用 go.mod 配置项目结构,把不同文件分在不同包里

go.mod 像下面这样写

module type2_project

go 1.15

位于 main 文件夹的 main.go

package main

import "type2_project/printHello"

func main() {
    printHello.PrintHello() // 调用函数
}

位于 printHello 文件夹的 print.go

package printHello

import "fmt"

// PrintHello 打印 "Hello, World!"
func PrintHello() {
    fmt.Println("Hello, World!")
}

运行方式:

go run main/main.go

也可以在其它文件夹下运行下面的命令来构建 main 可执行文件,但不能在当前目录构建,因为当前目录已经有个子目录名为 main,会造成名字冲突

go build main.go

task3: 把一部分文件编译成动态库 .so 文件,然后一个 main 程序加载调用他们

首先是 print.go 如下写

package main

import "fmt"

// PrintHello 打印 "Hello, World!"
func PrintHello() {
    fmt.Println("Hello, World!")
}

接着是 main.go 如下写

package main

import (
    "plugin"
    "log"
)

func main() {
    // 加载插件
    p, err := plugin.Open("print.so")
    if err != nil {
        log.Fatal(err)
    }

    // 查找 PrintHello 函数
    symbol, err := p.Lookup("PrintHello")
    if err != nil {
        log.Fatal(err)
    }

    // 将 symbol 转换为函数类型并调用
    printHello := symbol.(func())
    printHello()
}

运行的方式如下:
1.把 print.go 编译成动态库

go build -buildmode=plugin print.go
go run main.go

这样就能正确运行了



http://www.kler.cn/news/330789.html

相关文章:

  • Web安全 - 文件上传漏洞(File Upload Vulnerability)
  • input.file.value无法使用
  • 助力企业信息化,开源免费工作流引擎AntFlow推出重榜功能tidb支持,为工作流引擎水平扩展提供无限可能
  • 【算法与图】通向高效解决方案的钥匙
  • 【三步 完全离线搭建 openwebui 】
  • py-mmcif包pdbx_struct_oper_list对象介绍
  • Redis篇(Redis原理 - RESP协议)
  • 华硕天选笔记本外接音箱没有声音
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL74
  • 小徐影院:Spring Boot影院管理新体验
  • Web3 游戏周报(9.22 - 9.28)
  • 2023_Spark_实验十:Centos_Spark Local模式部署
  • Python知识点:如何使用Raspberry Pi与Python进行边缘计算
  • 【Python实战】制作空气质量评估系统
  • Java后端微服务架构下的配置动态刷新:Spring Cloud Bus
  • 华为eNSP:MAC地址安全
  • 机器学习周报(9.23-9.29)
  • Python多个set中的交集
  • Spring面向对象的设计模式
  • JAVA——IO框架