github.com/alimy/mir/v4@v4.1.0/internal/utils/utils.go (about) 1 // Copyright 2022 Michael Li <alimy@gility.net>. All rights reserved. 2 // Use of this source code is governed by Apache License 2.0 that 3 // can be found in the LICENSE file. 4 5 package utils 6 7 import ( 8 "strings" 9 "unicode" 10 "unicode/utf8" 11 ) 12 13 // UpperFirst make first rune upper in s string 14 func UpperFirst(s string) string { 15 firstRune, size := utf8.DecodeRuneInString(s) 16 if unicode.IsUpper(firstRune) { 17 return s 18 } 19 // encode upperFirst to []byte,use max byte for contain unicode 20 res := make([]byte, len(s)) 21 upperRune := unicode.ToUpper(firstRune) 22 number := utf8.EncodeRune(res, upperRune) 23 res = res[:number] 24 res = append(res, s[size:]...) 25 return string(res) 26 } 27 28 // QuoteJoin give a string slice return a quoted join string by sep 29 func QuoteJoin(elems []string, sep string) string { 30 switch len(elems) { 31 case 0: 32 return "" 33 case 1: 34 return elems[0] 35 } 36 n := len(sep) * (len(elems) - 1) 37 for i := 0; i < len(elems); i++ { 38 n += len(elems[i]) + 2 39 } 40 41 var b strings.Builder 42 b.Grow(n) 43 b.WriteByte('"') 44 b.WriteString(elems[0]) 45 b.WriteByte('"') 46 for _, s := range elems[1:] { 47 b.WriteString(sep) 48 b.WriteByte('"') 49 b.WriteString(s) 50 b.WriteByte('"') 51 } 52 return b.String() 53 }