数据类型:注意,与C++不同,不需要初始化,数值类型默认值为0,布尔类型默认值false,字符串为空字符串。
-
整形 int8\16\32\64,无符号uint8\16\32\64(默认int\uint为8位)
-
浮点型float32\64
-
复数complex64\128
-
布尔型bool
-
字符串型string
变量与常量
-
同一行声明多个变量:var a,b,c int =1,2,3或者a,b:=1,2
-
全局变量声明必须使用var关键词,局部变量可以省略;
-
变量可见性规则:大写字母开头的变量可以导出,在其他包中可以读取,是共有变量; 小写字母开头则不可以,是私有变量。
-
特殊变量iota:
//普通使用:
(iota在关键字const出现时被重置为0;const中每新增一行常量声明,iota会被重置一次)
const a = iota const ( b = iota c = iota ) 输出a,b,c为0,0,1//插队使用
(go中,_下划线代表”垃圾桶”,本代码中,iota本来要自增成1,但有垃圾桶存在,被“收纳”了,因此轮到c定义时候会使用iota下一个自增的2的数值了)
const a = iota const ( b = iota _ c = iota ) 输出a,b,c为0,0,2//隐式使用
(当b、c为赋值时候,会隐式调用已存在的表达式,即b对应的iota=1代入a=iota*2,得到2,同理c=4)
const ( a= iota*2 b c ) 输出a,b,c为0,2,4//单行使用
(同一行,多向量定义,iota一直为同一个数,下一行继续加一;注意,第一行有两个变量,那么此后若采用隐式定义,必须同样有两个变量)
const ( a,b= iota,iota*2 b,c ) 输出a,b,c,d为0,0,1,2
运算符:略
控制语句:和C++比较像。注意,
if a>0{
}//if语句的条件没有括号!!!
switch 3 {
case 1:
case 2:
default:
}
//switch的条件没有括号!!!不需要break,遇到符合条件的执行后自动退出!!!
for I:=0;I<10;I++{
}//for条件同样没有括号!!!
a:=[]string{“a”,”b”,”c”}
for key,value:=range a{
Println(key)
Println(value)
}
//键值对(类似C++哈希表)的打印方法
go派生类型学习:
1、函数
这个函数与C++很像,但又有go的风格:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "Runoob")
fmt.Println(a, b)
}
大概就是这样,学了前面的东西之后,看顺眼了许多
注意:函数返回值可以有多个;值传递不会改变结果,需要使用引用传递
简易函数:
package main
import (
"fmt"
"math"
)
func main(){
/* 声明函数变量 */
getSquareRoot := func(x float64) float64 {
return math.Sqrt(x)
}
/* 使用函数 */
fmt.Println(getSquareRoot(9))
}
还有匿名函数之类的,用到再看吧
2、数组:
var numbers [5]int//定义int数组,大小为5,默认为0
var numbers = [5]int{1, 2, 3, 4, 5}//直接赋值
balance := [5]float32{1:2.0,3:7.0}// 将索引为 1 和 3 的元素初始化
3、指针:
var ip *int //定义指针
nil//go中代表空指针
var ptr [3]*int;//大小为3的整形指针数组
4、结构体:
type Books struct {
title string
author string
subject string
book_id int
}
定义:
var Book1 Books = Books{"DAYDAYUP", "Tung", "STUDY", 01}
或者是:
var Book1 Books = Books{title: "DAYDAYUP", author: "Tung", subject: "STUDY", book_id: 01}