golang 基础知识1

Posted jay-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


 






以上是关于golang 基础知识1的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现简单的 Web 服务器

代码片段 - Golang 实现集合操作

json [Golang] golang #golang #snippets中有用的片段

片段是否执行基础数据的复制?

java golang oop 2文章片段

golang 去练习片段