golang怎么像python一样把逻辑写在函数外面?

发布于 2022-09-11 19:10:38 字数 697 浏览 41 评论 0

在python中可以这样写如文件内容:

fob = open('./file.txt', 'a')
def write(string):
    fob.write(string)
def main():
    for i in messages:
        write(i)
fob.close()

在golang中怎么把fob写到函数外面?下面只是举的一个普通例子,我知道可以把var logfile和write函数写到main函数中,但是,如果其它函数要调用write函数怎么办?

package main

import (
    "fmt"
    ...
)

//↓这样写不行,应该怎么做?让这个文件内的函数能使用logfile变量
var logfile, err = os.OpenFile("./test.txt", os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0666)
if err != nil{
    fmt.Println("open file fail")
}

func main(){
    for _, v := range messages{
        write(v)
    }
    logfile.Close()
}

func write(msg string){
    logfile.WriteString(msg)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

奈何桥上唱咆哮 2022-09-18 19:10:39

简单!这种方式定义变量,不能放在入口文件中(因为是从main开始执行的),把write方法和变量抽到一个模块中,就能按照python一样的写法搞了。

强辩 2022-09-18 19:10:39

Python 是可以执行 .py 文件中的全局代码的。Golang 没有这个,

Golang 的执行入口是 init()main().

你的Python版本就写错了。write()main() 根本没得到执行。

_失温 2022-09-18 19:10:39

大概这样吧

package main

import (
    "fmt"
    ...
)

var logfile file

func init () {
    logfile, err = os.OpenFile("./test.txt", os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0666)
    if err != nil{
        fmt.Println("open file fail")
    }
}

func main(){
    for _, v := range messages{
        write(v)
    }
    logfile.Close()
}

func write(msg string){
    logfile.WriteString(msg)
}
谈下烟灰 2022-09-18 19:10:39

原来要这样,声明全局变量及类型,类型用反射获取,然后把逻辑写在init函数中,init函数在main函数之前执行。

package main
import (
    "os"
    "log"
)

var FOB *os.File
func init(){
    var err error
    var filename = "./file.txt"
    FOB, err = os.OpenFile(filename, os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0666)
    if err != nil{
        log.Fatalln("open file error", err.Error())
    }
}

func main(){
    FOB.WriteString("...string...")
    FOB.Close()
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文