Go基础知识

参考菜鸟编程Go 语言常量 | 菜鸟教程

1. =与:=

:= 符号用于变量声明和初始化。定义一个新的变量并进行赋值,例如:x := 1,自动推导出左边变量的类型,并赋值。需要注意的是,:= 只能在函数内部使用,在函数外部只能使用 var 关键字。

= 符号用于变量赋值操作。它将右边的值赋给左边的变量,例如:x = 20。需要注意的是,= 运算符只执行赋值操作,不会对变量类型进行推导,需要使用var声明。

(1)var x int = 1

(2)var x = 1

(3)var x

     x = 1

对于两个变量v, v2 := fu(xx) 与 v, v3 := fu(xx)不会报错,只要有一个新声明就行。

2.  _

空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。

_ 实际上是一个只写变量,不能得到它的值。 Go 语言中必须使用所有被声明的变量,但有时并不需要使用从一个函数得到的所有返回值.

3.内置函数

const常量函数只能内置函数(len(xx),  cap(xx).),unsafe.Sizeof(xx)返回数据类型的大小,不返回引用数据大小,比如String是在64位系统占16个字节。

4.iota特殊常量

iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

iota 可以被用作枚举值,每当在新一行使用就会+1

package main

import "fmt"

func main() {
    const (
            a = iota   //0
            b          //1
            c          //2
            d = "ha"   //独立值,iota += 1
            e          //"ha"   iota += 1
            f = 100    //iota +=1
            g          //100  iota +=1
            h = iota   //7,恢复计数
            i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)//0 1 2 ha ha 100 100 7 8
}

左移。 1<<0=1,3<<1=6(二进制11->110)

package main

import "fmt"
const (
    i=1<<iota
    j=3<<iota
    k  //3<<2
    l //3<<3
)

func main() {
    fmt.Println("i=",i) //1
    fmt.Println("j=",j) //6
    fmt.Println("k=",k) //12
    fmt.Println("l=",l) //24
}

5.条件语句

select类似switch,但会随机执行一个可运行的case,没有可运行的阻塞至有可运行的case

Go没有三目运算符?:

6.全局变量和局部变量

Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑

7.数组

在 Go 语言中,数组的大小是类型的一部分,因此不同大小的数组是不兼容的,也就是说 [5]int 和 [10]int 是不同的类型。
 

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

var a int = 1

//  将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}

8.输出

%x. 地址

%T 类型

%s.    %d

9.结构体

type test struct{ name string}

test t1

t1.name

*test t2=&t1

t2.name

10.切片

对数组的抽象,一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

var identifier []type

或者make
var slice1 []type = make([]type, len)

也可以简写为

slice1 := make([]type, len)



也可以make([]type,len cap)

基于原数组或者切片创建一个新的切片后,那么新的切片的大小和容量是多少呢?

对于底层数组容量是 k 的切片 slice[i:j] 来说:

长度: j-i
容量: k-i

11.range范围

在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

range 迭代字符串时,返回每个字符的索引和 Unicode 代码点(rune)(字符值)

for key,value := slice1{

  new slice[key] = value}

12.map

定义
/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType, initialCapacity)


map1 := make(map[string]string,10)
map1["aa"]="apple"
// 删除键值对
delete(m, "apple")

13.类型转换(¥需要再详细了解一下)

https://www.runoob.com/go/go-type-casting.html

14.接口(¥需要再详细了解一下)

Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。

空接口 interface{} 可以持有任何类型的值。在实际应用中,空接口经常被用来处理多种类型的值。

15.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值