Go语言学习(1)

Go语言起步——hello world
1.创建项目,在项目入口(main函数中)

package main

import "fmt"

func main() {
	fmt.Println("hello world!")
}

输出:

hello world!

Process finished with exit code 0

字符串

package main

import "fmt"

func main() {
	s := "hello"
	fmt.Println(s)
}

输出:

hello

Process finished with exit code 0

字符串是用一对双引号包裹的
字符是用一对单引号包裹的。

修改字符串

package main

import "fmt"

func main() {
	s := "hello"
	c := []byte(s)
	c[0] = 'c'
	s2 := string(c)
	fmt.Println(s2)
}

输出:

cello

Process finished with exit code 0

这里要注意的是 修改字符串不能直接赋值修改,而需要先将其转换成[]rune[]byte,完成后再转换为string
无论哪种转换,都会重新分配内存,并复制字节数组。

修改字符串也可以这样:

package main

import "fmt"

func main() {
	s := "hello"
	s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作
	fmt.Println(s)
}

输出的结果相同:

cello

Process finished with exit code 0

声明多行的字符串

package main

import "fmt"

func main() {
	s3 := `hello
	world`
	fmt.Println(s3)
}

输出:

hello
	world

Process finished with exit code 0

多行字符串,是用反引号,原样输出字符串。

错误类型

package main

import (
	"errors"
	"fmt"
)

func main() {
	err :=errors.New("我是一个错误信息!")
	if err != nil {
		fmt.Println(err)
	}
}

输出:

我是一个错误信息!

Process finished with exit code 0

Go内置有一个error类型,专门用来处理错误信息,Go的package里面还专门有一个包errors来处理。

数组

数组的声明:

//全局变量
var arr[len]type //初始化变量
var arr1=[len]type {v1,v1,v3,v4,……}  //初始化变量并赋值
var arr3,arr4 [len]type
var arr5 = [...]type {v1,v2,v3,v4,……} //通过... 在初始化赋值时自动确定数组长度
//局部变量
arr := [len]type//可以这样

这是数组(array)的声明,大多数情况下声明的数组为切片(slice)也叫动态数组。
切片(slice)的长度是不固定的,并且切片(slice)总是指向一个底层arrary
切片(slice)的声明可以像array一样,只是不需要长度。

声明数组,如果初始化数组赋值的个数小于数组初始化的长度,则缺值用0补齐。

package main

import "fmt"

var slice1 =[5]int{1,2,4}

func main() {
	fmt.Println(slice1)
}

输出:

[1 2 4 0 0]

Process finished with exit code 0

map

也就是Python中字典的概念,它的格式为map[keyType]valueType

注意:

  • map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取。
  • map的长度是不固定的,也就是和slice一样,也是一种引用类型。
  • 内置的len函数同样适用于map,返回map拥有的key的数量。
  • map的值可以很方便的修改,通过numbers["one"]=11可以很容易的把keyone的字典值改为11
  • map和其他基本型别不同,它不是thread-safe,在多个go-routine存取时,必须使用mutex lock机制。

map有两个返回值,第二个返回值是判断key是否存在。

make和new
1.make
make用于内建类型(mapslicechannel)的内存分配。返回一个有初始值(非零)的T类型,而不是*T

make返回初始化后的(非零)值

2.new
new用于各种类型的内存分配。
内建函数newnew(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值,即 它返回一个指针,指向新分配的类型T的零值。

new 返回指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值