Golang中将函数输出赋值给变量的方法

Golang中将函数输出赋值给变量的方法 你好, 我是Go语言的新手,需要各位Gopher的一点帮助。我想做的是将下面这个函数的输出放入一个名为“hmc_uuid”的变量中。

func (s *Session) getManaged() {
// mgdurl := s.url + "/rest/api/uom/LogicalPartition"
mgdurl := s.url + "/rest/api/uom/ManagementConsole"
request, err := http.NewRequest("GET", mgdurl, nil)
request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
response, err := s.client.Do(request)
if err != nil {
	log.Fatal(err)
} else {
	defer response.Body.Close()
	contents, err := ioutil.ReadAll(response.Body)
	if err != nil {
		log.Fatal(err)
	}
	if response.StatusCode != 200 {
		log.Fatalf("Error getting LPAR informations. status code: %d", response.StatusCode)
	}
	var feed Feed
	new_err := xml.Unmarshal(contents, &feed)
	if new_err != nil {
		log.Fatal(new_err)
	}
	fmt.Printf("AtomID: %v\n", feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomID)
	fmt.Printf("AtomCreated: %v\n", feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomCreated)

更多关于Golang中将函数输出赋值给变量的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

你好Holloway,

感谢你的回复。是的,它们是字符串。所以,如果我的理解正确的话,我需要创建一个新的函数,仅仅是为了将我的第一个函数的输出传递到一个变量中?

更多关于Golang中将函数输出赋值给变量的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


再多一点信息……我试图将“AtomID”的输出存入一个名为“hmc_uuid”的变量中。

哦,还有,谢谢兄弟……我真的很喜欢 Go。

marvjone:

fmt.Printf(“AtomID: %v\n”, feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomID) fmt.Printf(“AtomCreated: %v\n”, feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomCreated)

这两个 feed 的类型是什么?


在这种情况下,你的函数应该将这两个值作为类型返回。假设它们是字符串,那么代码类似这样:

func UUID(...) (id, created string) {
        ...   // 你的代码在这里,不要包含那些 fmt.Printf
        return feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomID, 
               feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomCreated
}

然后你可以调用这个函数,并将返回值输出到你自己的变量中。例如:

uuid, time := UUID()

顺便欢迎来到 Golang Bridge!🚀🎆

要将函数的输出赋值给变量,你需要修改函数使其返回所需的值。以下是修改后的示例:

func (s *Session) getManaged() (string, error) {
    mgdurl := s.url + "/rest/api/uom/ManagementConsole"
    request, err := http.NewRequest("GET", mgdurl, nil)
    if err != nil {
        return "", err
    }
    
    request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
    response, err := s.client.Do(request)
    if err != nil {
        return "", err
    }
    defer response.Body.Close()
    
    if response.StatusCode != 200 {
        return "", fmt.Errorf("error getting LPAR informations. status code: %d", response.StatusCode)
    }
    
    contents, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return "", err
    }
    
    var feed Feed
    if err := xml.Unmarshal(contents, &feed); err != nil {
        return "", err
    }
    
    hmc_uuid := feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomID
    return hmc_uuid, nil
}

使用示例:

hmc_uuid, err := s.getManaged()
if err != nil {
    log.Fatal(err)
}
fmt.Printf("HMC UUID: %s\n", hmc_uuid)

如果你还需要其他字段,可以返回结构体:

func (s *Session) getManaged() (*ManagementConsoleInfo, error) {
    // ... 前面的代码相同
    
    return &ManagementConsoleInfo{
        AtomID:      feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomID,
        AtomCreated: feed.Entry.Content.ManagementConsole.Metadata.Atom.AtomCreated,
    }, nil
}

type ManagementConsoleInfo struct {
    AtomID      string
    AtomCreated string
}

使用示例:

info, err := s.getManaged()
if err != nil {
    log.Fatal(err)
}
fmt.Printf("AtomID: %v\n", info.AtomID)
fmt.Printf("AtomCreated: %v\n", info.AtomCreated)
回到顶部