分享
  1. 首页
  2. 文章

golang 基础知识1

jay--zhang · · 1772 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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









有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:jay--zhang

查看原文:golang 基础知识1

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1772 次点击
2 回复 | 直到 2023年11月24日 22:34:20
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