go语言入门

我在这区别式C进行总结知识点

1.增加数据类型

  字典map 

package main
 
import "fmt"

 func main() {
testmap := make(map[string]int) //表示创建一个key为string,value的值为int的数据类型。
     testmap["dont"] = 24
     fmt.Println(testmap)
 }

  数组切片(类似于stl中的vector容器)

package main

import "fmt"

func main() {
   var numbers []int  //声明一个数组
   printSlice(numbers)
   /* 允许追加空切片 */
   numbers = append(numbers, 0)
   printSlice(numbers)

   /* 向切片添加一个元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同时添加多个元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 创建切片 numbers1 是之前切片的两倍容量*/
   numbers1 := make([]int, len(numbers), (cap(numbers))*2)

   /* 拷贝 numbers 的内容到 numbers1 */
   copy(numbers1,numbers)
   printSlice(numbers1) 
}
func printSlice(x []
int){    fmt.Printf("len=%d cap=%d slice=%v ",len(x),cap(x),x) }

2.函数多返回值的特性,对于忽略不关心的返回值可以使用“_”来占位填充。

3.错误处理:

  defer():延迟调用,多个defer,依次入栈,在函数即将退出时,依次出栈调用

package main
import "fmt"
func main() {
      defer func() {
          fmt.Println("defer one")   
      }()
      defer func() {
          fmt.Println("defer two")   
      }()
     defer func() {
         fmt.Println("defer three")  
     }()
 }

  panic():单独使用其后的代码不会执行;

      与defer结合使用,panic触发错误,defer依次出栈调用,没有recover捕获的情况下,最后才打印错误;

      与defer、recover结合使用,panic触发错误,defer依次出栈调用,直到被recover捕获,打印捕获的信息,之后继续defer出栈。

  recover():只有在defer中调用,才有效,否则返回nil

4.并发编程

启动goroutine模式,即启动协程,搭配channel(通道)联合使用

  goroutine是go语言中并发的执行单位。channel是go语言中各个goroutine之间的通信机制

package main

import "fmt"

func main(){
      messages := make(chan string)
      go func(){messages <- "ping"}      
}

5.反射

  反射就是用来检测存储在接口变量内部(值value;类型concrete type) pair对的一种机制。

  基本功能:

    ①TypeOf:获取目标对象的类型,TypeOf:获取目标对象的值

    示例:

package main

import (
    "fmt"
    "reflect"
)
func main() {
    var num float64 = 1.2345

    fmt.Println("type: ", reflect.TypeOf(num))
    fmt.Println("value: ", reflect.ValueOf(num))
}

运行结果:
type:  float64
value:  1.2345

    ②获取接口信息

    ③设置实际变量的值

    ④进行方法的调用

参考链接:https://studygolang.com/articles/12348?fr=sidebar

6.对于常量的赋值是编译器行为,故右值不能出现任何需要运行期才能得出结果的表达式

7.预定义变量“itoa:0”,默认值为0,每遇到一个const就被重置为0,进行下一次从0累加。

8.循环方式:采用for、range

9.内置函数make(类型,参数)——创建变量

10函数命名规则:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用

原文地址:https://www.cnblogs.com/single-dont/p/13307715.html