首页 > 系统相关 >Windows上编译可运行在Linux上的go二进制文件

Windows上编译可运行在Linux上的go二进制文件

时间:2022-09-30 15:27:34浏览次数:83  
标签:err Windows fmt Println Sprintf Linux go

Windows上编译可运行在Linux上的go二进制文件

1、前言

默认Windows上编译的go二进制为exe,只能运行在Windows上,而想要在Linux上运行,则需要到Linux的平台编译。有没有一种办法可以直接在Windows上编译,然后直接拿到Linux就可以运行呢?这几天就看到一个文章,就是做的这个事情,也比较简单,但很有用,记录一下。

实现功能:Windows上编译go,部署到Linux运行

参考链接:https://blog.csdn.net/wykqh/article/details/121861036

2、步骤

打开cmd,运行以下命令(设置为Linux平台,应该是这么理解,然后是设置为amd64架构)

SET GOOS=linux
SET GOARCH=amd64

然后正常编译即可

go build -o xxx xxx.go

3、例子

go代码

package main

import (
   "fmt"
   "golang.org/x/crypto/ssh"
   "net"
   "os"
   "os/exec"
   "time"
)

func hostKeyCallback(hostname string, remote net.Addr, key ssh.PublicKey)error  {
   fmt.Println(fmt.Sprintf("hostname:%s",hostname))
   fmt.Println(fmt.Sprintf("remote:%+v",remote))
   fmt.Println(fmt.Sprintf("key:%+v",key))
   return nil

}

func main(){
   const DefaultPathPerm       = 0744
   path:="/etc/node-exporter"
   err := os.MkdirAll(path, DefaultPathPerm)
   if err != nil {
      fmt.Println(fmt.Sprintf("创建目录失败, 目录:%s, err:%s",path,err.Error()))
      return
   }

   cmsStr :="yum install -y wget tar"
   cmd:=exec.Command("yum","install","-y","wget","tar")
   combinedOutput, err := cmd.CombinedOutput()
   if err != nil {
      fmt.Println(fmt.Sprintf("执行命令失败, 命令:'%s', err:%s", cmsStr,err.Error()))
      return
   }
   fmt.Println(fmt.Sprintf("执行命令成功,命令:'%s', 输出:%s", cmsStr,combinedOutput))

   user:="root"
   passwd:="123456"
   addr:="192.168.108.216:22"


   auth := make([]ssh.AuthMethod, 0)
   auth = append(auth, ssh.Password(passwd))
   clientConfig := ssh.ClientConfig{
      Config:            ssh.Config{},
      User:              user,
      Auth:              auth,
      HostKeyCallback:   hostKeyCallback,
      BannerCallback:    nil,
      ClientVersion:     "",
      HostKeyAlgorithms: nil,
      Timeout:           30*time.Second,
   }

   client, err := ssh.Dial("tcp",addr,&clientConfig)
   if err != nil {
      fmt.Println(fmt.Sprintf("SSH连接Linux失败, addr:%s, err:%s",addr,err))
      return
   }
   fmt.Println(fmt.Sprintf("SSH连接Linux成功, addr:%s",addr))
   defer func(client *ssh.Client) {
      err := client.Close()
      if err != nil {
         fmt.Println(fmt.Sprintf("关闭SSH失败:%s, err:%s",addr,err))
      }
      fmt.Println(fmt.Sprintf("关闭SSH成功:%s, err:%s",addr,err))
   }(client)


}

编译

image-20220930150500201

拷贝到Linux运行

image-20220930150552592

标签:err,Windows,fmt,Println,Sprintf,Linux,go
From: https://www.cnblogs.com/rainbow-tan/p/16744975.html

相关文章

  • 封装自用Linux命令
    [本文出自天外归云的博客园]1.创建脚本命令文件:vimy_cmd2.编写脚本内容并保存::wq3.转移脚本命令文件到命令工具目录下:mvmy_cmd/usr/local/bin4.修改脚......
  • 【Linux】Unable to fetch some archives, maybe run apt-get update or try with --f
    一、问题描述在aptinstall时候遇到E:Unabletofetchsomearchives,mayberunapt-getupdateortrywith--fix-missing?的error。Error报的信息显示是这个包向so......
  • Asp.net Core 跨平台生成带Logo二维码
    1.nuget引用  QRCoder-ImageSharp2.代码usingQRCoder;usingSixLabors.ImageSharp.Formats.Jpeg;usingColor=SixLabors.ImageSharp.Color;usingImage=Six......
  • Windows Server 服务器漏洞:OpenSSL 信息泄露漏洞(CVE-2016-2183)和 OpenSSL弱加密算法
    一、更新openssl版本这个漏洞我目前了解到是直接使用系统自带版本,版本过低引起的弱加密信息泄露,直接更新。更新会同时把标题两个漏洞都补上先下载一波安装包: http://sl......
  • 学习笔记——Django项目的删除数据、查询数据(filter、get、exclude)
    2022-09-30删除数据:方式一:打开pycharm,进入虚拟环境,进入shell环境(pythonmanage.pyshell)。删除数据,接上面的笔记——“学习笔记——Django项目的新增数据、修改数据”......
  • Linux
    Linux用于学习记录S1概述1.1介绍是一套免费使用和自由传播的类Unix操作系统,有众多以其为内核的发行版,例如Ubuntu、CentOS等。1.2应用场景linux下开发项目......
  • linux cpu 相关
    转载:https://www.jianshu.com/p/6a53819fa89b 一、物理CPU,物理CPU内核,逻辑CPU概念详解1.说明CPU(CentralProcessingUnit)是中央处理单元,本文介绍物理CPU,物理CPU......
  • mongodb使用总结
    mongodb使用总结1什么是文档数据库服务数据库--集合(表)--文档(行)MongoDB一般采用类似JSON的格式存储,存储的内容是文档型的2产品优势支持高并发+灵活的存储结构3功能......
  • 什么时候用Goroutine?什么时候用Channel?
    GO语言中的操作系统线程和goroutine的关系一个操作系统线程对应用户态多个goroutinego程序可以同时使用多个操作系统线程goroutine和系统线程事多对多的关系,即m:nG......
  • linux下使用yum安装nginx
    上一次发了本地安装nginx,这次发一个yum安装nginx1.安装nginx源我们本机有的可能没有附带nginx源,所以我们这里先进行安装一个nginx源#rpm-ivhhttp://nginx.org/packag......