104.【GoLang基础】(七)

简介: 104.【GoLang基础】
(5).遍历string 💥

Go中得到字符串是一个字节的切片,可以通过将其内容封装在""中来创建字符串,Go中的字符串是Unicode兼容的,并且是UTF-8编码,字符串是一些字节的集合

默认打印的是ascll码对应的十进制,我们需要进行%c接收

字符串一旦被定义是不能被修改的,因为字符串里面的字节对应的是byte

第一种遍历方式

package main
import "fmt"
/*
 打印一个9*9
*/
func main() {
  str := "hello,jsxs"
  println(str)
  // 获取字符串的长度 len
  for i := 0; i < len(str); i++ {
    fmt.Printf("%c\t", str[i]) //如果我们输出的话,会直接走向ascll码的十进制;所以我们要对其进行格式转化。
  }
}

第二种遍历方式

package main
import "fmt"
/*
 打印一个9*9
*/
func main() {
  str := "hello,jsxs"
  println(str)
  // 获取字符串的长度 len
  for i := 0; i < len(str); i++ {
    fmt.Printf("%c\t", str[i]) //如果我们输出的话,会直接走向ascll码的十进制;所以我们要对其进行格式转化。
  }
  print("\n")
  // 通过range进行遍历,第一个是index,第二个是值。
  for _, v := range str {
    fmt.Printf("%c\t", v)
  }
}

(八)、函数

1.什么是函数?

  • 函数是基本的代码块,用于执行一个任务。
  • Go语言最少有一个main函数
  • 你可以通过函数来划分不同的功能,逻辑上每个函数执行的是指定的任务。
  • 函数声明告诉了编译器函数的名称,返回类型和参数

2.函数的声明和调用

func Name([变量名 变量类型]) [(返回类型)]{函数体}
  1. 有参无返回值
  2. 有参有返回值
  3. 无参无返回值
  4. 多参多返回值
package main
func printInfo4(x int, y int) (int, int) {
  return x, y
}
func printInfo() {
  println("无参无返回值")
}
func printInfo2(msg string) {
  println(msg)
}
func printInfo3(msg string) string {
  return msg
}
func main() {
  printInfo()
  printInfo2("有参无返回")
  println(printInfo3("一个有参一个返回"))
  var (
    a int
    b int
  )
  a, b = printInfo4(1, 2)
  println("多个有参多个返回", a, b)
}

3.函数的参数

(1).形式参数和实际参数

形参和实参一 一对应

package main
// 两个数字比大小
// 形式参数: 用于接受外部传入过来的参数叫做形式参数
// 实际参数  传给形参的参数叫做实际参数
func max(x, y int) int {
  if x > y {
    return x
  } else {
    return y
  }
}
func main() {
  println(max(1, 2)) //实参
}

(2).可变参数

概念: 一个函数的参数类型是确定的,但参数的个数是不确定的,就可以使用可变参数。

func Name(变量名 ...变量类型)(返回类型){
函数体
}

注意事项:

  1. 如果一个参数是可变擦书,同时还有其他的参数,可变参数要放在列表的最后
  2. 一个函数的参数列表最多只有一个可变参数
  3. 可变参数的值是一个数组,可以用for来遍历
package main
// 可变参数
func getSum(nums ...int) int { //这里的参数nums 相当于一个数组。
  sum := 0
  for i := 0; i < len(nums); i++ {
    sum += nums[i]
  }
  return sum
}
func main() {
  println(getSum(1, 2, 3, 4)) //实参
}

(3).参数的传递

按照数据的存储特点来分:

  1. 值类型的数据: 操作的是数据本身 int、string、bool、float64、array
  2. 引用类型的数据: 操作的是数据的地址 slice、map、chan

值传递

值传递: 形参改变,实参不变。 内存地址不一样,

package main
import "fmt"
func update(array2 [4]int) {
  fmt.Println(array2, "接受前的数据")
  array2[0] = 100
  fmt.Println(array2, "改变后的数据")
}
func main() {
  // 值传递: 形参改变实参不变
  var array [4]int = [4]int{1, 2, 3, 4}
  update(array)
  fmt.Println(array)
}

引用传递

形参改变,实参也改变。内存地址一样

package main
import "fmt"
func main() {
  // 切片,可以扩容的数组
  s1 := []int{1, 2, 3, 4}
  fmt.Printf("%p %d", s1, s1)
  update2(s1)
  fmt.Printf("%p %d", s1, s1)
}
func update2(s2 []int) {
  fmt.Println("传递前的参数", s2)
  s2[0] = 100
  fmt.Println("传递后的参数", s2)
}


相关文章
|
大数据 编译器 Go
104.【GoLang基础】(三)
104.【GoLang基础】
86 0
|
编译器 Go Windows
104.【GoLang基础】(一)
104.【GoLang基础】
59 0
|
缓存 并行计算 Go
104.【GoLang基础】(四)
104.【GoLang基础】
56 0
|
Java 编译器 Go
104.【GoLang基础】(二)
104.【GoLang基础】
55 0
|
5月前
|
Go
|
5月前
|
监控 安全 Go
|
5月前
|
存储 Java Go
|
5月前
|
存储 JSON 数据库连接
|
5月前
|
存储 Java Go
|
12月前
|
中间件 Go API