golang 递归本身,输出本身的源代码

问题: [2min 你们本身想一想]golang

  一个程序P运行后可否输出本身的源代码?而且格式保持一致(换行、空格等)

 

思考:函数

  这个问题的本质是一个递归问题,设有P运行后生成G 既P->G && P==G:spa

    1. P 中须要设置一个字符串 me 来存放本身的源码code

    2. P.me 的赋值内容为 P 源文件开头到 P.me 所在行(P 中蓝色部分和红色部分相同), 此时 P.me 中的内容是G的开头到 G.me 赋值的源码 (G中红色部分)blog

    3. P而后继续打印出G.me 赋值的内容(G中蓝色部分)递归

 

  这样的话就须要保证 P中 print me 在前,me 的赋值在后便可,而恰好咱们能够想到golang 中init 函数先于main 函数执行而与所在行的先后无关,因此咱们能够将P.me 的赋值放init 中,行数大于main 的所在行数, 这样在为P.me 赋值时 P中的源代码已经肯定了字符串

  

源代码:源码

 1 package main
 2 
 3 import (
 4     "fmt"
 5 )
 6 
 7 var me string
 8 
 9 func main() {
10     fmt.Print(me)
11     fmt.Print(string(rune(96)))
12     fmt.Print(me)
13     fmt.Print(string(rune(96)) + "\n}")
14 }
15 
16 func init() {
17     me = `package main 18 
19 import (
20     "fmt"
21 )
22 
23 var me string
24 
25 func main() {
26     fmt.Print(me)
27     fmt.Print(string(rune(96)))
28     fmt.Print(me)
29     fmt.Print(string(rune(96))+"\n}")
30 }
31 
32 func init() {
33     me = ` 34 }

  能够看到代码中 红色部分和蓝色部分彻底一致string

第10行执行时,输出的是G 1-17 行,红色部分it

第11行执行时,输出的是G 17行中的`, 黄色部分

第12行执行时,  输出的是G 17-33行,蓝色部分

第13行执行时,输出的是G 33-34行,绿色部分

 

  你们也能够试试其余语言

相关文章
相关标签/搜索