欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

go []byte 和 string之间应用

程序员文章站 2022-07-07 15:13:32
...

IPAddr 类型实现 fmt.Stringer 以便用点分格式输出地址。

例如,`IPAddr{1,`2,`3,`4}` 应当输出 `"1.2.3.4"`。 

 

package main

import (
   "fmt"
   "strconv"
 //"strings"
   "bytes"
)

type IPAddr [4]byte
// 方法1:采用strings 工具包方案实现,需要引入strings
//func (ipAddr IPAddr) String() string {
// s := make([]string, len(ipAddr))
// for i := range ipAddr {
//    s[i] = strconv.Itoa(int(ipAddr[i]))
// }
// return strings.Join(s, ".")
//}
// 方法2:采用bytes.Buffer 方案实现,需要引入bytes;并且数据比较大的时候效率相当高
func (ipAddr IPAddr) String() string {
   var buf bytes.Buffer
   for i:=0; i<len(ipAddr); i++ {
      if i == 0 {
         buf.WriteString(strconv.Itoa(int(ipAddr[i])))
      } else {
         buf.WriteString(".")
         buf.WriteString(strconv.Itoa(int(ipAddr[i])))
      }
   }
   return buf.String()
}

func main() {
   addrs := map[string]IPAddr{
      "loopback":  {127, 0, 0, 1},
      "googleDNS": {8, 8, 8, 8},
   }
   for n, a := range addrs {
      fmt.Printf("%v:%v\n", n, a)
   }
}

 

       这个本来是go中文指南上的一个练习题,但是我在写的时候,经常string(ipAddr[i]) 打印出来是空格看不见(ascii码中都不是可见字符);查了资料才发现是转码了;

在这里直接用了strings 工具包strconv 工具包(strconv包使用)

 

 https://studygolang.com/articles/6189 (Go语言中连接多个字符串)