gpt4 book ai didi

Go:如何处理库 API 更改?

转载 作者:IT王子 更新时间:2023-10-29 01:23:12 29 4
gpt4 key购买 nike

我最初使用 Go v1.9 编写我的项目,其中包括 os.LookupEnv 函数。

现在我需要使用 Go v1.4 进行构建,但缺少该函数——它只有 os.Getenv,其行为略有不同。

在 Python 中,我可以提供一个兼容性函数,像这样:

if 'LookupEnv' not in os:
def myLookupEnv(k):
v = os.Getenv(k)
return v, v!=''
os.LookupEnv = myLookupEnv

我如何在 Go 中处理这些类型的 API 更改?

最佳答案

使用构建约束。构建约束是行注释开始

// +build

列出文件应包含在包中的条件。请参阅 Package build 中的构建约束了解详情。

例如,对于 Go 1.5 及更高版本 (//+build go1.5),将 LookupEnv 转发到 os.LookupEnv。对于 Go 1.4 及更早版本 (//+build !go1.5),实现 LookupEnv

src/lookup/lookup.go:

package main

import (
"fmt"
"runtime"
)

func main() {
fmt.Println("version:", runtime.Version())
key := "HOME"
value, found := LookupEnv(key)
fmt.Printf("key: %q value %q found: %t\n", key, value, found)
}

src/lookup/env.go:

// +build go1.5

// Forward LookupEnv to os.LookupEnv

package main

import "os"

// LookupEnv retrieves the value of the environment variable named
// by the key. If the variable is present in the environment the
// value (which may be empty) is returned and the boolean is true.
// Otherwise the returned value will be empty and the boolean will
// be false.
func LookupEnv(key string) (string, bool) {
return os.LookupEnv(key)
}

src/lookup/env_1.4.go:

// +build !go1.5

// Implement LookupEnv

package main

import "syscall"

// LookupEnv retrieves the value of the environment variable named
// by the key. If the variable is present in the environment the
// value (which may be empty) is returned and the boolean is true.
// Otherwise the returned value will be empty and the boolean will
// be false.
func LookupEnv(key string) (string, bool) {
return syscall.Getenv(key)
}

输出:

$ go build && ./lookup
version: devel +fd7331a821 Tue Feb 6 05:00:01 2018 +0000
key: "HOME" value "/home/peter" found: true
$

$ go1.4 build && ./lookup
version: go1.4-bootstrap-20170531
key: "HOME" value "/home/peter" found: true
$

关于Go:如何处理库 API 更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48635129/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com