首页 > 其他分享 >【Go基础】快速入门

【Go基础】快速入门

时间:2024-05-31 21:00:46浏览次数:17  
标签:Println arr 入门 int fmt Person Go 快速 string

Go基础入门

用20%的时间学习常用80%的语法

官方网址(下载安装/官方文档/官方类库)

  • Download Go binaries from https://go.dev/dl/
  • Reference the official Go documentation https://go.dev/doc/
  • See all the the Go packages https://pkg.go.dev/
  • Access the Go Playground https://go.dev/play/

编译运行与打包

package main
import "fmt"
func main() {
    fmt.Println("Hello, World!")
}
  • go run hello.go

  • <GOOS=[darwin|linux|windows] GOARCH=[386|amd64|arm]> go build hello.go

  • GOPATH, the path to store models/libraries,default:$HOME/go

语言特性

  • 空白格没有特殊意义,不像python,用缩进表示代码块
  • 分号可以省略,像javascript
fmt.Println("Hello, World!")
  • 注释
// 这是单行注释

/*
这是多行注释
*/
  • 变量 大小写区分,由字母数字下划线组成,作用域:包级别/函数级别,变量声明后未使用会报错
  • 常量使用 const
// 三种变量的声明与初始化
var a = 10; //自动检测类型
var b int; b = 11;// 手动声明类型
c:=10 // 简化声明
// 多变量声明
var a,b=10,"Jim"; 
a,b:=10,"Jim"
  • 基本数据类型

    • 整型 int, int8, int16, int32, rune, int64, uint, uintptr, uint8, uint16, uint64
    • 浮点 float32 float64
    • 复数 complex32 complex64
    • 字节 byte,in ASCCI
    • 字符串 string,a set of byte vaules
    • 布尔 bool,true/false
  • 字符串

var str = "test"; //必须双引号
len(str) //4 求长度,使用内置len函数
str[0] //读取某个位置字符
str[:2] str[2:] str[:]//te st  test 读取部分子串
str[:2] + str[2:] //test 使用 + 拼接字符串
// 使用内置strings提供的函数库 https://pkg.go.dev/strings
strings.ToUpper() //转大写
strings.ToLower() //转小写
strings.HasPrefix(a, b) //判断a是否以b开始
strings.HasSuffix(a,b) //判断a是否以b结尾
strings.Contains(a,b) //判断a是否包含b子串
strings.Count(a,b) //计算b在a中出现多少次
strings.Join(a string[],sep) //将字符串数组a使用sep拼接起来
strings.Split(a,sep) //将字符串a按sep分隔成字符串数组
strings.ReplaceAll(a,old,new) //将a中所有old字符串替换成new字符串
  • 数组
var arr [3]string //声明字符串数组
var arr = [3]string{"a","b","c"} //声明并且赋值
var arr = [...]string{"a","b","c"} 
arr[0] arr[1] //访问
arr[2] = "e" //更新 
len(arr)// 3 求元素数
//复制
a := [...]string{"first","second","third"}
b := a;
a[2]="another"
b[2] // third,保持不变
a[2] // another
  • 分片(不同于数组,大小可调整)
//忽悠定义大小
var arr []string  // 声明不带大小
arr := []string{"first","second","third"} // 声明并赋值
arr0 := make([]string,0,10) // 通过make函数创建容量为10的空分片
arr1 := make([]string,3) // 通过make函数创建大小为3的分片
arr2 := append(arr,"forth","fifth")//通过append追加字符串,注意不能直接复制给原来分片
copy(arr1,arr)//将arr赋值给arr1
//来自同一个数组的所有分片共享一份数据,改动其中一个,其他分片受影响
myArray := [3]string{"First", "Second", "Third"} //定义数组
mySlice := myArray[:] //通过数组得到分片1,分片2
mySlice2 := myArray[:]
mySlice[0] = "test" // 改动分片1
mySlice2[0] // test 分片2受影响
  • Maps
// 声明map,下面两行等价
myMap := make(map[string]int);myMap["a"]=1;// 声明,添加
myMap := map[string]int{"a":1}//声明初始化
myMap["a"]//访问
delete(myMap,"a")//删除
  • 循环
for i:=0;i<10;i++ {
  fmt.Println(i)
}
// go 只有for,可以模拟while
i:=0
for i < 10 {
  fmt.Println(i)
  i++
}
// 省略条件的for,通过break跳出循环
for {
  fmt.Println(i)
  if(i >= 10){
    break
  }
  i++
}
// for 迭代数组使用range
numbers := []int{1,2,3,4,5}
for index,number := range numbers { //使用_替换index,如果不需要index
  fmt.Printf("%d: %d\n", index, number)
}
  • 条件
// if条件
if age < 12 {
  //child
} else if age < 18  {
  //teen
} else {
  //adult
}
// switch , 不需要break
switch age{
  case 0: fmt.Println("Zero years old")
  case 1: fmt.Println("One year old")
  case 2: fmt.Println("Two years old")
  case 3: fmt.Println("Three years old")
  default: fmt.Println(i + " years old")
}
  • 操作符
//比较操作符
== != > < >= <=
//算术运算符
+ - * / %
// 逻辑运算符
&& || !
// 字符串拼接
+
//自增自减
++ --
  • 结构体(变量集合)
//定义结构体
type Person struct{
  Name string //大写表示public access,小写表示private
  Age int
}
//实例1
jim := Person{}
jim.Age = 20;
jim.Name = "Jim"
//实例2
jim := Person{"Jim",20} 
//实例3
jim := Person{Age:20,Name:"Jim"} 
jim := Person{Name:"Jim"} 

//访问
jim.Name // Jim
jim.Age //20

