1. 算法

1.1.1. 在utf8字符串判断是否包含指定字符串,并返回下标。 “北京天安门最美丽” , “天安门” 结果:2

显示代码
  import (
      "fmt"
      "strings"
  )

  func main(){
      fmt.Println(Utf8Index("北京天安门最美丽", "天安门"))
      fmt.Println(strings.Index("北京天安门最美丽", "男"))
      fmt.Println(strings.Index("", "男"))
      fmt.Println(Utf8Index("12ws北京天安门最美丽", "天安门"))
  }

  func Utf8Index(str, substr string) int {
      asciiPos := strings.Index(str, substr)
      if asciiPos == -1 || asciiPos == 0 {
          return asciiPos
      }
      pos := 0
      totalSize := 0
      reader := strings.NewReader(str)
      for _, size, err := reader.ReadRune(); err == nil; _, size, err = reader.ReadRune() {
          totalSize += size
          pos++
          // 匹配到
          if totalSize == asciiPos {
              return pos
          }
      }
      return pos
  }

这题不会做.......

1.1.2. 实现一个单例?

显示代码
  package main

  import "sync"

  // 实现一个单例

  type singleton struct{}

  var ins *singleton
  var mu sync.Mutex

  //懒汉加锁:虽然解决并发的问题,但每次加锁是要付出代价的
  func GetIns() *singleton {
      mu.Lock()
      defer mu.Unlock()

      if ins == nil {
          ins = &singleton{}
      }
      return ins
  }

  //双重锁:避免了每次加锁,提高代码效率
  func GetIns1() *singleton {
      if ins == nil {
          mu.Lock()
          defer mu.Unlock()
          if ins == nil {
              ins = &singleton{}
          }
      }
      return ins
  }

  //sync.Once实现
  var once sync.Once

  func GetIns2() *singleton {
      once.Do(func() {
          ins = &singleton{}
      })
      return ins
  }

以上部分资源来自网络

参考: go 夜读

欢迎加入PHP交流群(QQ群号):PHP编程技术交流群 440221268

欢迎加入Golang交流群(QQ群号):PHP/Golang技术交流群 423069874

results matching ""

    No results matching ""