• golang 基础知识1


    1.slice和array

    package main

    import (
        "fmt"
      )

    func main() {
      s := []int{1, 2, 3}
      ss := s[1:]
      for i := range ss {
        ss[i] += 10      //slice中改变数组的值会将原数组中的值改变
      }
      fmt.Println(s)
      ss = append(ss, 4) //append后的值赋给了变量ss,则ss就不会指向原数组
      fmt.Println(ss)
      for i := range ss {
        ss[i] += 10
      }
      fmt.Println(ss)
      fmt.Println(s)
    }

    //结果

    [1 12 13]
    [12 13 4]
    [22 23 14]
    [1 12 13] 

    2.:= 与var

    :=必须用在func内部,var可以生成一个全局的变量

    没声明和已经声明的都可以用 := ,但是没有声明的不能直接用 =:

      x, _ := f() //错,x已经声明不需要用 :=

      x, _ = f()   //对, x已经声明可以直接使用 =

      x, y := f()  //对, y没有声明

      x, y = f()   //错, y没有声明,不能直接使用 =

    3.map的正确使用方法

    使用map,必须使用make生成map,否则不能初始化map的值。
    var m make(map[string]int)   //使用make来初始化map
    for key, ok :=
    m["b"]; ok { //使用ok来判断遍历的正确是否,不用其他方式
      println(v)

      }


    4.strct 的初始化和调用

      //定义struct

    type Student struct {
    	id      int
    	name    string
    	address string
    	age     int
    }
    1.赋值方式:
         var s *Student = new(Student)
    	s.id = 101
    	s.name = "Mikle"
    	s.address = "红旗南路"
    	s.age = 18
    2.var s1 *Student = &Student{102, "John", "Nanjing Road", 19}
    这两种都是指针类型的。package main
    type S struct {
        m string
    }
    
    func f() *S {
        return &S{"foo"} //A
    }
    
    func main() {
        p := *f()  //B,这里加*是表示返回的是指针类型 *&正好中和,*是获取指针的值。
        print(p.m) //print "foo"
    }

    5.传参是传指针还是具体的变量。

    如果参数func(p *
    interface{}) 则只能传指针类型,
    如果参数func(p interface{})  可以传指针和具体变量。
    package main
    
    type S struct {}
    
    func f(x interface{}) {}
    
    func g(x *interface{}) {}
    
    func main() {
        s := S{}
        p := &s
        f(s) //A correct
        g(s) //B incorrect
        f(p) //C correct
        g(p) //D incorrect
    }
    6.存指针的map的方式,指针是*int
    m := make(map[int]*int)
    7.for循环的i,获取临时变量的指针,由于go的闭包属性,

    package main

    const N = 3

    func main() {
      m := make(map[int]*int)

      for i := 0; i < N; i++ {
        m[i] = &i //A
      }

      for _, v := range m {
        print(*v)
      }
    }

    由于闭包关系,最后所引用的值,则是最后一个的值。因此要改变这种情况,最好是在for循环内再重新常见一个变量

    package main
    
    const N = 3
    
    func main() {
    	m := make(map[int]*int)
    
    	for i := 0; i < N; i++ {
    		j := int(i)    //这是一个新的变量,因此不会被后来者覆盖。
    		m[i] = &j
    	}
    
    	for _, v := range m {
    		print(*v)
    	}
    }
    

     8.var 的全局变量定义

         必须要声明变量的类型,例如: var s int


     






  • 相关阅读:
    [栈]
    [数据结构实验]学生成绩管理
    [数据结构实验]集合交并
    shapefile 转 geojson 文件类型
    ubuntu sublime text key
    opengl
    c++
    sublime text3 key
    ubuntu安装nvidia驱动
    全球国家svg边界svg
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/8194120.html
Copyright © 2020-2023  润新知