go 基础知识
  dy78R63Mycs7 2023年11月02日 45 0
  • 所有go源码以.go结尾.
  • golang可执行程序,package main有且只有一个main入口函数.
  • 两种注释:单行注释//和多行注释/* */

1. 变量命名:

  • 标识符以字母或下划线开头,大小写敏感 以数字开头、含有特殊符号不行.
  • _是特殊标识符,用来忽略结果
  • 保留关键字

2. import方式:

①. import("fmt")
②. import {
     "fmt"
   }

4. 常量:

  • 常量使用const修饰,代表永远是只读的,不能修改.即在编译的时候就已经确定了.
  • const只能修饰boolean、number(int相关类型、浮点类型、complex)和string.
  • 语法: const identifier [type] = value // 其中type可以省略
  • 举例: const b string = "hello world" const b = "hello world" // 不写type在编译时,会自动推导类型 const b = 9/3 // 在编译时,会自动计算值 const c = getValue() // 错误的,因为函数只有在运行时,才会知道返回值
  • 比较优雅的写法: const ( a = 0 b = 1 c = 2 )
  • 更加专业的写法: const ( a = iota // 这个会下面会自动+1 b // 值为1 c // 值为2 )

5. 变量:

  • 语法: var identifier type
  • 举例: var a int var d int = 8 Var ( a int // 默认为0 b string // 默认为"" c bool // 默认为false d int = 8 e = "hello world" // 可以不写type类型 )

5.1 值类型和引用类型:

  • 值类型: a. 变量直接存储值,内存通常在栈中分配. b. 基本数据类型: int、float、bool、string以及数组和struct c. var i = 5 // i ---> 内存中的值
  • 引用类型: a. 变量存储的是一个地址,这个地址存储最终的值. b. 内存通常在堆上分配,通过GC回收. c. 传指针效率高,如果传一个很大的结构体,效率就不高了. d. 引用类型: 指针、slice(切片)、map、chan等都是引用类型. e. var i = 5 // ref i ---> 地址(指针) ---> 内存中的值 f. &、*的运用: add(&a) func add(int *a) { return *a + 1 // *a表示取这个内存地址对应的值,只是a表示内存地址 }
  • 总结: a. 在函数体中,如果修改传过来的值类型,外面的值不会变化.因为是复制了一份值进去.如果是修改引用类型,因为指针指向同一个变量,所以会影响外面的值.

(1). 举例:

func main() {
	fmt.Println(calc.Age)
	a := 10
	b := 20
	swap(&a, &b);
	fmt.Println(a);                  // 10
	fmt.Println(b);                  // 20
}
func swap(a *int, b *int) {         // 这里是交换拷贝值的内存地址,不影响外面
	temp := a
	a = b
	b = temp
	fmt.Println("swap a:", *a);      // 20
	fmt.Println("swap b:", *b);      // 10
}

不管值类型是传递值还是内存地址,都是重新拷贝一份.

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
dy78R63Mycs7
作者其他文章 更多

2023-11-14

2023-11-13

2023-11-13

2023-11-13

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02