go基础库之使用分隔符连接字符串切片

本片将分享如何将多个字符串连接成一个字符串,并将给定的字符串作为分隔符。

一个真实的用例是动态构建SQL select语句。

使用分隔符连接字符串切片

Golang 版本

1.12.1

前言

本片将分享如何将多个字符串连接成一个字符串,并将给定的字符串作为分隔符。

一个真实的用例是动态构建SQL select语句。

实现

  1. 创建文件join.go,代码如下:

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    const selectBase = "SELECT * FROM user WHERE %s "
    
    var refStringSlice = []string{
    	" FIRST_NAME = 'Jack' ",
    	" INSURANCE_NO = 333444555 ",
    	" EFFECTIVE_FROM = SYSDATE "}
    
    func main() {
    
    	sentence := strings.Join(refStringSlice, "AND")
    	fmt.Printf(selectBase+"\n", sentence)
    
    }
    
    $ go run join.go
    SELECT * FROM user WHERE  FIRST_NAME = 'Jack' AND INSURANCE_NO = 333444555 AND EFFECTIVE_FROM = SYSDATE
    
  2. 创建文件join_manually.go,代码如下:

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    const selectBase = "SELECT * FROM user WHERE "
    
    var refStringSlice = []string{
    	" FIRST_NAME = 'Jack' ",
    	" INSURANCE_NO = 333444555 ",
    	" EFFECTIVE_FROM = SYSDATE "}
    
    type JoinFunc func(piece string) string
    
    func main() {
    
    	jF := func(p string) string {
    		if strings.Contains(p, "INSURANCE") {
    			return "OR"
    		}
    
    		return "AND"
    	}
    	result := JoinWithFunc(refStringSlice, jF)
    	fmt.Println(selectBase + result)
    }
    
    func JoinWithFunc(refStringSlice []string,
    	joinFunc JoinFunc) string {
    	concatenate := refStringSlice[0]
    	for _, val := range refStringSlice[1:] {
    		concatenate = concatenate + joinFunc(val) + val
    	}
    	return concatenate
    }
    
    $ go run join_manually.go
    SELECT * FROM user WHERE  FIRST_NAME = 'Jack' OR INSURANCE_NO = 333444555 AND EFFECTIVE_FROM = SYSDATE 
    

原理

为了将字符串切片连接成单个字符串,这里有string包的Join函数。简单地说,需要为切片提供需要连接的字符串。这样,就可以轻松地连接字符串切片。Join函数的使用如步骤1所示。

当然,连接可以通过在切片上迭代来手动实现。通过这种方式,可以通过一些更复杂的逻辑定制分隔符。步骤2只是表示如何根据当前处理的字符串将手动连接用于更复杂的逻辑。

延伸

Join 函数由bytes包提供,它自然地用于连接字节片。