Golang字符串是否存在于切片或数组中的小工具(基本等同于python in语法)

2021-01-11

 

// golang中是没有判断字符串是否存在数组或切片里的内置方法, 所以我们可以自己搞一个快速小组件

func Find(slice []string, val string) (int, bool) {
	for i, item := range slice {
		if item == val {
			return i, true
		}
	}
	return -1, false
}

func main() {
  var dataList []string{"test1", "test2"}
  
  dataStr := "test1"  
  // 传入切片 和 要查找的字符串 
  _, flag := Find(dataList, dataStr)
  if flag {
    fmt.Println("存在 -> ", dataStr)
  } else {
    fmt.Println("不存在 -> ", dataStr)
  }

}

  
>>>>>>>>>>>>>>>>>:预期结果
存在 -> test1

Golang数组的取值

- 数组是固定长度的特定类型元素组成的序列
- 一个数字由零个或多个元素组成
- 数组的长度是固定的,因此Go更常用slice(切片, 动态的增长或收缩序列)
- 数组是值类型, 用索引下标访问每一个元素, 范围是0 - len-1, 访问超出数组长度范围 会panic异常



// Go Array 数组中没有复制的数组 会有相应的默认值

// 声明数组 , 并且个数组中的元素赋值
var intArr [5]int
fmt.Println(intArr)
intArr[0] = 12
intArr[1] = 34

fmt.Println(intArr)



// 声明数组 并且直接赋值 
var namestr [5]string = [5]string{"1", "2"}
fmt.Println(namestr)

var namestr2 = [5]string{"1"}
fmt.Println(namestr2)


// 取数组最后一个元素  顺便展示指定索引赋值
var namestr2 = [5]string{"1", 4: "124124"}
fmt.Println(namestr2, namestr2[len(namestr2)-1])


// 自适应数组大小[...]
var namestr3 = [...]string{"zj", "zjj", "zjjj"}
fmt.Println(namestr3)


// 数据结构题类型数组

var namestr5 = [...]struct{
  name string
  age int
}{
  {"zj", 18},
  {"ccn", 18},
}
fmt.Println(namestr5)


// 数组循环

for i:=0; i < len(namestr3);i++{
  fmt.Println("for " + namestr3[i])
}

for index, value := range namestr3{
  fmt.Println(index, value)
}



** 数组注意事项:
	数组是多个相同数据的组合, 且长度固定, 无法扩容 [5]int

数组使用步骤:
	1.声明数组
	2.给数组元素赋值
	3.使用数组
	4.数组索引从0开始 不能index of range
	5.Go数组是值类型, 变量传递默认是值传递, 因此会进行值拷贝
	6.修改原本的数组, 可以使用引用传递(指针)