// 结构体嵌套结构体
type Class struct{
  Teacher Person // 这里 嵌套Person结构体
  NumberOfStudents int
}

  • 函数(将代码组成块,并起了名字)
//声明函数(无返回值),调用
func doSomething(a int ,b int){

}
doSomething(1,2)
// 多返回值
func doSomething(a int ,b int) (int,int) {
  return b,a
}
a,b := doSomething(1,3);
// 接收可变参数
func sum(numbers ...int) int {
  total := 0
  for _,number := range numbers {
    total += number
  }
  return total
}
total := sum(1,2,3,4,5)
  • 方法(绑定到结构体的函数)
type Person struct{
  Name string
  Age int
}
func (p Person) Speak(){
  fm.Println("Hello, I'm " + p.Name + "," + p.Age)
}
func (p *Person) Speak(){
  fm.Println("Hello, I'm " + p.Name + "," + p.Age)
}
  • 指针
age := 20;
ageAddr := &age // 获取内存地址
age2 := *ageAddr // 获取地址对应值

func doSomething( i int){// 值传递
  i = 21;
}
doSomething(age) //没改变age

func doSomething(i *int){ // 指针传递
  *i = 21;
}
doSomething(age) // age 变成 21
  • 接口(声明一个或多个方法签名)
//声明接口
type Speaker interface{
  Speak()
}
// 定义接收接口的函数
func doSomething(Speaker s){
  s.Speak()
}
//定义实现Speak方法的结构体
type Person strut{
  Name string
}
func (p Person) Speak(){
   fm.Println("Hello, I'm " + p.Name)
}
//实例结构体,并传入已经定义的函数
p := Person{Name:"jim"}
doSomething(p) 

标签:Println,arr,入门,int,fmt,Person,Go,快速,string
From: https://blog.csdn.net/avenccssddnn/article/details/139361024

相关文章

  • CSS定位详细教学(CSS从入门到精通第六天)
    CSS第六天今日目标能够说出为什么要用定位能够说出定位的4种分类能够说出4种定位各自的特点能够说出为什么常用子绝父相布局能够写出淘宝轮播图布局能够说出显示隐藏的3种方式以及区别1.定位(position)介绍1.1为什么使用定位我们先来看一个效果,同时思......
  • 用Python脚本迁移MongoDB数据到金仓-kingbase数据库
    1、首先需要明确MongoDB与kingbase的对应关系,collection相当于table,filed相当于字段,根据这个对应关系创建表;此次迁移的MongoDB里的数据字段是:_id(自动生成的objectid),image(转成二进制存储的文档)所以在金仓里创建表createtableadmin(idvarchar,imagebytea);2、安装Python环境......
  • 创新入门 | 精益创业:创新企业成功的关键策略
    探索精益创业方法如何帮助初创企业在不确定的市场环境中快速成长。了解SteveBlank与EricRies如何通过客户验证、快速失败和最小可行产品(MVP)等原则,引导企业实现持续创新和有效资源利用。本文深入分析精益创业的实践案例,揭示其对现代企业成功的重要性。在初创企业动态多变的......
  • pandas快速入门
    涵盖Pandas的基本主题,如创建列、数据清理等开启本学习计划,需了解基本的Python语法与常见数据结构2877.从表中创建DataFrameLeetCode-2877.从表中创建DataFrame-AisaMaral-博客园(cnblogs.com)2878.获取DataFrame的大小LeetCode-2878.获取DataFrame的......
  • 如何快速获取那些可以使用的摄像头编号
    importcv2 #导入OpenCV库#尝试检测系统中可用的摄像头索引defget_camera_indices(max_tested=10): #定义一个函数,用于检测系统中可用的摄像头索引,默认最大测试到10  available_indices=[] #初始化一个空列表,用于存储可用的摄像头索引  foriinran......
  • fps游戏如何快速定位矩阵
    fps游戏如何快速定位矩阵矩阵特点:1、第一行第一列值的范围在**-1----1**之间,如果开镜之后值会变大。2、第一行第三列的值始终为0。3、第一行第四列的值比较大,>300或者**<-300**。根据这三个特点,定位矩阵已经足够了。找到的矩阵可以有多个,根据透视的效果,使用最佳......
  • golang函数使用基础
    函数介绍有其他语言基础的话就没啥介绍的,基本语法:funcfunctionName(形参列别)(返回值列表){执行语句return返回值列表}例子:funcgetSum(n1int,n2int)int{varresint=n1+n2 returnres}包实际就创建不同的文件夹,存放程序文件。Go的每一个文......
  • 上架 Google Play 的那些辛酸泪
    一、注册Google账号首先你要有个账号,地址如下:accounts.google.com/signup/v2/w…按照Google爸爸要求,该填写的都填了,随后点击下一步。验证手机号:输入验证码验证当前手机号:其他信息填写,这里我个人建议,能填的都填,预防万一:别杠,Google让启用就启用,乖。接下来......
  • 黑客团伙利用Python、Golang和Rust恶意软件袭击印国防部门;OpenAI揭秘,AI模型如何被用于
    巴黑客团伙利用Python、Golang和Rust恶意软件袭击印度国防部门!与巴基斯坦有联系的TransparentTribe组织已被确认与一系列新的攻击有关,这些攻击使用Python、Golang和Rust编写的跨平台恶意软件,针对印度政府、国防和航空航天部门。“这一系列活动从2023年底持续到2024年4月......
  • linux 快速部署jar 并加入开机自启(超方便)
    第一步cd/etc/systemd/system/第二步创建app.service可以在本地创建好在传到/etc/systemd/system/目录下/usr/bin/java需要改成自己的java环境对应地址/srv/sites/app.jar改为自己jar存放包地址[Unit]Description=appserviceAfter=syslog.target[Service]Type......