go []byte 和 string之间应用

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语言中连接多个字符串)

猜你喜欢

转载自yjph83.iteye.com/blog/2400964