• 新年学新语言Go之二


    一、前言

    上文 新年学新语言Go之一讲了Go的牛逼之处,给自己找一个学习的理由,但是学任何一门语言基础语法还是要先掌握,虽然这是一件很枯燥的事。

    二、环境搭建与HelloWorld

    1、配置环境

    从https://golang.google.cn/dl/下载Mac环境Go最新版本1.17.6,将go1.17.6.darwin-amd64.tar解压后整个go文件夹复制到/usr/local/目录下,然后配置环境变量(注:这和所有二进制包安装步骤都差不多)。

    vim .bash_profileexport GO_HOME=/usr/local/goexport PATH=$PATH:$GO_HOME/binsource .bash_profilego version输出 go version go1.17.6 darwin/amd64表示配置正常

    集成开发环境可以用GoLand或VSCode,GoLand需要收费还有点小贵,我们还是用VSCode吧,配置好Go环境然后在VSCode上安装Go插件即可。

    2、创建HelloWorld例子

    创建目录goinaction,然后执行go mod init goinaction进行初始化。

    3、HelloWorld例子解析

    • package

            包命名的惯例是使用包所在目录的名字。

             定义为main包有特殊含义,编译程序会把这种包编译为二进制可执行文件。

    • import

              import 告诉编码器到磁盘的哪里去找到所需要的导入包。

              编译器会使用Go环境变量设置的路径,先从Go安装路径找然后再从GOPAT目录下找。

              导入包时使用全路径,除非是系统包。

              支持远程导入,比如可以 import "github.com/spf13/viper"。

              支持导入后重命名避免不同目录有相同包名冲突。

    • main函数

              当编码器发现包的名字为main时,它会去找main函数创建可执行文件,main函数就是程序的入口。

    • 命令行执行

            go build helloworld.go,编译生成可执行文件,可以将生成的文件copy到相同操作系统下直接执行,并不需要目标机器安装了Go环境。

            go run helloworld.go  编译代码并执行。

    三、交叉编译

    交叉编译对于Java程序员可能比较陌生,对于C程序员肯定很熟悉,交叉编译就是在一个平台上生成另外一个平台上可执行代码。

    Mac平台编译Linux、Window平台64位可执行程序

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build helloworld.go

    CGO_ENABLED=0 GOOS=window GOARCH=amd64 go build helloworld.go

    Window平台编译Mac、Linux平台64位可执行程序

    SET CGO_ENABLED=0 SET GOOS=darwin3 SET GOARCH=amd64 go build helloworld.go

    SET CGO_ENABLED=0 SET GOOS=linux       SET GOARCH=amd64 go build helloworld.go

    GOOS:目标可执行程序运行的操作系统,支持 darwin,freebsd,linux,windows,darwin指的是Mac系统。

    GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm。

    注:上面Mac平台编译Linux平台(RedHatEnterprise)测试通过,其它没有做过测试。

    四、基础语法

    1、变量

    在Go中定义变量名用var,var name type =value,如果在函数体内可以用 varName := value,变量命名采用驼峰法。

    2、if/else

    3、for

    4、Go函数

    注:今天不想再继续再写了,数组和指针这些下一节再写(学),基础语法稍微花点时间熟悉一下就行,找出和你常用开发语言差异对比一下会记得牢一些。

  • 相关阅读:
    ai智能写作软件哪个好-AI智能写作软件的类型标准
    编译添加了ALPHA开发板的NXP官方uboot
    SGE(集群任务管理系统)常用操作命令
    项目记录:使用SpringBoot + MyBatisPlus 在MySQL字段设置外键后ID自增失效导致添加失败问题(ID生成策略)
    代码随想录刷题记录:DP系列
    Haproxy之负载均衡配置
    面经-并发-对ThreadLocal(线程隔离)的理解
    qt window下动态库两种用法
    汇编语言(第三版)第一章 基础知识 笔记
    【语音编码】基于matlab ADPCM编解码【G.723.1】(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/2301_76787421/article/details/133900429