golang 类型转换

例如将 []byte 类型的变量 IPBody 转换为字符串,直接使用 string(IPBody) 即可。

代码示例

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"reflect"
)

func getIP(w http.ResponseWriter, req *http.Request) {

	queryURL := "https://ipw.cn/api/ip/locate"

	responseClient, errClient := http.Get(queryURL)
	if errClient != nil {
		fmt.Printf("获取外网 IP 失败,请检查网络\n")
		panic(errClient)
	}
	defer responseClient.Body.Close()

	IPBody, _ := ioutil.ReadAll(responseClient.Body)

	fmt.Println(reflect.TypeOf(IPBody))         // 输出为 []uint8
	fmt.Println(reflect.TypeOf(string(IPBody))) // 输出为 string

	fmt.Fprintf(w, "%s", string(IPBody)) // HTTP 返回的内容为 string,而不是 []uint8
}

func main() {

	http.HandleFunc("/", getIP)
	log.Println("Starting server ...")
	log.Fatal(http.ListenAndServe(":80", nil))

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

返回结果

go run typeconvert.go and curl localhost

返回对应的数据格式

go run typeconvert.go 

2021/07/23 20:22:22 Starting server ...
[]uint8
string
1
2
3
4
5

题外话

byte 类型 和 uint8 是一样的。

The Go Programming Language Specification
Numeric types
uint8       the set of all unsigned  8-bit integers (0 to 255)
byte        alias for uint8
1
2
3
4

reference