MAC 修改golang源码并编译

获取golang源码

假设本地已安装golang的其他版本,首先从github上来获取golang的源码: https://github.com/golang/go
如果网络比较差无法clone源码,可以先从github上导入到gitee上,然后从gitee上git clone 源码

修改源码

进入src/fmt/print.go 源码
修改如下源码:


// Println formats using the default formats for its operands and writes to standard output.
// Spaces are always added between operands and a newline is appended.
// It returns the number of bytes written and any write error encountered.
func Println(a ...any) (n int, err error) {
	println("This is a test") // 修改的部分
	return Fprintln(os.Stdout, a...)
}

编译源码

cd src 

./make.bash

测试运行

需要在当时控制台设置临时环境变量, ./localhost 为测试编译后的源码的目录

export GOROOT=/Users/xiaopeng/go/src/golang              
export GOPATH=/Users/xiaopeng/go/src/golang/localhost
export GOBIN=${GOPATH}/bin
export PATH=${PATH}:${GOBIN}:${GOROOT}/bin

然后通过已经编译好的go工具包,运行测试的golang代码:
./localhost/src/localtest/chap1/main.go

package main

import "fmt"

func main() {
	fmt.Println("Hello World")
}

通过自编译的go工具包运行当前的go文件:

 ./bin/go run ./localhost/src/localtest/chap1/main.go 

输出结果如下:

This is a test
Hello World

编译优化

golang需要编译成二进制文件,在编译过程中会有中间代码生成阶段。
golang编译成汇编语言,通过汇编语言分析程序具体执行过程:

➜  golang git:(master) ✗ ./bin/go build -gcflags -S ./localhost/src/localtest/chap1/main.go 

如果想了解更详细的过程,通过如下命令获取汇编指令的优化过程:

➜  golang git:(master)GOSSAFUNC=main ./bin/go build -gcflags -S ./localhost/src/localtest/chap1/main.go

此时会在源码的更目录下生成ssa.html文档:
ssa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值